xref: /openbmc/bmcweb/scripts/hostlogger_test.py (revision baddb597)
15e89efd9SSpencerKu#!/usr/bin/env python3
25e89efd9SSpencerKu
35e89efd9SSpencerKu# Simple script to expose host serial console logs
45e89efd9SSpencerKu# Search and get the log via redfish in every 5 seconds
55e89efd9SSpencerKu
65e89efd9SSpencerKuimport argparse
75e89efd9SSpencerKuimport json
85e89efd9SSpencerKuimport logging
95e89efd9SSpencerKuimport time
10ddfc6752SPatrick Williamsimport traceback
11ddfc6752SPatrick Williams
12ddfc6752SPatrick Williamsimport requests
135e89efd9SSpencerKu
145e89efd9SSpencerKuparser = argparse.ArgumentParser()
155e89efd9SSpencerKuparser.add_argument("--host", help="Host to connect to", required=True)
165e89efd9SSpencerKuparser.add_argument("--cert", help="File path to cert", required=True)
171349014dSPatrick Williamsparser.add_argument(
181349014dSPatrick Williams    "--username", help="Username to connect with", default="root"
191349014dSPatrick Williams)
205e89efd9SSpencerKuparser.add_argument("--password", help="Password to use", default="0penBmc")
21*baddb597SEd Tanousparser.add_argument("--verify", default=True, help="Verify TLS certificates")
225e89efd9SSpencerKu
235e89efd9SSpencerKuargs = parser.parse_args()
245e89efd9SSpencerKu
255e89efd9SSpencerKu
265e89efd9SSpencerKudef requests_get(url):
275e89efd9SSpencerKu    try:
285e89efd9SSpencerKu        resp = requests.get(
295e89efd9SSpencerKu            url=url,
305e89efd9SSpencerKu            cert=args.cert,
31*baddb597SEd Tanous            verify=args.verify,
325e89efd9SSpencerKu            headers={"Cache-Control": "no-cache"},
335e89efd9SSpencerKu            timeout=5,
345e89efd9SSpencerKu        )
355e89efd9SSpencerKu        data = resp.json()
365e89efd9SSpencerKu
375e89efd9SSpencerKu        if resp.status_code != requests.codes.ok:
381349014dSPatrick Williams            print(
391349014dSPatrick Williams                "There occurs error when get request, status_code = "
401349014dSPatrick Williams                + str(resp.status_code)
411349014dSPatrick Williams                + "\n"
421349014dSPatrick Williams            )
431349014dSPatrick Williams            print(json.dumps(data, indent=4, sort_keys=True))
445e89efd9SSpencerKu            pass
455e89efd9SSpencerKu
465e89efd9SSpencerKu        return data
475e89efd9SSpencerKu
48ddfc6752SPatrick Williams    except Exception:
495e89efd9SSpencerKu        traceback.print_exc()
505e89efd9SSpencerKu        pass
515e89efd9SSpencerKu
525e89efd9SSpencerKu
535e89efd9SSpencerKudef label_parser(url, label):
545e89efd9SSpencerKu    data = requests_get(url)
555e89efd9SSpencerKu    for key in sorted(data.keys()):
565e89efd9SSpencerKu        if key == label:
575e89efd9SSpencerKu            content = data[key]
585e89efd9SSpencerKu            break
595e89efd9SSpencerKu    return content
605e89efd9SSpencerKu
615e89efd9SSpencerKu
625e89efd9SSpencerKudef main():
635e89efd9SSpencerKu    logging.captureWarnings(True)
645e89efd9SSpencerKu    totalEntryUri = (
65ddfc6752SPatrick Williams        f"https://{args.host}/redfish/v1/Systems/system/"
66ddfc6752SPatrick Williams        + "LogServices/HostLogger/Entries/"
675e89efd9SSpencerKu    )
685e89efd9SSpencerKu    id = 0
695e89efd9SSpencerKu    entryCount = 0
705e89efd9SSpencerKu    message = ""
715e89efd9SSpencerKu
725e89efd9SSpencerKu    while 1:
735e89efd9SSpencerKu        entryCount = label_parser(totalEntryUri, "Members@odata.count")
745e89efd9SSpencerKu        if id == entryCount:
751349014dSPatrick Williams            # entryCount equals to ID means there has no change during the
761349014dSPatrick Williams            # interval, sleep 5 seconds for next search.
775e89efd9SSpencerKu            time.sleep(5)
785e89efd9SSpencerKu        elif id < entryCount:
795e89efd9SSpencerKu            # print new entries which created in this interval.
805e89efd9SSpencerKu            for i in range(id + 1, entryCount):
815e89efd9SSpencerKu                singleEntryUri = (
825e89efd9SSpencerKu                    "https://{}/redfish/v1/Systems/system/LogServices/"
835e89efd9SSpencerKu                    "HostLogger/Entries/{}".format(args.host, i)
845e89efd9SSpencerKu                )
855e89efd9SSpencerKu                message = label_parser(singleEntryUri, "Message")
861349014dSPatrick Williams                # need to present all special characters, so use "repr"
871349014dSPatrick Williams                # function
885e89efd9SSpencerKu                print(repr(message))
895e89efd9SSpencerKu            id = entryCount
905e89efd9SSpencerKu
915e89efd9SSpencerKu
925e89efd9SSpencerKumain()
93