Files
Cyrene_v2/backend/cmd/cyrene/trace_adapter.go
T
Aska f44bf26050
Cyrene CI / backend (push) Has been cancelled
Cyrene CI / frontend (push) Has been cancelled
fix(build): stop ignoring cmd/cyrene sources
The bare 'cyrene' .gitignore pattern matched the cmd/cyrene directory,
so trace_adapter.go was never committed and a fresh clone failed to
build (undefined: traceAdapter). Scope the pattern to the root binary
and add the missing file.
2026-08-20 19:42:32 +08:00

52 lines
1.3 KiB
Go

package main
import (
"time"
tracepkg "git.yeij.top/AskaEth/Cyrene_v2/services/ai-core/trace"
)
// traceAdapter adapts trace.Logger to api.TraceLogger.
type traceAdapter struct{ *tracepkg.Logger }
func (a *traceAdapter) Recent(n int) []map[string]any {
traces := a.Logger.Recent(n)
result := make([]map[string]any, len(traces))
for i, t := range traces {
spans := make([]map[string]any, len(t.Spans))
for j, s := range t.Spans {
children := make([]map[string]any, len(s.Children))
for k, c := range s.Children {
children[k] = spanToMap(c)
}
spans[j] = spanToMap(s)
if len(children) > 0 { spans[j]["children"] = children }
}
result[i] = map[string]any{
"id": t.ID,
"user_msg": t.UserMsg,
"start_time": t.StartTime.Format(time.RFC3339Nano),
"end_time": nil,
"status": t.Status,
"error": t.Error,
"spans": spans,
}
if !t.EndTime.IsZero() {
result[i]["end_time"] = t.EndTime.Format(time.RFC3339Nano)
}
}
return result
}
func (a *traceAdapter) Clear() { a.Logger.Clear() }
func spanToMap(s tracepkg.Span) map[string]any {
m := map[string]any{
"name": s.Name, "label": s.Label,
"start_ms": s.StartMs, "duration_ms": s.Duration,
"status": s.Status, "detail": s.Detail,
}
if s.Data != nil { m["data"] = s.Data }
return m
}