blob: 28fabc128ea174440c1e54a919390af331e14777 [file] [log] [blame]
Kumar Siddaramayyaa899ded2024-09-23 15:25:22 +02001#!/usr/bin/env python3
2#
3# Copyright (c) 2024 Nordic Semiconductor ASA
4#
5# SPDX-License-Identifier: Apache-2.0
6
7"""
8Log Parser for Dictionary-based Logging
9
10This uses the JSON database file to decode the binary
11log data taken directly from input serialport and print
12the log messages.
13"""
14
Kumar Siddaramayyaa899ded2024-09-23 15:25:22 +020015import argparse
16import logging
17import sys
Pieter De Gendtbf2db7a2024-11-21 13:49:46 +010018import time
Kumar Siddaramayyaa899ded2024-09-23 15:25:22 +020019
20import parserlib
Pieter De Gendtbf2db7a2024-11-21 13:49:46 +010021import serial
Kumar Siddaramayyaa899ded2024-09-23 15:25:22 +020022
23LOGGER_FORMAT = "%(message)s"
24logger = logging.getLogger("parser")
25
26def parse_args():
27 """Parse command line arguments"""
28 argparser = argparse.ArgumentParser(allow_abbrev=False)
29
30 argparser.add_argument("dbfile", help="Dictionary Logging Database file")
31 argparser.add_argument("serialPort", help="Port where the logs are generated")
32 argparser.add_argument("baudrate", help="Serial Port baud rate")
33 argparser.add_argument("--debug", action="store_true",
34 help="Print extra debugging information")
35
36 return argparser.parse_args()
37
38def main():
39 """function of serial parser"""
40 args = parse_args()
41
42 if args.dbfile is None or '.json' not in args.dbfile:
43 logger.error("ERROR: invalid log database path: %s, exiting...", args.dbfile)
44 sys.exit(1)
45
46 logging.basicConfig(format=LOGGER_FORMAT)
47
48 if args.debug:
49 logger.setLevel(logging.DEBUG)
50 else:
51 logger.setLevel(logging.INFO)
52
53 # Parse the log every second from serial port
54 with serial.Serial(args.serialPort, args.baudrate) as ser:
55 ser.timeout = 2
56 while True:
57 size = ser.inWaiting()
58 if size:
59 data = ser.read(size)
60 parserlib.parser(data, args.dbfile, logger)
61 time.sleep(1)
62
63if __name__ == "__main__":
64 main()