|
|
|
@ -11,22 +11,15 @@ import ( |
|
|
|
|
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" |
|
|
|
|
"github.com/prometheus/alertmanager/api/v2/models" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/infra/log" |
|
|
|
|
ngModels "github.com/grafana/grafana/pkg/services/ngalert/models" |
|
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/state" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func FromAlertStateToPostableAlerts(logger log.Logger, firingStates []*state.State, stateManager *state.Manager, appURL string) apimodels.PostableAlerts { |
|
|
|
|
func FromAlertStateToPostableAlerts(firingStates []*state.State, stateManager *state.Manager, appURL *url.URL) apimodels.PostableAlerts { |
|
|
|
|
alerts := apimodels.PostableAlerts{PostableAlerts: make([]models.PostableAlert, 0, len(firingStates))} |
|
|
|
|
var sentAlerts []*state.State |
|
|
|
|
ts := time.Now() |
|
|
|
|
|
|
|
|
|
u, err := url.Parse(appURL) |
|
|
|
|
if err != nil { |
|
|
|
|
logger.Debug("failed to parse URL while joining URL", "url", appURL, "err", err.Error()) |
|
|
|
|
u = nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, alertState := range firingStates { |
|
|
|
|
if !alertState.NeedsSending(stateManager.ResendDelay) { |
|
|
|
|
continue |
|
|
|
@ -38,12 +31,15 @@ func FromAlertStateToPostableAlerts(logger log.Logger, firingStates []*state.Sta |
|
|
|
|
nA["__value_string__"] = alertState.Results[0].EvaluationString |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
genURL := appURL |
|
|
|
|
if uid := nL[ngModels.RuleUIDLabel]; len(uid) > 0 && u != nil { |
|
|
|
|
oldPath := u.Path |
|
|
|
|
var urlStr string |
|
|
|
|
if uid := nL[ngModels.RuleUIDLabel]; len(uid) > 0 && appURL != nil { |
|
|
|
|
u := *appURL |
|
|
|
|
u.Path = path.Join(u.Path, fmt.Sprintf("/alerting/%s/edit", uid)) |
|
|
|
|
genURL = u.String() |
|
|
|
|
u.Path = oldPath |
|
|
|
|
urlStr = u.String() |
|
|
|
|
} else if appURL != nil { |
|
|
|
|
urlStr = appURL.String() |
|
|
|
|
} else { |
|
|
|
|
urlStr = "" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
alerts.PostableAlerts = append(alerts.PostableAlerts, models.PostableAlert{ |
|
|
|
@ -52,7 +48,7 @@ func FromAlertStateToPostableAlerts(logger log.Logger, firingStates []*state.Sta |
|
|
|
|
EndsAt: strfmt.DateTime(alertState.EndsAt), |
|
|
|
|
Alert: models.Alert{ |
|
|
|
|
Labels: models.LabelSet(nL), |
|
|
|
|
GeneratorURL: strfmt.URI(genURL), |
|
|
|
|
GeneratorURL: strfmt.URI(urlStr), |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
alertState.LastSentAt = ts |
|
|
|
|