Alerting: Make $value return the query value of a Prometheus-style rule

pull/101950/head
Alexander Akhmetov 4 months ago
parent e28c993465
commit 2af2d051fc
No known key found for this signature in database
GPG Key ID: A5A8947133B1B31B
  1. 4
      pkg/services/ngalert/prom/convert.go
  2. 2
      pkg/services/ngalert/prom/convert_test.go
  3. 10
      pkg/services/ngalert/prom/query.go
  4. 12
      pkg/services/ngalert/state/template/template.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,
}

@ -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 {

@ -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),
},
}

@ -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,
}
}

Loading…
Cancel
Save