Arthur She | 5fc7427 | 2021-03-26 21:24:34 -0700 | [diff] [blame] | 1 | #!/usr/bin/python3 |
| 2 | # |
| 3 | # Copyright (c) 2019-2020 Arm Limited. All rights reserved. |
| 4 | # |
| 5 | # SPDX-License-Identifier: BSD-3-Clause |
| 6 | # |
| 7 | |
| 8 | import os |
| 9 | import sys |
| 10 | import yaml |
| 11 | |
| 12 | """ |
| 13 | The whole messages will go into 'lava.log' and if there are 'feedback' level message, |
| 14 | depends on the message namespace 'ns', the corresponding message will go into separated files |
| 15 | Message Separated log file |
| 16 | level, ns |
| 17 | -------------------------------------------------------- |
| 18 | all lava.log |
| 19 | lvl='target' lava-uart0.log |
Arthur She | 5fc7427 | 2021-03-26 21:24:34 -0700 | [diff] [blame] | 20 | lvl='feedback', ns='terminal_1' lava-uart1.log |
| 21 | lvl='feedback', ns='terminal_2' lava-uart2.log |
| 22 | lvl='feedback', ns='terminal_3' lava-uart3.log |
Arthur She | 808ff55 | 2021-04-02 16:27:22 -0700 | [diff] [blame^] | 23 | anything else in lvl='feedback' feedback.log |
| 24 | messages |
Arthur She | 5fc7427 | 2021-03-26 21:24:34 -0700 | [diff] [blame] | 25 | -------------------------------------------------------- |
| 26 | """ |
| 27 | |
| 28 | USAGE = f"Usage: {sys.argv[0]} /path/to/lava-job-plain-log.log" |
| 29 | |
| 30 | separated_log_file = {"all": "lava.log", \ |
| 31 | "target": "lava-uart0.log", \ |
| 32 | "feedback-terminal_1": "lava-uart1.log", \ |
| 33 | "feedback-terminal_2": "lava-uart2.log", \ |
| 34 | "feedback-terminal_3": "lava-uart3.log", \ |
| 35 | "feedback": "feedback.log"} |
| 36 | opened_logfile = dict() |
| 37 | |
| 38 | if __name__ == "__main__": |
| 39 | args = sys.argv[1:] |
| 40 | if not args: |
| 41 | raise SystemExit(USAGE) |
| 42 | |
| 43 | plain_log = args[0] |
| 44 | des_dir = os.path.dirname(plain_log) |
| 45 | if len(des_dir) == 0: |
| 46 | des_dir = "." |
| 47 | |
| 48 | if not os.path.exists(plain_log): |
| 49 | raise SystemExit("The file '{}' is not exist!!".format(plain_log)) |
| 50 | |
| 51 | with open(plain_log, "r") as job_log: |
| 52 | log_list = yaml.load(job_log, Loader=yaml.SafeLoader) |
| 53 | try: |
| 54 | full_test_log = "{}/{}".format(des_dir, separated_log_file["all"]) |
| 55 | opened_logfile["all"] = open(full_test_log, "w") |
| 56 | for line in log_list: |
| 57 | level = line["lvl"] |
| 58 | msg = line["msg"] |
| 59 | dt = line["dt"] |
| 60 | if (level == "target") or (level == "feedback"): |
| 61 | log_file_id = level |
| 62 | if "ns" in line: |
| 63 | log_file_id = "{}-{}".format(log_file_id, line["ns"]) |
Arthur She | 808ff55 | 2021-04-02 16:27:22 -0700 | [diff] [blame^] | 64 | if log_file_id not in separated_log_file: |
| 65 | log_file_id = "feedback" |
Arthur She | 5fc7427 | 2021-03-26 21:24:34 -0700 | [diff] [blame] | 66 | if log_file_id not in opened_logfile: |
| 67 | des_log_file = "{}/{}".format(des_dir, separated_log_file[log_file_id]) |
| 68 | opened_logfile[log_file_id] = open(des_log_file, "w") |
| 69 | try: |
| 70 | opened_logfile[log_file_id].write("{}\n".format(msg)) |
| 71 | except UnicodeEncodeError: |
| 72 | msg = ( |
| 73 | msg |
| 74 | .encode("ascii", errors="replace") |
| 75 | .decode("ascii") |
| 76 | ) |
| 77 | opened_logfile[log_file_id].write("{}\n".format(msg)) |
| 78 | # log to 'lava.log' |
| 79 | opened_logfile["all"].write("{} {}\n".format(dt.split(".")[0], msg)) |
| 80 | except IOError as err: |
| 81 | print("File Error: " + str(err)) |
| 82 | |
| 83 | finally: |
| 84 | for log_file in opened_logfile: |
| 85 | opened_logfile[log_file].close() |