Alerting: Improve Prometheus Alert Rule error message (#29390)

* provide better ctx for prom err

* rework

* Update pkg/tsdb/prometheus/prometheus.go

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>

* Update pkg/tsdb/prometheus/prometheus.go

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>

* call func

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
This commit is contained in:
Will Browne
2020-11-26 13:38:36 +01:00
committed by GitHub
co-authored by Arve Knudsen
parent 06e48cb869
commit d10a8b2761
2 changed files with 35 additions and 6 deletions
+17 -1
View File
@@ -2,6 +2,7 @@ package prometheus
import (
"context"
"errors"
"fmt"
"regexp"
"strings"
@@ -15,7 +16,7 @@ import (
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/tsdb"
api "github.com/prometheus/client_golang/api"
"github.com/prometheus/client_golang/api"
apiv1 "github.com/prometheus/client_golang/api/prometheus/v1"
"github.com/prometheus/common/model"
)
@@ -216,3 +217,18 @@ func parseResponse(value model.Value, query *PrometheusQuery) (*tsdb.QueryResult
return queryRes, nil
}
func IsAPIError(err error) bool {
// Have to use errors.As to compare Prometheus errors, since errors.Is won't work due to Prometheus
// errors being pointers and errors.Is ends up comparing them by pointer address
var e *apiv1.Error
return errors.As(err, &e)
}
func ConvertAPIError(err error) error {
var e *apiv1.Error
if errors.As(err, &e) {
return fmt.Errorf("%s: %s", e.Msg, e.Detail)
}
return err
}