D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
app
/
features
/
explore
/
TraceView
/
utils
/
Filename :
transform.ts
back
Copy
import { DataFrame, DataFrameView, TraceSpanRow } from '@grafana/data'; import { Trace, TraceProcess, TraceResponse, transformTraceData } from '../components'; export function transformDataFrames(frame?: DataFrame): Trace | null { if (!frame) { return null; } let data: TraceResponse = frame.fields.length === 1 ? // For backward compatibility when we sent whole json response in a single field/value frame.fields[0].values[0] : transformTraceDataFrame(frame); return transformTraceData(data); } function transformTraceDataFrame(frame: DataFrame): TraceResponse { const view = new DataFrameView<TraceSpanRow>(frame); const processes: Record<string, TraceProcess> = {}; for (let i = 0; i < view.length; i++) { const span = view.get(i); if (!processes[span.spanID]) { processes[span.spanID] = { serviceName: span.serviceName, tags: span.serviceTags, }; } } return { traceID: view.get(0).traceID, processes, spans: view.toArray().map((s, index) => { const references = []; if (s.parentSpanID) { references.push({ refType: 'CHILD_OF' as const, spanID: s.parentSpanID, traceID: s.traceID }); } if (s.references) { references.push(...s.references.map((reference) => ({ refType: 'FOLLOWS_FROM' as const, ...reference }))); } return { ...s, duration: s.duration * 1000, startTime: s.startTime * 1000, processID: s.spanID, flags: 0, references, logs: s.logs?.map((l) => ({ ...l, timestamp: l.timestamp * 1000 })) || [], dataFrameRowIndex: index, }; }), }; }