func createTracesTableFrame()

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
}