mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
Merge #15841: [test] combine_logs: append node stderr and stdout if it exists
fa90a89eee [test] combine_logs: append node stderr and stdout if it exists (MarcoFalke) Pull request description: See issue: * tests: bitcoind stdout and error should be passed to the logger #13519 ACKs for commit fa90a8: laanwj: utACK fa90a89eeefcc362970216d95973ad01a21366ed Tree-SHA512: 39c4596e2e133c9011ab01bc4dc24e884d0a8cce7a67d3765f17c288d3ffbd438e1ff6016d0f817a981b27fce17fa77a1ff56787ddb1ea55123ce9ecffb44c08
This commit is contained in:
parent
772dad995c
commit
0d58cdabb7
@ -12,6 +12,7 @@ import glob
|
||||
import heapq
|
||||
import itertools
|
||||
import os
|
||||
import pathlib
|
||||
import re
|
||||
import sys
|
||||
import tempfile
|
||||
@ -52,9 +53,23 @@ def main():
|
||||
if not args.testdir:
|
||||
print("Opening latest test directory: {}".format(testdir), file=sys.stderr)
|
||||
|
||||
colors = defaultdict(lambda: '')
|
||||
if args.color:
|
||||
colors["test"] = "\033[0;36m" # CYAN
|
||||
colors["node0"] = "\033[0;34m" # BLUE
|
||||
colors["node1"] = "\033[0;32m" # GREEN
|
||||
colors["node2"] = "\033[0;31m" # RED
|
||||
colors["node3"] = "\033[0;33m" # YELLOW
|
||||
colors["reset"] = "\033[0m" # Reset font color
|
||||
|
||||
log_events = read_logs(testdir)
|
||||
|
||||
print_logs(log_events, color=args.color, html=args.html)
|
||||
if args.html:
|
||||
print_logs_html(log_events)
|
||||
else:
|
||||
print_logs_plain(log_events, colors)
|
||||
print_node_warnings(testdir, colors)
|
||||
|
||||
|
||||
def read_logs(tmp_dir):
|
||||
"""Reads log files.
|
||||
@ -80,6 +95,26 @@ def read_logs(tmp_dir):
|
||||
return heapq.merge(*[get_log_events(source, f) for source, f in files])
|
||||
|
||||
|
||||
def print_node_warnings(tmp_dir, colors):
|
||||
"""Print nodes' errors and warnings"""
|
||||
|
||||
warnings = []
|
||||
for stream in ['stdout', 'stderr']:
|
||||
for i in itertools.count():
|
||||
folder = "{}/node{}/{}".format(tmp_dir, i, stream)
|
||||
if not os.path.isdir(folder):
|
||||
break
|
||||
for (_, _, fns) in os.walk(folder):
|
||||
for fn in fns:
|
||||
warning = pathlib.Path('{}/{}'.format(folder, fn)).read_text().strip()
|
||||
if warning:
|
||||
warnings.append(("node{} {}".format(i, stream), warning))
|
||||
|
||||
print()
|
||||
for w in warnings:
|
||||
print("{} {} {} {}".format(colors[w[0].split()[0]], w[0], w[1], colors["reset"]))
|
||||
|
||||
|
||||
def find_latest_test_dir():
|
||||
"""Returns the latest tmpfile test directory prefix."""
|
||||
tmpdir = tempfile.gettempdir()
|
||||
@ -136,18 +171,9 @@ def get_log_events(source, logfile):
|
||||
except FileNotFoundError:
|
||||
print("File %s could not be opened. Continuing without it." % logfile, file=sys.stderr)
|
||||
|
||||
def print_logs(log_events, color=False, html=False):
|
||||
"""Renders the iterator of log events into text or html."""
|
||||
if not html:
|
||||
colors = defaultdict(lambda: '')
|
||||
if color:
|
||||
colors["test"] = "\033[0;36m" # CYAN
|
||||
colors["node0"] = "\033[0;34m" # BLUE
|
||||
colors["node1"] = "\033[0;32m" # GREEN
|
||||
colors["node2"] = "\033[0;31m" # RED
|
||||
colors["node3"] = "\033[0;33m" # YELLOW
|
||||
colors["reset"] = "\033[0m" # Reset font color
|
||||
|
||||
def print_logs_plain(log_events, colors):
|
||||
"""Renders the iterator of log events into text."""
|
||||
for event in log_events:
|
||||
lines = event.event.splitlines()
|
||||
print("{0} {1: <5} {2} {3}".format(colors[event.source.rstrip()], event.source, lines[0], colors["reset"]))
|
||||
@ -155,7 +181,9 @@ def print_logs(log_events, color=False, html=False):
|
||||
for line in lines[1:]:
|
||||
print("{0}{1}{2}".format(colors[event.source.rstrip()], line, colors["reset"]))
|
||||
|
||||
else:
|
||||
|
||||
def print_logs_html(log_events):
|
||||
"""Renders the iterator of log events into html."""
|
||||
try:
|
||||
import jinja2
|
||||
except ImportError:
|
||||
|
Loading…
Reference in New Issue
Block a user