func()

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)
}