in pkg/plugin/plugin.go [347:387]
func createTracesTableFrame(traces []*tracepb.Trace) *data.Frame {
// Create one frame for all traces
f := data.NewFrame("traceTable")
f.Meta = &data.FrameMeta{}
f.Meta.PreferredVisualization = data.VisTypeTable
// Create one set of fields for all traces
tableTraceIDField := data.NewField("Trace ID", nil, []string{})
tableTraceNameField := data.NewField("Trace name", nil, []string{})
tableStartTimeField := data.NewField("Start time", nil, []time.Time{})
tableLatencyField := data.NewField("Latency", nil, []int64{})
tableLatencyField.Config = &data.FieldConfig{
Unit: "ms",
}
// Add values to each field for each trace
for _, t := range traces {
tableTraceIDField.Append(t.TraceId)
spans := t.GetSpans()
if len(spans) < 1 {
log.DefaultLogger.Warn("failed getting trace spans", "traceID", t.TraceId)
continue
}
rootSpan := spans[0]
tableTraceNameField.Append(cloudtrace.GetTraceName(rootSpan))
tableStartTimeField.Append(rootSpan.GetStartTime().AsTime())
latency := rootSpan.GetEndTime().AsTime().UnixMilli() - rootSpan.GetStartTime().AsTime().UnixMilli()
tableLatencyField.Append(latency)
}
f.Fields = append(f.Fields,
tableTraceIDField,
tableTraceNameField,
tableStartTimeField,
tableLatencyField,
)
return f
}