mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
CloudWatch: Refactor "getDimensionValuesForWildcards" (#83335)
This commit is contained in:
@@ -14,13 +14,8 @@ import (
|
|||||||
|
|
||||||
// getDimensionValues gets the actual dimension values for dimensions with a wildcard
|
// getDimensionValues gets the actual dimension values for dimensions with a wildcard
|
||||||
func (e *cloudWatchExecutor) getDimensionValuesForWildcards(ctx context.Context, pluginCtx backend.PluginContext, region string,
|
func (e *cloudWatchExecutor) getDimensionValuesForWildcards(ctx context.Context, pluginCtx backend.PluginContext, region string,
|
||||||
client models.CloudWatchMetricsAPIProvider, origQueries []*models.CloudWatchQuery, tagValueCache *cache.Cache) ([]*models.CloudWatchQuery, error) {
|
client models.CloudWatchMetricsAPIProvider, origQueries []*models.CloudWatchQuery, tagValueCache *cache.Cache, listMetricsPageLimit int) ([]*models.CloudWatchQuery, error) {
|
||||||
instance, err := e.getInstance(ctx, pluginCtx)
|
metricsClient := clients.NewMetricsClient(client, listMetricsPageLimit)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
metricsClient := clients.NewMetricsClient(client, instance.Settings.GrafanaSettings.ListMetricsPageLimit)
|
|
||||||
service := services.NewListMetricsService(metricsClient)
|
service := services.NewListMetricsService(metricsClient)
|
||||||
// create copies of the original query. All the fields besides Dimensions are primitives
|
// create copies of the original query. All the fields besides Dimensions are primitives
|
||||||
queries := copyQueries(origQueries)
|
queries := copyQueries(origQueries)
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ func TestGetDimensionValuesForWildcards(t *testing.T) {
|
|||||||
query := getBaseQuery()
|
query := getBaseQuery()
|
||||||
query.MetricName = "Test_MetricName1"
|
query.MetricName = "Test_MetricName1"
|
||||||
query.Dimensions = map[string][]string{"Test_DimensionName1": {"Value1"}}
|
query.Dimensions = map[string][]string{"Test_DimensionName1": {"Value1"}}
|
||||||
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", nil, []*models.CloudWatchQuery{query}, tagValueCache)
|
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", nil, []*models.CloudWatchQuery{query}, tagValueCache, 50)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Len(t, queries, 1)
|
assert.Len(t, queries, 1)
|
||||||
assert.NotNil(t, queries[0].Dimensions["Test_DimensionName1"], 1)
|
assert.NotNil(t, queries[0].Dimensions["Test_DimensionName1"], 1)
|
||||||
@@ -38,7 +38,7 @@ func TestGetDimensionValuesForWildcards(t *testing.T) {
|
|||||||
query := getBaseQuery()
|
query := getBaseQuery()
|
||||||
query.MetricName = "Test_MetricName1"
|
query.MetricName = "Test_MetricName1"
|
||||||
query.Dimensions = map[string][]string{"Test_DimensionName1": {"*"}}
|
query.Dimensions = map[string][]string{"Test_DimensionName1": {"*"}}
|
||||||
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", nil, []*models.CloudWatchQuery{query}, tagValueCache)
|
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", nil, []*models.CloudWatchQuery{query}, tagValueCache, 50)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Len(t, queries, 1)
|
assert.Len(t, queries, 1)
|
||||||
assert.NotNil(t, queries[0].Dimensions["Test_DimensionName1"])
|
assert.NotNil(t, queries[0].Dimensions["Test_DimensionName1"])
|
||||||
@@ -57,7 +57,7 @@ func TestGetDimensionValuesForWildcards(t *testing.T) {
|
|||||||
{MetricName: utils.Pointer("Test_MetricName4"), Dimensions: []*cloudwatch.Dimension{{Name: utils.Pointer("Test_DimensionName1"), Value: utils.Pointer("Value2")}}},
|
{MetricName: utils.Pointer("Test_MetricName4"), Dimensions: []*cloudwatch.Dimension{{Name: utils.Pointer("Test_DimensionName1"), Value: utils.Pointer("Value2")}}},
|
||||||
}}
|
}}
|
||||||
api.On("ListMetricsPagesWithContext").Return(nil)
|
api.On("ListMetricsPagesWithContext").Return(nil)
|
||||||
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache)
|
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache, 50)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Len(t, queries, 1)
|
assert.Len(t, queries, 1)
|
||||||
assert.Equal(t, map[string][]string{"Test_DimensionName1": {"Value1", "Value2", "Value3", "Value4"}}, queries[0].Dimensions)
|
assert.Equal(t, map[string][]string{"Test_DimensionName1": {"Value1", "Value2", "Value3", "Value4"}}, queries[0].Dimensions)
|
||||||
@@ -73,13 +73,13 @@ func TestGetDimensionValuesForWildcards(t *testing.T) {
|
|||||||
{MetricName: utils.Pointer("Test_MetricName"), Dimensions: []*cloudwatch.Dimension{{Name: utils.Pointer("Test_DimensionName"), Value: utils.Pointer("Value")}}},
|
{MetricName: utils.Pointer("Test_MetricName"), Dimensions: []*cloudwatch.Dimension{{Name: utils.Pointer("Test_DimensionName"), Value: utils.Pointer("Value")}}},
|
||||||
}}
|
}}
|
||||||
api.On("ListMetricsPagesWithContext").Return(nil)
|
api.On("ListMetricsPagesWithContext").Return(nil)
|
||||||
_, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache)
|
_, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache, 50)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
// make sure the original query wasn't altered
|
// make sure the original query wasn't altered
|
||||||
assert.Equal(t, map[string][]string{"Test_DimensionName": {"*"}}, query.Dimensions)
|
assert.Equal(t, map[string][]string{"Test_DimensionName": {"*"}}, query.Dimensions)
|
||||||
|
|
||||||
//setting the api to nil confirms that it's using the cached value
|
//setting the api to nil confirms that it's using the cached value
|
||||||
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", nil, []*models.CloudWatchQuery{query}, tagValueCache)
|
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", nil, []*models.CloudWatchQuery{query}, tagValueCache, 50)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Len(t, queries, 1)
|
assert.Len(t, queries, 1)
|
||||||
assert.Equal(t, map[string][]string{"Test_DimensionName": {"Value"}}, queries[0].Dimensions)
|
assert.Equal(t, map[string][]string{"Test_DimensionName": {"Value"}}, queries[0].Dimensions)
|
||||||
@@ -93,7 +93,7 @@ func TestGetDimensionValuesForWildcards(t *testing.T) {
|
|||||||
query.MatchExact = false
|
query.MatchExact = false
|
||||||
api := &mocks.MetricsAPI{Metrics: []*cloudwatch.Metric{}}
|
api := &mocks.MetricsAPI{Metrics: []*cloudwatch.Metric{}}
|
||||||
api.On("ListMetricsPagesWithContext").Return(nil)
|
api.On("ListMetricsPagesWithContext").Return(nil)
|
||||||
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache)
|
queries, err := executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache, 50)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Len(t, queries, 1)
|
assert.Len(t, queries, 1)
|
||||||
// assert that the values was set to an empty array
|
// assert that the values was set to an empty array
|
||||||
@@ -104,7 +104,7 @@ func TestGetDimensionValuesForWildcards(t *testing.T) {
|
|||||||
{MetricName: utils.Pointer("Test_MetricName"), Dimensions: []*cloudwatch.Dimension{{Name: utils.Pointer("Test_DimensionName2"), Value: utils.Pointer("Value")}}},
|
{MetricName: utils.Pointer("Test_MetricName"), Dimensions: []*cloudwatch.Dimension{{Name: utils.Pointer("Test_DimensionName2"), Value: utils.Pointer("Value")}}},
|
||||||
}
|
}
|
||||||
api.On("ListMetricsPagesWithContext").Return(nil)
|
api.On("ListMetricsPagesWithContext").Return(nil)
|
||||||
queries, err = executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache)
|
queries, err = executor.getDimensionValuesForWildcards(ctx, pluginCtx, "us-east-1", api, []*models.CloudWatchQuery{query}, tagValueCache, 50)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Len(t, queries, 1)
|
assert.Len(t, queries, 1)
|
||||||
assert.Equal(t, map[string][]string{"Test_DimensionName2": {"Value"}}, queries[0].Dimensions)
|
assert.Equal(t, map[string][]string{"Test_DimensionName2": {"Value"}}, queries[0].Dimensions)
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ func (e *cloudWatchExecutor) executeTimeSeriesQuery(ctx context.Context, req *ba
|
|||||||
}
|
}
|
||||||
|
|
||||||
if features.IsEnabled(ctx, features.FlagCloudWatchWildCardDimensionValues) {
|
if features.IsEnabled(ctx, features.FlagCloudWatchWildCardDimensionValues) {
|
||||||
requestQueries, err = e.getDimensionValuesForWildcards(ctx, req.PluginContext, region, client, requestQueries, instance.tagValueCache)
|
requestQueries, err = e.getDimensionValuesForWildcards(ctx, req.PluginContext, region, client, requestQueries, instance.tagValueCache, instance.Settings.GrafanaSettings.ListMetricsPageLimit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user