| #!/usr/bin/env python3 | 
 |  | 
 | # Simple script to expose host serial console logs | 
 | # Search and get the log via redfish in every 5 seconds | 
 |  | 
 | import argparse | 
 | import json | 
 | import logging | 
 | import time | 
 | import traceback | 
 |  | 
 | import requests | 
 |  | 
 | parser = argparse.ArgumentParser() | 
 | parser.add_argument("--host", help="Host to connect to", required=True) | 
 | parser.add_argument("--cert", help="File path to cert", required=True) | 
 | parser.add_argument( | 
 |     "--username", help="Username to connect with", default="root" | 
 | ) | 
 | parser.add_argument("--password", help="Password to use", default="0penBmc") | 
 |  | 
 | args = parser.parse_args() | 
 |  | 
 |  | 
 | def requests_get(url): | 
 |     try: | 
 |         resp = requests.get( | 
 |             url=url, | 
 |             cert=args.cert, | 
 |             verify=False, | 
 |             headers={"Cache-Control": "no-cache"}, | 
 |             timeout=5, | 
 |         ) | 
 |         data = resp.json() | 
 |  | 
 |         if resp.status_code != requests.codes.ok: | 
 |             print( | 
 |                 "There occurs error when get request, status_code = " | 
 |                 + str(resp.status_code) | 
 |                 + "\n" | 
 |             ) | 
 |             print(json.dumps(data, indent=4, sort_keys=True)) | 
 |             pass | 
 |  | 
 |         return data | 
 |  | 
 |     except Exception: | 
 |         traceback.print_exc() | 
 |         pass | 
 |  | 
 |  | 
 | def label_parser(url, label): | 
 |     data = requests_get(url) | 
 |     for key in sorted(data.keys()): | 
 |         if key == label: | 
 |             content = data[key] | 
 |             break | 
 |     return content | 
 |  | 
 |  | 
 | def main(): | 
 |     logging.captureWarnings(True) | 
 |     totalEntryUri = ( | 
 |         f"https://{args.host}/redfish/v1/Systems/system/" | 
 |         + "LogServices/HostLogger/Entries/" | 
 |     ) | 
 |     id = 0 | 
 |     entryCount = 0 | 
 |     message = "" | 
 |  | 
 |     while 1: | 
 |         entryCount = label_parser(totalEntryUri, "Members@odata.count") | 
 |         if id == entryCount: | 
 |             # entryCount equals to ID means there has no change during the | 
 |             # interval, sleep 5 seconds for next search. | 
 |             time.sleep(5) | 
 |         elif id < entryCount: | 
 |             # print new entries which created in this interval. | 
 |             for i in range(id + 1, entryCount): | 
 |                 singleEntryUri = ( | 
 |                     "https://{}/redfish/v1/Systems/system/LogServices/" | 
 |                     "HostLogger/Entries/{}".format(args.host, i) | 
 |                 ) | 
 |                 message = label_parser(singleEntryUri, "Message") | 
 |                 # need to present all special characters, so use "repr" | 
 |                 # function | 
 |                 print(repr(message)) | 
 |             id = entryCount | 
 |  | 
 |  | 
 | main() |