mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Cloud Monitoring: set missing meta data for distribution type metrics (#45500)
* set missing meta data for distribution type metrics * add test * add test * simplify custom set * add test for executedQueryString * add test data * fix tests * check group by
This commit is contained in:
parent
83db65abda
commit
0fb490c00d
@ -0,0 +1,17 @@
|
||||
{
|
||||
"timeSeries": [
|
||||
{
|
||||
"metric": {
|
||||
"type": "loadbalancing.googleapis.com\/https\/backend_latencies"
|
||||
},
|
||||
"resource": {
|
||||
"type": "https_lb_rule",
|
||||
"labels": {
|
||||
"project_id": "grafana-prod"
|
||||
}
|
||||
},
|
||||
"metricKind": "DELTA",
|
||||
"valueType": "DISTRIBUTION"
|
||||
}
|
||||
]
|
||||
}
|
@ -193,6 +193,9 @@ func (timeSeriesFilter *cloudMonitoringTimeSeriesFilter) parseResponse(queryRes
|
||||
valueField,
|
||||
},
|
||||
RefID: timeSeriesFilter.RefID,
|
||||
Meta: &data.FrameMeta{
|
||||
ExecutedQueryString: executedQueryString,
|
||||
},
|
||||
}
|
||||
|
||||
if maxKey < i {
|
||||
@ -220,13 +223,20 @@ func (timeSeriesFilter *cloudMonitoringTimeSeriesFilter) parseResponse(queryRes
|
||||
timeField,
|
||||
valueField,
|
||||
},
|
||||
Meta: &data.FrameMeta{
|
||||
ExecutedQueryString: executedQueryString,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for i := 0; i < len(buckets); i++ {
|
||||
buckets[i].Meta.Custom = customFrameMeta
|
||||
frames = append(frames, buckets[i])
|
||||
}
|
||||
if len(buckets) == 0 {
|
||||
frames = append(frames, frame)
|
||||
}
|
||||
}
|
||||
if len(response.TimeSeries) > 0 {
|
||||
dl := timeSeriesFilter.buildDeepLink()
|
||||
|
@ -11,6 +11,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
sdkdata "github.com/grafana/grafana-plugin-sdk-go/data"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@ -386,6 +388,77 @@ func TestTimeSeriesFilter(t *testing.T) {
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, "114250375703598695", labels["resource.label.instance_id"])
|
||||
})
|
||||
|
||||
t.Run("parseResponse successfully parses metadata for distribution valueType", func(t *testing.T) {
|
||||
t.Run("exponential bounds", func(t *testing.T) {
|
||||
data, err := loadTestFile("./test-data/3-series-response-distribution-exponential.json")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(data.TimeSeries))
|
||||
|
||||
res := &backend.DataResponse{}
|
||||
require.NoError(t, (&cloudMonitoringTimeSeriesFilter{GroupBys: []string{"test_group_by"}}).parseResponse(res, data, "test_query"))
|
||||
|
||||
require.NotNil(t, res.Frames[0].Meta)
|
||||
assert.Equal(t, sdkdata.FrameMeta{
|
||||
ExecutedQueryString: "test_query",
|
||||
Custom: map[string]interface{}{
|
||||
"groupBys": []string{"test_group_by"},
|
||||
"alignmentPeriod": "",
|
||||
"labels": map[string]string{
|
||||
"resource.label.project_id": "grafana-prod",
|
||||
"resource.type": "https_lb_rule",
|
||||
},
|
||||
"perSeriesAligner": "",
|
||||
},
|
||||
}, *res.Frames[0].Meta)
|
||||
})
|
||||
|
||||
t.Run("explicit bounds", func(t *testing.T) {
|
||||
data, err := loadTestFile("./test-data/4-series-response-distribution-explicit.json")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(data.TimeSeries))
|
||||
|
||||
res := &backend.DataResponse{}
|
||||
require.NoError(t, (&cloudMonitoringTimeSeriesFilter{GroupBys: []string{"test_group_by"}}).parseResponse(res, data, "test_query"))
|
||||
|
||||
require.NotNil(t, res.Frames[0].Meta)
|
||||
assert.Equal(t, sdkdata.FrameMeta{
|
||||
ExecutedQueryString: "test_query",
|
||||
Custom: map[string]interface{}{
|
||||
"groupBys": []string{"test_group_by"},
|
||||
"alignmentPeriod": "",
|
||||
"labels": map[string]string{
|
||||
"resource.label.project_id": "grafana-demo",
|
||||
"resource.type": "global",
|
||||
},
|
||||
"perSeriesAligner": "",
|
||||
},
|
||||
}, *res.Frames[0].Meta)
|
||||
})
|
||||
|
||||
t.Run("without series points", func(t *testing.T) {
|
||||
data, err := loadTestFile("./test-data/3-series-response-distribution-exponential.json")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(data.TimeSeries))
|
||||
|
||||
res := &backend.DataResponse{}
|
||||
require.NoError(t, (&cloudMonitoringTimeSeriesFilter{GroupBys: []string{"test_group_by"}}).parseResponse(res, data, "test_query"))
|
||||
|
||||
require.NotNil(t, res.Frames[0].Meta)
|
||||
assert.Equal(t, sdkdata.FrameMeta{
|
||||
ExecutedQueryString: "test_query",
|
||||
Custom: map[string]interface{}{
|
||||
"groupBys": []string{"test_group_by"},
|
||||
"alignmentPeriod": "",
|
||||
"labels": map[string]string{
|
||||
"resource.label.project_id": "grafana-prod",
|
||||
"resource.type": "https_lb_rule",
|
||||
},
|
||||
"perSeriesAligner": "",
|
||||
},
|
||||
}, *res.Frames[0].Meta)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func loadTestFile(path string) (cloudMonitoringResponse, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user