Добавил дочерние trace_ids
This commit is contained in:
@@ -90,6 +90,7 @@ class TraceLogRecord:
|
||||
class TraceLogView:
|
||||
trace_id: str
|
||||
parent_id: str | None
|
||||
child_ids: tuple[str, ...] = ()
|
||||
records: tuple[TraceLogRecord, ...] = ()
|
||||
|
||||
|
||||
|
||||
@@ -137,17 +137,26 @@ class HttpControlAppFactory:
|
||||
content={
|
||||
"trace_id": trace_view.trace_id,
|
||||
"parent_id": trace_view.parent_id or "",
|
||||
"child_ids": list(trace_view.child_ids),
|
||||
"messages": [record.as_dict(include_attrs_json=request.include_attrs_json) for record in trace_view.records],
|
||||
}
|
||||
)
|
||||
lines = [
|
||||
f"trace_id: {trace_view.trace_id}",
|
||||
f"parent_id: {trace_view.parent_id or ''}",
|
||||
"--------------------------------------------------",
|
||||
]
|
||||
lines.extend(self._child_id_lines(trace_view.child_ids))
|
||||
lines.append("--------------------------------------------------")
|
||||
for record in trace_view.records:
|
||||
line = record.message
|
||||
if request.include_attrs_json:
|
||||
line = f"{line}, {json.dumps(record.attrs_json, ensure_ascii=False, separators=(',', ':'))}"
|
||||
lines.append(line)
|
||||
return PlainTextResponse(content="\n".join(lines))
|
||||
|
||||
def _child_id_lines(self, child_ids: tuple[str, ...]) -> list[str]:
|
||||
lines = ["child_ids:"]
|
||||
if not child_ids:
|
||||
return lines
|
||||
lines.extend(f" - {child_id}" for child_id in child_ids)
|
||||
return lines
|
||||
|
||||
@@ -15,8 +15,14 @@ class MySqlTraceLogReader(TraceLogReader):
|
||||
parent_id = self._read_parent_id(trace_id)
|
||||
if parent_id is None and not self._trace_exists(trace_id):
|
||||
return None
|
||||
child_ids = self._read_child_ids(trace_id)
|
||||
records = self._read_records(trace_id, levels)
|
||||
return TraceLogView(trace_id=trace_id, parent_id=parent_id, records=tuple(records))
|
||||
return TraceLogView(
|
||||
trace_id=trace_id,
|
||||
parent_id=parent_id,
|
||||
child_ids=tuple(child_ids),
|
||||
records=tuple(records),
|
||||
)
|
||||
|
||||
def _trace_exists(self, trace_id: str) -> bool:
|
||||
query = "SELECT 1 FROM trace_contexts WHERE trace_id = %s"
|
||||
@@ -50,6 +56,19 @@ class MySqlTraceLogReader(TraceLogReader):
|
||||
rows = cursor.fetchall()
|
||||
return [self._build_record(row) for row in rows]
|
||||
|
||||
def _read_child_ids(self, trace_id: str) -> list[str]:
|
||||
query = """
|
||||
SELECT trace_id
|
||||
FROM trace_contexts
|
||||
WHERE parent_id = %s
|
||||
ORDER BY event_time ASC, trace_id ASC
|
||||
"""
|
||||
with self._connection_factory.connect() as connection:
|
||||
with connection.cursor() as cursor:
|
||||
cursor.execute(query, (trace_id,))
|
||||
rows = cursor.fetchall()
|
||||
return [str(row["trace_id"]) for row in rows]
|
||||
|
||||
def _build_record(self, row: dict[str, Any]) -> TraceLogRecord:
|
||||
return TraceLogRecord(
|
||||
id=int(row["id"]),
|
||||
|
||||
Reference in New Issue
Block a user