in pkg/sls-plugin.go [961:1012]
func (ds *SlsDatasource) BuildLogs(logs []map[string]string, ycols []string, frames *data.Frames) {
frame := data.NewFrame("")
frame.Meta = &data.FrameMeta{
PreferredVisualization: data.VisTypeLogs,
}
fieldMap := make(map[string][]string)
var keyArr []string
var times []time.Time
if len(ycols) == 1 && ycols[0] == "" {
for _, alog := range logs {
for k := range alog {
if _, ok := fieldMap[k]; !ok {
fieldMap[k] = make([]string, 0)
keyArr = append(keyArr, k)
}
}
}
} else {
for _, ycol := range ycols {
fieldMap[ycol] = make([]string, 0)
keyArr = append(keyArr, ycol)
}
}
var values []string
for _, alog := range logs {
message := ""
for _, k := range keyArr {
fieldMap[k] = append(fieldMap[k], alog[k])
message = message + k + `="` + strings.ReplaceAll(alog[k], `"`, `'`) + `" `
}
timeValue, _ := strconv.ParseFloat(alog["__time__"], 64)
var t time.Time
if ns, ok := alog["__time_ns_part__"]; ok {
ns, _ := strconv.ParseInt(ns, 10, 64)
t = time.Unix(int64(timeValue), ns)
} else {
t = time.Unix(int64(timeValue), 0)
}
times = append(times, t)
values = append(values, message)
}
if len(times) > 0 {
frame.Fields = append(frame.Fields, data.NewField("time", nil, times))
}
frame.Fields = append(frame.Fields, data.NewField("message", nil, values))
for _, v := range keyArr {
frame.Fields = append(frame.Fields, data.NewField(v, nil, fieldMap[v]))
}
*frames = append(*frames, frame)
}