63 def __init__(self, *, verbose=False, colors_enabled=True):
68 def colorize_line(self, line):
69 if not line.startswith(
'tskv\t'):
73 def colorize_tskv(self, line):
74 row = tskv.parse_line(line)
77 def colorize_row(self, row):
79 flowid =
'-'.join([row.get(key,
'')
for key
in (
'link',
'trace_id')])
81 entry_type = row.pop(
'_type',
None)
82 link = row.get(
'link',
None)
83 level = row.pop(
'level',
'none')
84 text = row.pop(
'text',
'')
87 if entry_type ==
'request':
93 try_reformat_json(row.pop(
'body')), Colors.YELLOW,
96 elif entry_type ==
'response':
97 if 'meta_code' in row:
98 status_code = row.pop(
'meta_code')
103 text =
'Response finished'
107 try_reformat_json(row.pop(
'body')), Colors.YELLOW,
110 elif entry_type ==
'mockserver_request':
111 text =
'Mockserver request finished'
112 if 'meta_code' in row:
113 status_code = str(row.pop(
'meta_code'))
117 for key
in (
'method',
'url',
'status',
'exc_info',
'delay'):
118 value = row.pop(key,
None)
120 extra_fields.append(f
'{key}={value}')
123 logid = f
'[{self._requests[link]}]'
124 elif link
is not None:
129 level_color = LEVEL_COLORS.get(level)
130 flow_color = Colors.colorize(flowid)
133 self.
textcolor(f
'{level:<8}', level_color),
139 fields.append(
'<NO TEXT>')
143 fields.extend(extra_fields)
145 fields.extend([f
'{k}={v}' for k, v
in row.items()])
146 return ' '.join(fields)
148 def textcolor(self, text, color):
151 return f
'{color}{text}{Colors.DEFAULT}'
153 def _http_status(self, key, status):
154 color = HTTP_STATUS_COLORS.get(status[:1], Colors.DEFAULT)
155 return self.
textcolor(f
'{key}={status}', color)
157 def _build_request_info(self, row):
161 method = row.get(
'method',
'UNKNOWN')
162 return f
'{method} {uri}'