Skip to content

Commit 3615343

Browse files
m-stramelmjstramel
andauthored
fix: extract Elasticsearch query field in alert rule summaries (#714)
Co-authored-by: mjstramel <mjstramel40@gmail.com>
1 parent bae830d commit 3615343

2 files changed

Lines changed: 85 additions & 0 deletions

File tree

tools/alerting_manage_rules_handlers.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ func extractQuerySummaries(data []*models.AlertQuery) []querySummary {
194194
s.Expression = expr
195195
} else if expr, ok := m["expression"].(string); ok && expr != "" {
196196
s.Expression = expr
197+
} else if query, ok := m["query"].(string); ok && query != "" {
198+
s.Expression = query
197199
}
198200
}
199201
summaries = append(summaries, s)

tools/alerting_manage_rules_unit_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,3 +1330,86 @@ func TestConvertAlertQueries(t *testing.T) {
13301330
require.Equal(t, models.Duration(1800), result[0].RelativeTimeRange.To)
13311331
})
13321332
}
1333+
1334+
func TestExtractQuerySummaries(t *testing.T) {
1335+
t.Run("extracts expr field (Prometheus)", func(t *testing.T) {
1336+
data := []*models.AlertQuery{
1337+
{
1338+
RefID: "A",
1339+
DatasourceUID: "prometheus-uid",
1340+
Model: map[string]any{
1341+
"expr": `up{job="grafana"}`,
1342+
},
1343+
},
1344+
}
1345+
summaries := extractQuerySummaries(data)
1346+
require.Len(t, summaries, 1)
1347+
require.Equal(t, `up{job="grafana"}`, summaries[0].Expression)
1348+
})
1349+
1350+
t.Run("extracts expression field (Grafana expression)", func(t *testing.T) {
1351+
data := []*models.AlertQuery{
1352+
{
1353+
RefID: "B",
1354+
DatasourceUID: "__expr__",
1355+
Model: map[string]any{
1356+
"expression": "A",
1357+
},
1358+
},
1359+
}
1360+
summaries := extractQuerySummaries(data)
1361+
require.Len(t, summaries, 1)
1362+
require.Equal(t, "A", summaries[0].Expression)
1363+
})
1364+
1365+
t.Run("extracts query field (Elasticsearch)", func(t *testing.T) {
1366+
data := []*models.AlertQuery{
1367+
{
1368+
RefID: "A",
1369+
DatasourceUID: "elasticsearch-uid",
1370+
Model: map[string]any{
1371+
"query": `app:"random-service" AND error`,
1372+
},
1373+
},
1374+
}
1375+
summaries := extractQuerySummaries(data)
1376+
require.Len(t, summaries, 1)
1377+
require.Equal(t, `app:"random-service" AND error`, summaries[0].Expression)
1378+
})
1379+
1380+
t.Run("returns nil for empty data", func(t *testing.T) {
1381+
summaries := extractQuerySummaries(nil)
1382+
require.Nil(t, summaries)
1383+
})
1384+
1385+
t.Run("handles mixed datasource types", func(t *testing.T) {
1386+
data := []*models.AlertQuery{
1387+
{
1388+
RefID: "A",
1389+
DatasourceUID: "elasticsearch-uid",
1390+
Model: map[string]any{
1391+
"query": `app:"random-service" AND log.level:"ERROR"`,
1392+
},
1393+
},
1394+
{
1395+
RefID: "B",
1396+
DatasourceUID: "__expr__",
1397+
Model: map[string]any{
1398+
"expression": "A",
1399+
},
1400+
},
1401+
{
1402+
RefID: "C",
1403+
DatasourceUID: "__expr__",
1404+
Model: map[string]any{
1405+
"expression": "B",
1406+
},
1407+
},
1408+
}
1409+
summaries := extractQuerySummaries(data)
1410+
require.Len(t, summaries, 3)
1411+
require.Equal(t, `app:"random-service" AND log.level:"ERROR"`, summaries[0].Expression)
1412+
require.Equal(t, "A", summaries[1].Expression)
1413+
require.Equal(t, "B", summaries[2].Expression)
1414+
})
1415+
}

0 commit comments

Comments
 (0)