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:
Mitsuhiro Tanda 2022-02-21 19:20:34 +09:00 committed by GitHub
parent 83db65abda
commit 0fb490c00d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 100 additions and 0 deletions

View File

@ -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"
}
]
}

View File

@ -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()

View File

@ -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) {