blob: edf8f51114c2ff7ff7cd7f3f7c0cb699a42c774f [file] [log] [blame]
#!/usr/bin/python3
#
# Copyright (c) 2019-2020 Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import os
import sys
import yaml
from shutil import copyfile
"""
The whole messages will go into 'lava.log' and if there are 'feedback' level message,
depends on the message namespace 'ns', the corresponding message will go into separated files
Message Separated log file
level, ns
--------------------------------------------------------
all lava.log
lvl='target' lava-uart0.log
lvl='feedback', ns='terminal_1' lava-uart1.log
lvl='feedback', ns='terminal_2' lava-uart2.log
lvl='feedback', ns='terminal_3' lava-uart3.log
anything else in lvl='feedback' feedback.log
messages
--------------------------------------------------------
"""
USAGE = f"Usage: {sys.argv[0]} /path/to/lava-job-plain-log.log"
opened_logfile = dict()
if __name__ == "__main__":
args = sys.argv[1:]
if not args:
raise SystemExit(USAGE)
plain_log = args[0]
des_dir = os.path.dirname(plain_log)
if len(des_dir) == 0:
des_dir = "."
if not os.path.exists(plain_log):
raise SystemExit("The file '{}' is not exist!!".format(plain_log))
with open(plain_log, "r") as job_log:
try:
log_list = yaml.load(job_log, Loader=yaml.SafeLoader)
except yaml.YAMLError as exc:
print ("Error while parsing YAML file:")
if hasattr(exc, 'problem_mark'):
if exc.context != None:
print (' parser says\n' + str(exc.problem_mark) + '\n ' +
str(exc.problem) + ' ' + str(exc.context))
else:
print (' parser says\n' + str(exc.problem_mark) + '\n ' +
str(exc.problem))
else:
print ("Something went wrong while parsing yaml file")
# Preserve plain_log for debugging
copyfile(plain_log, des_dir+"/lava-raw-debug.log")
sys.exit(1)
try:
full_test_log = "{}/{}".format(des_dir, "lava.log")
opened_logfile["all"] = open(full_test_log, "w")
for line in log_list:
level = line["lvl"]
msg = line["msg"]
dt = line["dt"]
if (level == "target") or (level == "feedback"):
namespace = line["ns"] if "ns" in line else level
if namespace not in opened_logfile:
des_log_file = f"{des_dir}/lava-{namespace}.log"
opened_logfile[namespace] = open(des_log_file, "w")
try:
opened_logfile[namespace].write("{}\n".format(msg))
except UnicodeEncodeError:
msg = (
msg
.encode("ascii", errors="replace")
.decode("ascii")
)
opened_logfile[namespace].write("{}\n".format(msg))
# log to 'lava.log'
opened_logfile["all"].write("{} {}\n".format(dt.split(".")[0], msg))
except IOError as err:
print("File Error: " + str(err))
finally:
for log_file in opened_logfile:
opened_logfile[log_file].close()