in pkg/sls-plugin.go [1016:1073]
func (ds *SlsDatasource) BuildTrace(logs []map[string]string, frames *data.Frames) {
frame := data.NewFrame("response")
frame.Meta = &data.FrameMeta{
PreferredVisualization: data.VisTypeTrace,
}
traceID := make([]string, 0)
spanID := make([]string, 0)
parentSpanID := make([]string, 0)
serviceName := make([]string, 0)
startTime := make([]float64, 0)
duration := make([]float64, 0)
resource := make([]string, 0)
host := make([]string, 0)
attribute := make([]string, 0)
statusCode := make([]string, 0)
statusMessage := make([]string, 0)
logs1 := make([]string, 0)
operationName := make([]string, 0)
for _, alog := range logs {
traceID = append(traceID, alog["traceID"])
spanID = append(spanID, alog["spanID"])
parentSpanID = append(parentSpanID, alog["parentSpanID"])
serviceName = append(serviceName, alog["service"])
host = append(host, alog["host"])
resource = append(resource, alog["resource"])
attribute = append(attribute, alog["attribute"])
statusCode = append(statusCode, alog["statusCode"])
statusMessage = append(statusMessage, alog["statusMessage"])
logs1 = append(logs1, alog["logs"])
operationName = append(operationName, alog["name"])
startTimeV, err := strconv.ParseFloat(alog["start"], 64)
if err != nil {
log.DefaultLogger.Debug("BuildTrace", "ParseFloat", err)
}
startTime = append(startTime, startTimeV/1000)
durationV, err := strconv.ParseFloat(alog["duration"], 64)
if err != nil {
log.DefaultLogger.Debug("BuildTrace", "ParseFloat", err)
}
duration = append(duration, durationV/1000)
}
frame.Fields = append(frame.Fields, data.NewField("operationName", nil, operationName))
frame.Fields = append(frame.Fields, data.NewField("traceID", nil, traceID))
frame.Fields = append(frame.Fields, data.NewField("spanID", nil, spanID))
frame.Fields = append(frame.Fields, data.NewField("parentSpanID", nil, parentSpanID))
frame.Fields = append(frame.Fields, data.NewField("serviceName", nil, serviceName))
frame.Fields = append(frame.Fields, data.NewField("startTime", nil, startTime))
frame.Fields = append(frame.Fields, data.NewField("duration", nil, duration))
frame.Fields = append(frame.Fields, data.NewField("resource", nil, resource))
frame.Fields = append(frame.Fields, data.NewField("host", nil, host))
frame.Fields = append(frame.Fields, data.NewField("attribute", nil, attribute))
frame.Fields = append(frame.Fields, data.NewField("statusCode", nil, statusCode))
frame.Fields = append(frame.Fields, data.NewField("statusMessage", nil, statusMessage))
frame.Fields = append(frame.Fields, data.NewField("logs", nil, logs1))
*frames = append(*frames, frame)
}