@@ -15,33 +15,39 @@ func (rp *ResponseParser) Parse(response *Response) *tsdb.QueryResult {
15
15
queryRes := tsdb .NewQueryResult ()
16
16
17
17
for _ , result := range response .Results {
18
- rp .parseResult (result .Series , queryRes )
18
+ queryRes . Series = append ( queryRes . Series , rp .transformRows (result .Series , queryRes ) ... )
19
19
}
20
20
21
21
return queryRes
22
22
}
23
23
24
- func (rp * ResponseParser ) parseResult (result []Row , queryResult * tsdb.QueryResult ) {
25
- for _ , r := range result {
26
- for columnIndex , column := range r .Columns {
24
+ func (rp * ResponseParser ) transformRows (rows []Row , queryResult * tsdb.QueryResult ) tsdb.TimeSeriesSlice {
25
+ var result tsdb.TimeSeriesSlice
26
+
27
+ for _ , row := range rows {
28
+ for columnIndex , column := range row .Columns {
27
29
if column == "time" {
28
30
continue
29
31
}
30
32
31
33
var points tsdb.TimeSeriesPoints
32
- for _ , k := range r .Values {
33
- points = append (points , rp .parseTimepoint (k , columnIndex ))
34
+ for _ , valuePair := range row .Values {
35
+ point , err := rp .parseTimepoint (valuePair , columnIndex )
36
+ if err == nil {
37
+ points = append (points , point )
38
+ }
34
39
}
35
-
36
- queryResult .Series = append (queryResult .Series , & tsdb.TimeSeries {
37
- Name : rp .formatName (r , column ),
40
+ result = append (result , & tsdb.TimeSeries {
41
+ Name : rp .formatSerieName (row , column ),
38
42
Points : points ,
39
43
})
40
44
}
41
45
}
46
+
47
+ return result
42
48
}
43
49
44
- func (rp * ResponseParser ) formatName (row Row , column string ) string {
50
+ func (rp * ResponseParser ) formatSerieName (row Row , column string ) string {
45
51
var tags []string
46
52
47
53
for k , v := range row .Tags {
@@ -56,30 +62,30 @@ func (rp *ResponseParser) formatName(row Row, column string) string {
56
62
return fmt .Sprintf ("%s.%s%s" , row .Name , column , tagText )
57
63
}
58
64
59
- func (rp * ResponseParser ) parseTimepoint (k []interface {}, valuePosition int ) tsdb.TimePoint {
60
- var value null.Float = rp .parseValue (k [valuePosition ])
65
+ func (rp * ResponseParser ) parseTimepoint (valuePair []interface {}, valuePosition int ) ( tsdb.TimePoint , error ) {
66
+ var value null.Float = rp .parseValue (valuePair [valuePosition ])
61
67
62
- timestampNumber , _ := k [0 ].(json.Number )
68
+ timestampNumber , _ := valuePair [0 ].(json.Number )
63
69
timestamp , err := timestampNumber .Float64 ()
64
70
if err != nil {
65
- glog . Error ( "Invalid timestamp format. This should never happen!" )
71
+ return tsdb. TimePoint {}, err
66
72
}
67
73
68
- return tsdb .NewTimePoint (value , timestamp )
74
+ return tsdb .NewTimePoint (value , timestamp ), nil
69
75
}
70
76
71
77
func (rp * ResponseParser ) parseValue (value interface {}) null.Float {
72
- num , ok := value .(json.Number )
78
+ number , ok := value .(json.Number )
73
79
if ! ok {
74
80
return null .FloatFromPtr (nil )
75
81
}
76
82
77
- fvalue , err := num .Float64 ()
83
+ fvalue , err := number .Float64 ()
78
84
if err == nil {
79
85
return null .FloatFrom (fvalue )
80
86
}
81
87
82
- ivalue , err := num .Int64 ()
88
+ ivalue , err := number .Int64 ()
83
89
if err == nil {
84
90
return null .FloatFrom (float64 (ivalue ))
85
91
}
0 commit comments