blob: b5a49708a74e8161a110cd343c54dd30422a70c6 [file] [log] [blame]
Arthur She5fc74272021-03-26 21:24:34 -07001#!/usr/bin/python3
2#
3# Copyright (c) 2019-2020 Arm Limited. All rights reserved.
4#
5# SPDX-License-Identifier: BSD-3-Clause
6#
7
8import os
9import sys
10import yaml
Arthur She8645e262021-05-30 22:30:48 -070011from shutil import copyfile
Arthur She5fc74272021-03-26 21:24:34 -070012
13"""
14The whole messages will go into 'lava.log' and if there are 'feedback' level message,
15depends on the message namespace 'ns', the corresponding message will go into separated files
16 Message Separated log file
17 level, ns
18--------------------------------------------------------
19all lava.log
20lvl='target' lava-uart0.log
Arthur She5fc74272021-03-26 21:24:34 -070021lvl='feedback', ns='terminal_1' lava-uart1.log
22lvl='feedback', ns='terminal_2' lava-uart2.log
23lvl='feedback', ns='terminal_3' lava-uart3.log
Arthur She808ff552021-04-02 16:27:22 -070024anything else in lvl='feedback' feedback.log
25messages
Arthur She5fc74272021-03-26 21:24:34 -070026--------------------------------------------------------
27"""
28
29USAGE = f"Usage: {sys.argv[0]} /path/to/lava-job-plain-log.log"
30
31separated_log_file = {"all": "lava.log", \
32 "target": "lava-uart0.log", \
33 "feedback-terminal_1": "lava-uart1.log", \
34 "feedback-terminal_2": "lava-uart2.log", \
35 "feedback-terminal_3": "lava-uart3.log", \
36 "feedback": "feedback.log"}
37opened_logfile = dict()
38
39if __name__ == "__main__":
40 args = sys.argv[1:]
41 if not args:
42 raise SystemExit(USAGE)
43
44 plain_log = args[0]
45 des_dir = os.path.dirname(plain_log)
46 if len(des_dir) == 0:
47 des_dir = "."
48
49 if not os.path.exists(plain_log):
50 raise SystemExit("The file '{}' is not exist!!".format(plain_log))
51
52 with open(plain_log, "r") as job_log:
Arthur She2586b5c2021-05-11 21:00:20 -070053 try:
54 log_list = yaml.load(job_log, Loader=yaml.SafeLoader)
55 except yaml.YAMLError as exc:
56 print ("Error while parsing YAML file:")
57 if hasattr(exc, 'problem_mark'):
58 if exc.context != None:
59 print (' parser says\n' + str(exc.problem_mark) + '\n ' +
60 str(exc.problem) + ' ' + str(exc.context))
61 else:
62 print (' parser says\n' + str(exc.problem_mark) + '\n ' +
63 str(exc.problem))
64 else:
65 print ("Something went wrong while parsing yaml file")
Arthur She8645e262021-05-30 22:30:48 -070066 # Preserve plain_log for debugging
67 copyfile(plain_log, des_dir+"/lava-raw-debug.log")
Arthur She2586b5c2021-05-11 21:00:20 -070068 sys.exit(1)
Arthur She5fc74272021-03-26 21:24:34 -070069 try:
70 full_test_log = "{}/{}".format(des_dir, separated_log_file["all"])
71 opened_logfile["all"] = open(full_test_log, "w")
72 for line in log_list:
73 level = line["lvl"]
74 msg = line["msg"]
75 dt = line["dt"]
76 if (level == "target") or (level == "feedback"):
77 log_file_id = level
78 if "ns" in line:
79 log_file_id = "{}-{}".format(log_file_id, line["ns"])
Arthur She808ff552021-04-02 16:27:22 -070080 if log_file_id not in separated_log_file:
81 log_file_id = "feedback"
Arthur She5fc74272021-03-26 21:24:34 -070082 if log_file_id not in opened_logfile:
83 des_log_file = "{}/{}".format(des_dir, separated_log_file[log_file_id])
84 opened_logfile[log_file_id] = open(des_log_file, "w")
85 try:
86 opened_logfile[log_file_id].write("{}\n".format(msg))
87 except UnicodeEncodeError:
88 msg = (
89 msg
90 .encode("ascii", errors="replace")
91 .decode("ascii")
92 )
93 opened_logfile[log_file_id].write("{}\n".format(msg))
94 # log to 'lava.log'
95 opened_logfile["all"].write("{} {}\n".format(dt.split(".")[0], msg))
96 except IOError as err:
97 print("File Error: " + str(err))
98
99 finally:
100 for log_file in opened_logfile:
101 opened_logfile[log_file].close()