[v9.4.x] fix(alerting): fallback to dashboard to get the full targets… (#77779)

[v9.4.x] fix(alerting): fallback to dashboard to get the full targets PART2
This commit is contained in:
Jean-Philippe Quéméner
2023-11-07 12:07:21 +01:00
committed by GitHub
parent bf2e034e49
commit d5bdc3e90d
2 changed files with 26 additions and 9 deletions
@@ -66,7 +66,8 @@ func fixGraphiteReferencedSubQueries(l log.Logger, queryData map[string]json.Raw
successfulGraphiteMigrationDashboard++
l.Debug("graphite query migration: successfully unwrapped query using the dashboard", "query", fullQueryRaw, "rule_id", ruleID)
queryData[graphite.TargetModelField] = b
// Always delete target full, as it might be set and always used as the first option by the query engine.
delete(queryData, graphite.TargetFullModelField)
return queryData
}
@@ -14,10 +14,11 @@ import (
func TestMigrateAlertRuleQueries(t *testing.T) {
tc := []struct {
name string
input *simplejson.Json
expected string
err error
name string
input *simplejson.Json
expected string
err error
dashboard *dashboards.Dashboard
}{
{
name: "when a query has a sub query - it is extracted",
@@ -25,21 +26,36 @@ func TestMigrateAlertRuleQueries(t *testing.T) {
"targetFull": "thisisafullquery",
"target": "ahalfquery",
}),
expected: `{"target":"thisisafullquery"}`,
expected: `{"target":"thisisafullquery"}`,
dashboard: &dashboards.Dashboard{},
},
{
name: "when a query has a sub query that is not fully unwrapped, it unwraps it",
input: simplejson.NewFromAny(map[string]interface{}{
"refId": "B",
"targetFull": "alias(xxx, #A)",
"target": "alias(#A, #A)",
}),
expected: `{"refId":"B", "target": "alias(xxx, xxx)"}`,
dashboard: &dashboards.Dashboard{
Data: simplejson.MustJson([]byte(`{"panels":[{"id":0,"targets":[{"refId":"A","target":"xxx"},{"refId":"B","target":"alias(#A, #A)"}]}]}`)),
},
},
{
name: "when a query does not have a sub query - it no-ops",
input: simplejson.NewFromAny(map[string]interface{}{
"target": "ahalfquery",
}),
expected: `{"target":"ahalfquery"}`,
expected: `{"target":"ahalfquery"}`,
dashboard: &dashboards.Dashboard{},
},
{
name: "when query was hidden, it removes the flag",
input: simplejson.NewFromAny(map[string]interface{}{
"hide": true,
}),
expected: `{}`,
expected: `{}`,
dashboard: &dashboards.Dashboard{},
},
}
@@ -47,7 +63,7 @@ func TestMigrateAlertRuleQueries(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
model, err := tt.input.Encode()
require.NoError(t, err)
queries, err := migrateAlertRuleQueries(log.NewNopLogger(), 0, []alertQuery{{Model: model, DatasourceUID: "a"}}, 0, &dashboards.Dashboard{}, map[string]string{"a": "graphite"})
queries, err := migrateAlertRuleQueries(log.NewNopLogger(), 0, []alertQuery{{Model: model, DatasourceUID: "a"}}, 0, tt.dashboard, map[string]string{"a": "graphite"})
if tt.err != nil {
require.Error(t, err)
require.EqualError(t, err, tt.err.Error())