54 lines
1.5 KiB
Python
Executable File
54 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# Indents a CAF log with trace verbosity. The script does *not* deal with a log
|
|
# with multiple threads.
|
|
|
|
# usage (read file): indent_trace_log.py FILENAME
|
|
# (read stdin): indent_trace_log.py -
|
|
|
|
import argparse, sys, os, re
|
|
|
|
def is_entry(line):
|
|
return 'TRACE' in line and 'ENTRY' in line
|
|
|
|
def is_exit(line):
|
|
return 'TRACE' in line and 'EXIT' in line
|
|
|
|
def print_indented(line, indent):
|
|
if is_exit(line):
|
|
indent = indent[:-2]
|
|
sys.stdout.write(indent)
|
|
sys.stdout.write(line)
|
|
if is_entry(line):
|
|
indent += " "
|
|
return indent
|
|
|
|
def read_lines(fp, ids):
|
|
indent = ""
|
|
if not ids or len(ids) == 0:
|
|
for line in fp:
|
|
indent = print_indented(line, indent)
|
|
else:
|
|
rx = re.compile('.+ (?:actor|ID = )([0-9]+) .+')
|
|
for line in fp:
|
|
rx_res = rx.match(line)
|
|
if rx_res != None and rx_res.group(1) in ids:
|
|
indent = print_indented(line, indent)
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Add a new C++ class.')
|
|
parser.add_argument('-i', dest='ids', action='append', help='only include actors with given ID(s)')
|
|
parser.add_argument("log", help='path to the log file or "-" for reading from STDIN')
|
|
args = parser.parse_args()
|
|
filepath = args.log
|
|
if filepath == '-':
|
|
read_lines(sys.stdin, args.ids)
|
|
else:
|
|
if not os.path.isfile(filepath):
|
|
sys.exit()
|
|
with open(filepath) as fp:
|
|
read_lines(fp, args.ids)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|