mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting Unification: Use the errors from grafana/alerting in Alerts (#61425)
This commit is contained in:
@@ -146,7 +146,7 @@ func (srv AlertmanagerSrv) RouteGetAMAlertGroups(c *models.ReqContext) response.
|
|||||||
c.Query("receiver"),
|
c.Query("receiver"),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, notifier.ErrGetAlertGroupsBadPayload) {
|
if errors.Is(err, alerting.ErrGetAlertGroupsBadPayload) {
|
||||||
return ErrResp(http.StatusBadRequest, err, "")
|
return ErrResp(http.StatusBadRequest, err, "")
|
||||||
}
|
}
|
||||||
// any other error here should be an unexpected failure and thus an internal error
|
// any other error here should be an unexpected failure and thus an internal error
|
||||||
@@ -170,10 +170,10 @@ func (srv AlertmanagerSrv) RouteGetAMAlerts(c *models.ReqContext) response.Respo
|
|||||||
c.Query("receiver"),
|
c.Query("receiver"),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, notifier.ErrGetAlertsBadPayload) {
|
if errors.Is(err, alerting.ErrGetAlertsBadPayload) {
|
||||||
return ErrResp(http.StatusBadRequest, err, "")
|
return ErrResp(http.StatusBadRequest, err, "")
|
||||||
}
|
}
|
||||||
if errors.Is(err, notifier.ErrGetAlertsUnavailable) {
|
if errors.Is(err, alerting.ErrGetAlertsUnavailable) {
|
||||||
return ErrResp(http.StatusServiceUnavailable, err, "")
|
return ErrResp(http.StatusServiceUnavailable, err, "")
|
||||||
}
|
}
|
||||||
// any other error here should be an unexpected failure and thus an internal error
|
// any other error here should be an unexpected failure and thus an internal error
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/grafana/alerting/alerting"
|
||||||
|
|
||||||
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
||||||
v2 "github.com/prometheus/alertmanager/api/v2"
|
v2 "github.com/prometheus/alertmanager/api/v2"
|
||||||
"github.com/prometheus/alertmanager/dispatch"
|
"github.com/prometheus/alertmanager/dispatch"
|
||||||
@@ -14,13 +16,6 @@ import (
|
|||||||
prometheus_model "github.com/prometheus/common/model"
|
prometheus_model "github.com/prometheus/common/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
ErrGetAlertsInternal = fmt.Errorf("unable to retrieve alerts(s) due to an internal error")
|
|
||||||
ErrGetAlertsUnavailable = fmt.Errorf("unable to retrieve alerts(s) as alertmanager is not initialised yet")
|
|
||||||
ErrGetAlertsBadPayload = fmt.Errorf("unable to retrieve alerts")
|
|
||||||
ErrGetAlertGroupsBadPayload = fmt.Errorf("unable to retrieve alerts groups")
|
|
||||||
)
|
|
||||||
|
|
||||||
func (am *Alertmanager) GetAlerts(active, silenced, inhibited bool, filter []string, receivers string) (apimodels.GettableAlerts, error) {
|
func (am *Alertmanager) GetAlerts(active, silenced, inhibited bool, filter []string, receivers string) (apimodels.GettableAlerts, error) {
|
||||||
var (
|
var (
|
||||||
// Initialize result slice to prevent api returning `null` when there
|
// Initialize result slice to prevent api returning `null` when there
|
||||||
@@ -29,19 +24,19 @@ func (am *Alertmanager) GetAlerts(active, silenced, inhibited bool, filter []str
|
|||||||
)
|
)
|
||||||
|
|
||||||
if !am.Ready() {
|
if !am.Ready() {
|
||||||
return res, ErrGetAlertsUnavailable
|
return res, alerting.ErrGetAlertsUnavailable
|
||||||
}
|
}
|
||||||
|
|
||||||
matchers, err := parseFilter(filter)
|
matchers, err := parseFilter(filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
am.logger.Error("failed to parse matchers", "error", err)
|
am.logger.Error("failed to parse matchers", "error", err)
|
||||||
return nil, fmt.Errorf("%s: %w", err.Error(), ErrGetAlertsBadPayload)
|
return nil, fmt.Errorf("%s: %w", err.Error(), alerting.ErrGetAlertsBadPayload)
|
||||||
}
|
}
|
||||||
|
|
||||||
receiverFilter, err := parseReceivers(receivers)
|
receiverFilter, err := parseReceivers(receivers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
am.logger.Error("failed to parse receiver regex", "error", err)
|
am.logger.Error("failed to parse receiver regex", "error", err)
|
||||||
return nil, fmt.Errorf("%s: %w", err.Error(), ErrGetAlertsBadPayload)
|
return nil, fmt.Errorf("%s: %w", err.Error(), alerting.ErrGetAlertsBadPayload)
|
||||||
}
|
}
|
||||||
|
|
||||||
alerts := am.alerts.GetPending()
|
alerts := am.alerts.GetPending()
|
||||||
@@ -78,7 +73,7 @@ func (am *Alertmanager) GetAlerts(active, silenced, inhibited bool, filter []str
|
|||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
am.logger.Error("failed to iterate through the alerts", "error", err)
|
am.logger.Error("failed to iterate through the alerts", "error", err)
|
||||||
return nil, fmt.Errorf("%s: %w", err.Error(), ErrGetAlertsInternal)
|
return nil, fmt.Errorf("%s: %w", err.Error(), alerting.ErrGetAlertsInternal)
|
||||||
}
|
}
|
||||||
sort.Slice(res, func(i, j int) bool {
|
sort.Slice(res, func(i, j int) bool {
|
||||||
return *res[i].Fingerprint < *res[j].Fingerprint
|
return *res[i].Fingerprint < *res[j].Fingerprint
|
||||||
@@ -91,13 +86,13 @@ func (am *Alertmanager) GetAlertGroups(active, silenced, inhibited bool, filter
|
|||||||
matchers, err := parseFilter(filter)
|
matchers, err := parseFilter(filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
am.logger.Error("msg", "failed to parse matchers", "error", err)
|
am.logger.Error("msg", "failed to parse matchers", "error", err)
|
||||||
return nil, fmt.Errorf("%s: %w", err.Error(), ErrGetAlertGroupsBadPayload)
|
return nil, fmt.Errorf("%s: %w", err.Error(), alerting.ErrGetAlertGroupsBadPayload)
|
||||||
}
|
}
|
||||||
|
|
||||||
receiverFilter, err := parseReceivers(receivers)
|
receiverFilter, err := parseReceivers(receivers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
am.logger.Error("msg", "failed to compile receiver regex", "error", err)
|
am.logger.Error("msg", "failed to compile receiver regex", "error", err)
|
||||||
return nil, fmt.Errorf("%s: %w", err.Error(), ErrGetAlertGroupsBadPayload)
|
return nil, fmt.Errorf("%s: %w", err.Error(), alerting.ErrGetAlertGroupsBadPayload)
|
||||||
}
|
}
|
||||||
|
|
||||||
rf := func(receiverFilter *regexp.Regexp) func(r *dispatch.Route) bool {
|
rf := func(receiverFilter *regexp.Regexp) func(r *dispatch.Route) bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user