CloudWatch: Deprecate dynamic labels feature toggle, remove support for Alias in backend (#66494)

This commit is contained in:
Shirley
2023-04-27 11:19:45 +02:00
committed by GitHub
parent 69a14b9a5e
commit e17496d79a
14 changed files with 162 additions and 411 deletions
+30 -35
View File
@@ -63,7 +63,6 @@ type CloudWatchQuery struct {
ReturnData bool
Dimensions map[string][]string
Period int
Alias string
Label string
MatchExact bool
UsedExpression string
@@ -150,7 +149,7 @@ func (q *CloudWatchQuery) IsMultiValuedDimensionExpression() bool {
return false
}
func (q *CloudWatchQuery) BuildDeepLink(startTime time.Time, endTime time.Time, dynamicLabelEnabled bool) (string, error) {
func (q *CloudWatchQuery) BuildDeepLink(startTime time.Time, endTime time.Time) (string, error) {
if q.IsMathExpression() || q.MetricQueryType == MetricQueryTypeQuery {
return "", nil
}
@@ -166,9 +165,7 @@ func (q *CloudWatchQuery) BuildDeepLink(startTime time.Time, endTime time.Time,
if q.isSearchExpression() {
metricExpressions := &metricExpression{Expression: q.UsedExpression}
if dynamicLabelEnabled {
metricExpressions.Label = q.Label
}
metricExpressions.Label = q.Label
link.Metrics = []interface{}{metricExpressions}
} else {
metricStat := []interface{}{q.Namespace, q.MetricName}
@@ -179,9 +176,7 @@ func (q *CloudWatchQuery) BuildDeepLink(startTime time.Time, endTime time.Time,
Stat: q.Statistic,
Period: q.Period,
}
if dynamicLabelEnabled {
metricStatMeta.Label = q.Label
}
metricStatMeta.Label = q.Label
if q.AccountId != nil {
metricStatMeta.AccountId = *q.AccountId
}
@@ -221,7 +216,7 @@ type metricsDataQuery struct {
// ParseMetricDataQueries decodes the metric data queries json, validates, sets default values and returns an array of CloudWatchQueries.
// The CloudWatchQuery has a 1 to 1 mapping to a query editor row
func ParseMetricDataQueries(dataQueries []backend.DataQuery, startTime time.Time, endTime time.Time, defaultRegion string, logger log.Logger, dynamicLabelsEnabled,
func ParseMetricDataQueries(dataQueries []backend.DataQuery, startTime time.Time, endTime time.Time, defaultRegion string, logger log.Logger,
crossAccountQueryingEnabled bool) ([]*CloudWatchQuery, error) {
var metricDataQueries = make(map[string]metricsDataQuery)
for _, query := range dataQueries {
@@ -251,10 +246,6 @@ func ParseMetricDataQueries(dataQueries []backend.DataQuery, startTime time.Time
TimezoneUTCOffset: mdq.TimezoneUTCOffset,
}
if mdq.Alias != nil {
cwQuery.Alias = *mdq.Alias
}
if mdq.MetricName != nil {
cwQuery.MetricName = *mdq.MetricName
}
@@ -271,13 +262,17 @@ func ParseMetricDataQueries(dataQueries []backend.DataQuery, startTime time.Time
cwQuery.Expression = *mdq.Expression
}
if mdq.Label != nil {
cwQuery.Label = *mdq.Label
}
if err := cwQuery.validateAndSetDefaults(refId, mdq, startTime, endTime, defaultRegion, crossAccountQueryingEnabled); err != nil {
return nil, &QueryError{Err: err, RefID: refId}
}
cwQuery.applyMacros(startTime, endTime)
cwQuery.migrateLegacyQuery(mdq, dynamicLabelsEnabled)
cwQuery.migrateLegacyQuery(mdq)
result = append(result, cwQuery)
}
@@ -291,9 +286,9 @@ func (q *CloudWatchQuery) applyMacros(startTime, endTime time.Time) {
}
}
func (q *CloudWatchQuery) migrateLegacyQuery(query metricsDataQuery, dynamicLabelsEnabled bool) {
func (q *CloudWatchQuery) migrateLegacyQuery(query metricsDataQuery) {
q.Statistic = getStatistic(query)
q.Label = getLabel(query, dynamicLabelsEnabled)
q.Label = getLabel(query)
}
func (q *CloudWatchQuery) validateAndSetDefaults(refId string, metricsDataQuery metricsDataQuery, startTime, endTime time.Time,
@@ -386,33 +381,33 @@ var aliasPatterns = map[string]string{
var legacyAliasRegexp = regexp.MustCompile(`{{\s*(.+?)\s*}}`)
func getLabel(query metricsDataQuery, dynamicLabelsEnabled bool) string {
func getLabel(query metricsDataQuery) string {
deprecatedAlias := query.Alias //nolint:staticcheck
if query.Label != nil {
return *query.Label
}
if query.Alias != nil && *query.Alias == "" {
if deprecatedAlias != nil && *deprecatedAlias == "" {
return ""
}
var result string
if dynamicLabelsEnabled {
fullAliasField := ""
if query.Alias != nil {
fullAliasField = *query.Alias
}
matches := legacyAliasRegexp.FindAllStringSubmatch(fullAliasField, -1)
for _, groups := range matches {
fullMatch := groups[0]
subgroup := groups[1]
if dynamicLabel, ok := aliasPatterns[subgroup]; ok {
fullAliasField = strings.ReplaceAll(fullAliasField, fullMatch, dynamicLabel)
} else {
fullAliasField = strings.ReplaceAll(fullAliasField, fullMatch, fmt.Sprintf(`${PROP('Dim.%s')}`, subgroup))
}
}
result = fullAliasField
fullAliasField := ""
if deprecatedAlias != nil {
fullAliasField = *deprecatedAlias
}
matches := legacyAliasRegexp.FindAllStringSubmatch(fullAliasField, -1)
for _, groups := range matches {
fullMatch := groups[0]
subgroup := groups[1]
if dynamicLabel, ok := aliasPatterns[subgroup]; ok {
fullAliasField = strings.ReplaceAll(fullAliasField, fullMatch, dynamicLabel)
} else {
fullAliasField = strings.ReplaceAll(fullAliasField, fullMatch, fmt.Sprintf(`${PROP('Dim.%s')}`, subgroup))
}
}
result = fullAliasField
return result
}
@@ -8,12 +8,12 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/kinds/dataquery"
"github.com/grafana/kindsys"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/infra/log/logtest"
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/kinds/dataquery"
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/utils"
)
@@ -39,12 +39,12 @@ func TestCloudWatchQuery(t *testing.T) {
MetricEditorMode: MetricEditorModeBuilder,
}
deepLink, err := query.BuildDeepLink(startTime, endTime, false)
deepLink, err := query.BuildDeepLink(startTime, endTime)
require.NoError(t, err)
assert.Empty(t, deepLink)
})
t.Run("does not include label in case dynamic label is diabled", func(t *testing.T) {
t.Run("includes label and it's a metric stat query", func(t *testing.T) {
startTime := time.Now()
endTime := startTime.Add(2 * time.Hour)
query := &CloudWatchQuery{
@@ -63,36 +63,12 @@ func TestCloudWatchQuery(t *testing.T) {
MetricEditorMode: MetricEditorModeBuilder,
}
deepLink, err := query.BuildDeepLink(startTime, endTime, false)
deepLink, err := query.BuildDeepLink(startTime, endTime)
require.NoError(t, err)
assert.NotContains(t, deepLink, "label")
assert.Contains(t, deepLink, "label")
})
t.Run("includes label in case dynamic label is enabled and it's a metric stat query", func(t *testing.T) {
startTime := time.Now()
endTime := startTime.Add(2 * time.Hour)
query := &CloudWatchQuery{
RefId: "A",
Region: "us-east-1",
Expression: "",
Statistic: "Average",
Period: 300,
Id: "id1",
MatchExact: true,
Label: "${PROP('Namespace')}",
Dimensions: map[string][]string{
"InstanceId": {"i-12345678"},
},
MetricQueryType: MetricQueryTypeSearch,
MetricEditorMode: MetricEditorModeBuilder,
}
deepLink, err := query.BuildDeepLink(startTime, endTime, false)
require.NoError(t, err)
assert.NotContains(t, deepLink, "label")
})
t.Run("includes label in case dynamic label is enabled and it's a math expression query", func(t *testing.T) {
t.Run("includes label and it's a math expression query", func(t *testing.T) {
startTime := time.Now()
endTime := startTime.Add(2 * time.Hour)
query := &CloudWatchQuery{
@@ -108,9 +84,9 @@ func TestCloudWatchQuery(t *testing.T) {
MetricEditorMode: MetricEditorModeRaw,
}
deepLink, err := query.BuildDeepLink(startTime, endTime, false)
deepLink, err := query.BuildDeepLink(startTime, endTime)
require.NoError(t, err)
assert.NotContains(t, deepLink, "label")
assert.Contains(t, deepLink, "label")
})
t.Run("includes account id in case its a metric stat query and an account id is set", func(t *testing.T) {
@@ -133,7 +109,7 @@ func TestCloudWatchQuery(t *testing.T) {
MetricEditorMode: MetricEditorModeBuilder,
}
deepLink, err := query.BuildDeepLink(startTime, endTime, false)
deepLink, err := query.BuildDeepLink(startTime, endTime)
require.NoError(t, err)
assert.Contains(t, deepLink, "accountId%22%3A%22123456789")
})
@@ -155,7 +131,7 @@ func TestCloudWatchQuery(t *testing.T) {
MetricEditorMode: MetricEditorModeRaw,
}
deepLink, err := query.BuildDeepLink(startTime, endTime, false)
deepLink, err := query.BuildDeepLink(startTime, endTime)
require.NoError(t, err)
assert.NotContains(t, deepLink, "accountId%22%3A%22123456789")
})
@@ -311,7 +287,7 @@ func TestRequestParser(t *testing.T) {
},
}
migratedQueries, err := ParseMetricDataQueries(oldQuery, time.Now(), time.Now(), "us-east-2", logger, false, false)
migratedQueries, err := ParseMetricDataQueries(oldQuery, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, migratedQueries, 1)
require.NotNil(t, migratedQueries[0])
@@ -342,7 +318,7 @@ func TestRequestParser(t *testing.T) {
},
}
results, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
results, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, results, 1)
res := results[0]
@@ -385,7 +361,7 @@ func TestRequestParser(t *testing.T) {
},
}
results, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
results, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, results, 1)
res := results[0]
@@ -418,7 +394,7 @@ func TestRequestParser(t *testing.T) {
},
}
_, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
_, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.Error(t, err)
assert.Equal(t, `error parsing query "", failed to parse dimensions: unknown type as dimension value`, err.Error())
@@ -447,7 +423,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -479,7 +455,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
to := time.Now()
from := to.Local().Add(time.Minute * time.Duration(5))
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 60, res[0].Period)
@@ -489,7 +465,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
to := time.Now()
from := to.AddDate(0, 0, -1)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 60, res[0].Period)
@@ -498,7 +474,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
t.Run("Time range is 2 days", func(t *testing.T) {
to := time.Now()
from := to.AddDate(0, 0, -2)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 300, res[0].Period)
@@ -508,7 +484,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
to := time.Now()
from := to.AddDate(0, 0, -7)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 900, res[0].Period)
@@ -518,7 +494,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
to := time.Now()
from := to.AddDate(0, 0, -30)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 3600, res[0].Period)
@@ -528,7 +504,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
to := time.Now()
from := to.AddDate(0, 0, -90)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 21600, res[0].Period)
@@ -538,7 +514,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
to := time.Now()
from := to.AddDate(-1, 0, 0)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.Nil(t, err)
require.Len(t, res, 1)
assert.Equal(t, 21600, res[0].Period)
@@ -548,7 +524,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
to := time.Now()
from := to.AddDate(-2, 0, 0)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 86400, res[0].Period)
@@ -557,7 +533,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
t.Run("Time range is 2 days, but 16 days ago", func(t *testing.T) {
to := time.Now().AddDate(0, 0, -14)
from := to.AddDate(0, 0, -2)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 300, res[0].Period)
@@ -566,7 +542,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
t.Run("Time range is 2 days, but 90 days ago", func(t *testing.T) {
to := time.Now().AddDate(0, 0, -88)
from := to.AddDate(0, 0, -2)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 3600, res[0].Period)
@@ -575,7 +551,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
t.Run("Time range is 2 days, but 456 days ago", func(t *testing.T) {
to := time.Now().AddDate(0, 0, -454)
from := to.AddDate(0, 0, -2)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, from, to, "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
assert.Equal(t, 21600, res[0].Period)
@@ -590,7 +566,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
}`),
},
}
_, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
_, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.Error(t, err)
assert.Equal(t, `error parsing query "", failed to parse period as duration: time: invalid duration "invalid"`, err.Error())
})
@@ -605,7 +581,7 @@ func Test_ParseMetricDataQueries_periods(t *testing.T) {
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, res, 1)
@@ -692,7 +668,7 @@ func Test_ParseMetricDataQueries_query_type_and_metric_editor_mode_and_GMD_query
),
},
}
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -718,7 +694,7 @@ func Test_ParseMetricDataQueries_hide_and_ReturnData(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -739,7 +715,7 @@ func Test_ParseMetricDataQueries_hide_and_ReturnData(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -760,7 +736,7 @@ func Test_ParseMetricDataQueries_hide_and_ReturnData(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -779,7 +755,7 @@ func Test_ParseMetricDataQueries_hide_and_ReturnData(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -800,7 +776,7 @@ func Test_ParseMetricDataQueries_hide_and_ReturnData(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -821,7 +797,7 @@ func Test_ParseMetricDataQueries_hide_and_ReturnData(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -844,7 +820,7 @@ func Test_ParseMetricDataQueries_ID(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -865,7 +841,7 @@ func Test_ParseMetricDataQueries_ID(t *testing.T) {
}`),
},
}
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), "us-east-2", logger, false)
require.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -882,7 +858,6 @@ func Test_ParseMetricDataQueries_sets_label_when_label_is_present_in_json_query(
"region":"us-east-1",
"namespace":"ec2",
"metricName":"CPUUtilization",
"alias":"some alias",
"label":"some label",
"dimensions":{"InstanceId":["test"]},
"statistic":"Average",
@@ -892,11 +867,10 @@ func Test_ParseMetricDataQueries_sets_label_when_label_is_present_in_json_query(
},
}
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, true, false)
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
assert.Equal(t, "some alias", res[0].Alias) // untouched
assert.Equal(t, "some label", res[0].Label)
}
@@ -936,12 +910,12 @@ func Test_migrateAliasToDynamicLabel_single_query_preserves_old_alias_and_create
},
}
assert.Equal(t, tc.expectedLabel, getLabel(queryToMigrate, true))
assert.Equal(t, tc.expectedLabel, getLabel(queryToMigrate))
})
}
}
func Test_ParseMetricDataQueries_migrate_alias_to_label(t *testing.T) {
t.Run("migrates alias to label when label does not already exist and feature toggle enabled", func(t *testing.T) {
t.Run("migrates alias to label when label does not already exist", func(t *testing.T) {
query := []backend.DataQuery{
{
JSON: []byte(`{
@@ -958,13 +932,12 @@ func Test_ParseMetricDataQueries_migrate_alias_to_label(t *testing.T) {
},
}
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, true, false)
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
assert.Equal(t, "{{period}} {{any_other_word}}", res[0].Alias)
assert.Equal(t, "${PROP('Period')} ${PROP('Dim.any_other_word')}", res[0].Label)
assert.Equal(t, map[string][]string{"InstanceId": {"test"}}, res[0].Dimensions)
assert.Equal(t, true, res[0].ReturnData)
@@ -1005,7 +978,7 @@ func Test_ParseMetricDataQueries_migrate_alias_to_label(t *testing.T) {
},
}
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, true, false)
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, res, 2)
@@ -1014,7 +987,6 @@ func Test_ParseMetricDataQueries_migrate_alias_to_label(t *testing.T) {
})
require.NotNil(t, res[0])
assert.Equal(t, "{{period}} {{any_other_word}}", res[0].Alias)
assert.Equal(t, "${PROP('Period')} ${PROP('Dim.any_other_word')}", res[0].Label)
assert.Equal(t, map[string][]string{"InstanceId": {"test"}}, res[0].Dimensions)
assert.Equal(t, true, res[0].ReturnData)
@@ -1025,7 +997,6 @@ func Test_ParseMetricDataQueries_migrate_alias_to_label(t *testing.T) {
assert.Equal(t, "Average", res[0].Statistic)
require.NotNil(t, res[1])
assert.Equal(t, "{{ label }}", res[1].Alias)
assert.Equal(t, "${LABEL}", res[1].Label)
assert.Equal(t, map[string][]string{"InstanceId": {"test"}}, res[1].Dimensions)
assert.Equal(t, true, res[1].ReturnData)
@@ -1042,19 +1013,11 @@ func Test_ParseMetricDataQueries_migrate_alias_to_label(t *testing.T) {
dynamicLabelsFeatureToggleEnabled bool
expectedLabel string
}{
"when label already exists, feature toggle enabled": {
"when label already exists": {
labelJson: `"label":"some label",`,
dynamicLabelsFeatureToggleEnabled: true,
expectedLabel: "some label"},
"when label does not exist, feature toggle is disabled": {
labelJson: "",
dynamicLabelsFeatureToggleEnabled: false,
expectedLabel: "",
expectedLabel: "some label",
},
"when label already exists, feature toggle is disabled": {
labelJson: `"label":"some label",`,
dynamicLabelsFeatureToggleEnabled: false,
expectedLabel: "some label"},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
@@ -1074,13 +1037,12 @@ func Test_ParseMetricDataQueries_migrate_alias_to_label(t *testing.T) {
}`, tc.labelJson)),
},
}
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, tc.dynamicLabelsFeatureToggleEnabled, false)
res, err := ParseMetricDataQueries(query, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
assert.Equal(t, "{{period}} {{any_other_word}}", res[0].Alias)
assert.Equal(t, tc.expectedLabel, res[0].Label)
assert.Equal(t, map[string][]string{"InstanceId": {"test"}}, res[0].Dimensions)
assert.Equal(t, true, res[0].ReturnData)
@@ -1101,7 +1063,7 @@ func Test_ParseMetricDataQueries_statistics_and_query_type_validation_and_MatchE
{
JSON: []byte("{}"),
},
}, time.Now(), time.Now(), "us-east-2", logger, false, false)
}, time.Now(), time.Now(), "us-east-2", logger, false)
assert.Error(t, err)
assert.Equal(t, `error parsing query "", query must have either statistic or statistics field`, err.Error())
@@ -1114,7 +1076,7 @@ func Test_ParseMetricDataQueries_statistics_and_query_type_validation_and_MatchE
{
JSON: []byte(`{"type":"some other type", "statistic":"Average", "matchExact":false}`),
},
}, time.Now(), time.Now(), "us-east-2", logger, false, false)
}, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
assert.Empty(t, actual)
@@ -1126,7 +1088,7 @@ func Test_ParseMetricDataQueries_statistics_and_query_type_validation_and_MatchE
{
JSON: []byte(`{"statistic":"Average"}`),
},
}, time.Now(), time.Now(), "us-east-2", logger, false, false)
}, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
assert.NotEmpty(t, actual)
@@ -1138,7 +1100,7 @@ func Test_ParseMetricDataQueries_statistics_and_query_type_validation_and_MatchE
{
JSON: []byte(`{"statistic":"Average"}`),
},
}, time.Now(), time.Now(), "us-east-2", logger, false, false)
}, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
assert.Len(t, actual, 1)
@@ -1152,7 +1114,7 @@ func Test_ParseMetricDataQueries_statistics_and_query_type_validation_and_MatchE
{
JSON: []byte(`{"statistic":"Average","matchExact":false}`),
},
}, time.Now(), time.Now(), "us-east-2", logger, false, false)
}, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
assert.Len(t, actual, 1)
@@ -1168,7 +1130,7 @@ func Test_ParseMetricDataQueries_account_Id(t *testing.T) {
{
JSON: []byte(`{"accountId":"some account id", "statistic":"Average"}`),
},
}, time.Now(), time.Now(), "us-east-2", logger, false, true)
}, time.Now(), time.Now(), "us-east-2", logger, true)
assert.NoError(t, err)
require.Len(t, actual, 1)
@@ -1183,7 +1145,7 @@ func Test_ParseMetricDataQueries_account_Id(t *testing.T) {
{
JSON: []byte(`{"accountId":"some account id", "statistic":"Average"}`),
},
}, time.Now(), time.Now(), "us-east-2", logger, false, false)
}, time.Now(), time.Now(), "us-east-2", logger, false)
assert.NoError(t, err)
require.Len(t, actual, 1)
@@ -1215,7 +1177,7 @@ func Test_ParseMetricDataQueries_default_region(t *testing.T) {
}
region := "us-east-2"
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), region, logger, false, false)
res, err := ParseMetricDataQueries(query, time.Now().Add(-2*time.Hour), time.Now().Add(-time.Hour), region, logger, false)
assert.NoError(t, err)
require.Len(t, res, 1)
require.NotNil(t, res[0])
@@ -1253,7 +1215,6 @@ func Test_ParseMetricDataQueries_ApplyMacros(t *testing.T) {
"region":"us-east-1",
"namespace":"ec2",
"metricName":"CPUUtilization",
"alias":"{{period}} {{any_other_word}}",
"dimensions":{"InstanceId":["test"]},
"statistic":"Average",
"period":"600",
@@ -1263,7 +1224,7 @@ func Test_ParseMetricDataQueries_ApplyMacros(t *testing.T) {
"metricEditorMode": 1
}`),
},
}, tc.startTime, time.Now(), "us-east-1", logger, false, false)
}, tc.startTime, time.Now(), "us-east-1", logger, false)
assert.NoError(t, err)
assert.Equal(t, fmt.Sprintf("SEARCH('{AWS/EC2,InstanceId}', 'Average', %s)", tc.expectedPeriod), actual[0].Expression)
})
@@ -1279,7 +1240,6 @@ func Test_ParseMetricDataQueries_ApplyMacros(t *testing.T) {
"region":"us-east-1",
"namespace":"ec2",
"metricName":"CPUUtilization",
"alias":"{{period}} {{any_other_word}}",
"dimensions":{"InstanceId":["test"]},
"statistic":"Average",
"period":"600",
@@ -1289,7 +1249,7 @@ func Test_ParseMetricDataQueries_ApplyMacros(t *testing.T) {
"metricEditorMode": 1
}`),
},
}, time.Now(), time.Now(), "us-east-1", logger, false, false)
}, time.Now(), time.Now(), "us-east-1", logger, false)
assert.NoError(t, err)
assert.Equal(t, "SEARCH('{AWS/EC2,InstanceId}', 'Average', $__period_auto)", actual[0].Expression)
})