Kumar Siddaramayya | a899ded | 2024-09-23 15:25:22 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | # |
| 3 | # Copyright (c) 2024 Nordic Semiconductor ASA |
| 4 | # |
| 5 | # SPDX-License-Identifier: Apache-2.0 |
| 6 | |
| 7 | """ |
| 8 | Log Parser for Dictionary-based Logging |
| 9 | |
| 10 | This uses the JSON database file to decode the binary |
| 11 | log data taken directly from input serialport and print |
| 12 | the log messages. |
| 13 | """ |
| 14 | |
Kumar Siddaramayya | a899ded | 2024-09-23 15:25:22 +0200 | [diff] [blame] | 15 | import argparse |
| 16 | import logging |
| 17 | import sys |
Pieter De Gendt | bf2db7a | 2024-11-21 13:49:46 +0100 | [diff] [blame] | 18 | import time |
Kumar Siddaramayya | a899ded | 2024-09-23 15:25:22 +0200 | [diff] [blame] | 19 | |
| 20 | import parserlib |
Pieter De Gendt | bf2db7a | 2024-11-21 13:49:46 +0100 | [diff] [blame] | 21 | import serial |
Kumar Siddaramayya | a899ded | 2024-09-23 15:25:22 +0200 | [diff] [blame] | 22 | |
| 23 | LOGGER_FORMAT = "%(message)s" |
| 24 | logger = logging.getLogger("parser") |
| 25 | |
| 26 | def 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 | |
| 38 | def 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 | |
| 63 | if __name__ == "__main__": |
| 64 | main() |