diff --git a/pkg/services/ngalert/prom/convert.go b/pkg/services/ngalert/prom/convert.go index f64b17bfc5e..e45a4c9d0f2 100644 --- a/pkg/services/ngalert/prom/convert.go +++ b/pkg/services/ngalert/prom/convert.go @@ -21,7 +21,7 @@ const ( ) const ( - queryRefID = "query" + QueryRefID = "query" prometheusMathRefID = "prometheus_math" thresholdRefID = "threshold" ) @@ -198,7 +198,7 @@ func (p *Converter) convertRule(orgID int64, namespaceUID string, promGroup Prom if isRecordingRule { record = &models.Record{ - From: queryRefID, + From: QueryRefID, Metric: rule.Record, TargetDatasourceUID: p.cfg.DatasourceUID, } diff --git a/pkg/services/ngalert/prom/convert_test.go b/pkg/services/ngalert/prom/convert_test.go index 2281a9da1c0..b4f85222df3 100644 --- a/pkg/services/ngalert/prom/convert_test.go +++ b/pkg/services/ngalert/prom/convert_test.go @@ -196,7 +196,7 @@ func TestPrometheusRulesToGrafana(t *testing.T) { if promRule.Record != "" { require.Equal(t, fmt.Sprintf("[%s] %s", tc.promGroup.Name, promRule.Record), grafanaRule.Title) require.NotNil(t, grafanaRule.Record) - require.Equal(t, grafanaRule.Record.From, queryRefID) + require.Equal(t, grafanaRule.Record.From, QueryRefID) require.Equal(t, promRule.Record, grafanaRule.Record.Metric) require.Equal(t, tc.config.DatasourceUID, grafanaRule.Record.TargetDatasourceUID) } else { diff --git a/pkg/services/ngalert/prom/query.go b/pkg/services/ngalert/prom/query.go index 74aed34f83f..e2a56bf9269 100644 --- a/pkg/services/ngalert/prom/query.go +++ b/pkg/services/ngalert/prom/query.go @@ -17,15 +17,15 @@ type CommonQueryModel struct { } func createQueryNode(datasourceUID, datasourceType, expr string, fromTimeRange, evaluationOffset time.Duration) (models.AlertQuery, error) { - modelData := map[string]interface{}{ - "datasource": map[string]interface{}{ + modelData := map[string]any{ + "datasource": map[string]any{ "type": datasourceType, "uid": datasourceUID, }, "expr": expr, "instant": true, "range": false, - "refId": queryRefID, + "refId": QueryRefID, } if datasourceType == datasources.DS_LOKI { @@ -40,7 +40,7 @@ func createQueryNode(datasourceUID, datasourceType, expr string, fromTimeRange, return models.AlertQuery{ DatasourceUID: datasourceUID, Model: modelJSON, - RefID: queryRefID, + RefID: QueryRefID, RelativeTimeRange: models.RelativeTimeRange{ From: models.Duration(fromTimeRange + evaluationOffset), To: models.Duration(0 + evaluationOffset), @@ -66,7 +66,7 @@ func createMathNode() (models.AlertQuery, error) { Type: expr.QueryTypeMath, }, MathQuery: expr.MathQuery{ - Expression: fmt.Sprintf("is_number($%[1]s) || is_nan($%[1]s) || is_inf($%[1]s)", queryRefID), + Expression: fmt.Sprintf("is_number($%[1]s) || is_nan($%[1]s) || is_inf($%[1]s)", QueryRefID), }, } diff --git a/pkg/services/ngalert/state/template/template.go b/pkg/services/ngalert/state/template/template.go index ebd541d527d..bf584efb7b0 100644 --- a/pkg/services/ngalert/state/template/template.go +++ b/pkg/services/ngalert/state/template/template.go @@ -16,6 +16,7 @@ import ( "github.com/prometheus/prometheus/template" "github.com/grafana/grafana/pkg/services/ngalert/eval" + "github.com/grafana/grafana/pkg/services/ngalert/prom" ) type Labels map[string]string @@ -77,10 +78,17 @@ type Data struct { } func NewData(labels map[string]string, res eval.Result) Data { + values := NewValues(res.Values) + + value := res.EvaluationString + if v, ok := values[prom.QueryRefID]; ok { + value = fmt.Sprintf("%g", v.Value) + } + return Data{ Labels: labels, - Values: NewValues(res.Values), - Value: res.EvaluationString, + Values: values, + Value: value, } }