From 5289603a5915c3b745c5bd1b48b730b22d22ef75 Mon Sep 17 00:00:00 2001 From: Josh Hunt Date: Tue, 6 Apr 2021 11:33:46 +0100 Subject: [PATCH] AzureMonitor: fix migration error from older versions of App Insights queries (#32372) * AzureMonitor: fix nill reference error with missing timeGrain * add a test Co-authored-by: Marcus Efraimsson --- .../applicationinsights-datasource.go | 5 ++++- .../applicationinsights-datasource_test.go | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/tsdb/azuremonitor/applicationinsights-datasource.go b/pkg/tsdb/azuremonitor/applicationinsights-datasource.go index 3ee7ff9912b..41afb00559c 100644 --- a/pkg/tsdb/azuremonitor/applicationinsights-datasource.go +++ b/pkg/tsdb/azuremonitor/applicationinsights-datasource.go @@ -102,7 +102,10 @@ func (e *ApplicationInsightsDatasource) buildQueries(queries []plugins.DataSubQu azureURL := fmt.Sprintf("metrics/%s", insightsJSONModel.MetricName) timeGrain := insightsJSONModel.TimeGrain timeGrains := insightsJSONModel.AllowedTimeGrainsMs - if timeGrain == "auto" { + + // Previous versions of the query model don't specify a time grain, so we + // need to fallback to a default value + if timeGrain == "auto" || timeGrain == "" { timeGrain, err = setAutoTimeGrain(query.IntervalMS, timeGrains) if err != nil { return nil, err diff --git a/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go b/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go index 515c4a71f2b..e0dc598dfb8 100644 --- a/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go +++ b/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go @@ -81,6 +81,25 @@ func TestApplicationInsightsDatasource(t *testing.T) { So(queries[0].Params["interval"][0], ShouldEqual, "PT15M") }) + Convey("and has an empty time grain", func() { + tsdbQuery.Queries[0].Model = simplejson.NewFromAny(map[string]interface{}{ + "appInsights": map[string]interface{}{ + "rawQuery": false, + "timeGrain": "", + "aggregation": "Average", + "metricName": "Percentage CPU", + "alias": "testalias", + "queryType": "Application Insights", + }, + }) + tsdbQuery.Queries[0].IntervalMS = 400000 + + queries, err := datasource.buildQueries(tsdbQuery.Queries, *tsdbQuery.TimeRange) + So(err, ShouldBeNil) + + So(queries[0].Params["interval"][0], ShouldEqual, "PT15M") + }) + Convey("and has a time grain set to auto and the metric has a limited list of allowed time grains", func() { tsdbQuery.Queries[0].Model = simplejson.NewFromAny(map[string]interface{}{ "appInsights": map[string]interface{}{