@@ -727,43 +727,44 @@ func (ds *SlsDatasource) BuildLogs(logs []map[string]string, ycols []string, fra
727
727
frame .Meta = & data.FrameMeta {
728
728
PreferredVisualization : data .VisTypeLogs ,
729
729
}
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
734
732
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
+ }
735
748
var values []string
736
749
for _ , alog := range logs {
737
750
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 ], `"` , `'` ) + `" `
760
754
}
755
+ timeValue , _ := strconv .ParseFloat (alog ["__time__" ], 64 )
756
+ t := time .Unix (int64 (timeValue ), 0 )
757
+ times = append (times , t )
761
758
values = append (values , message )
762
759
}
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
+ }
767
768
* frames = append (* frames , frame )
768
769
}
769
770
0 commit comments