Skip to content

Commit e08b32a

Browse files
committed
feat: 1. support log graphs in grafana 10
2. log graphs can specify which fields you want to display
1 parent 802f0a5 commit e08b32a

File tree

1 file changed

+31
-30
lines changed

1 file changed

+31
-30
lines changed

pkg/sls-plugin.go

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -727,43 +727,44 @@ func (ds *SlsDatasource) BuildLogs(logs []map[string]string, ycols []string, fra
727727
frame.Meta = &data.FrameMeta{
728728
PreferredVisualization: data.VisTypeLogs,
729729
}
730-
yset := make(map[string]bool)
731-
for _, ycol := range ycols {
732-
yset[ycol] = true
733-
}
730+
fieldMap := make(map[string][]string)
731+
var keyArr []string
734732
var times []time.Time
733+
if len(ycols) == 1 && ycols[0] == "" {
734+
for _, alog := range logs {
735+
for k := range alog {
736+
if _, ok := fieldMap[k]; !ok {
737+
fieldMap[k] = make([]string, 0)
738+
keyArr = append(keyArr, k)
739+
}
740+
}
741+
}
742+
} else {
743+
for _, ycol := range ycols {
744+
fieldMap[ycol] = make([]string, 0)
745+
keyArr = append(keyArr, ycol)
746+
}
747+
}
735748
var values []string
736749
for _, alog := range logs {
737750
message := ""
738-
var keys []string
739-
for k := range alog {
740-
keys = append(keys, k)
741-
}
742-
sort.Strings(keys)
743-
for _, k := range keys {
744-
v := alog[k]
745-
if k == "__time__" {
746-
floatValue, err := strconv.ParseFloat(v, 64)
747-
if err != nil {
748-
log.DefaultLogger.Info("BuildLogs", "ParseTime", err)
749-
continue
750-
}
751-
times = append(times, time.Unix(int64(floatValue), 0))
752-
}
753-
if len(ycols) > 0 && ycols[0] != "" {
754-
if yset[k] {
755-
message = message + k + `="` + strings.ReplaceAll(v, `"`, `'`) + `" `
756-
}
757-
} else {
758-
message = message + k + `="` + strings.ReplaceAll(v, `"`, `'`) + `" `
759-
}
751+
for _, k := range keyArr {
752+
fieldMap[k] = append(fieldMap[k], alog[k])
753+
message = message + k + `="` + strings.ReplaceAll(alog[k], `"`, `'`) + `" `
760754
}
755+
timeValue, _ := strconv.ParseFloat(alog["__time__"], 64)
756+
t := time.Unix(int64(timeValue), 0)
757+
times = append(times, t)
761758
values = append(values, message)
762759
}
763-
frame.Fields = append(frame.Fields,
764-
data.NewField("time", nil, times),
765-
data.NewField("message", nil, values),
766-
)
760+
761+
if len(times) > 0 {
762+
frame.Fields = append(frame.Fields, data.NewField("time", nil, times))
763+
}
764+
frame.Fields = append(frame.Fields, data.NewField("message", nil, values))
765+
for _, v := range keyArr {
766+
frame.Fields = append(frame.Fields, data.NewField(v, nil, fieldMap[v]))
767+
}
767768
*frames = append(*frames, frame)
768769
}
769770

0 commit comments

Comments
 (0)