diff --git a/pkg/models/alert_state.go b/pkg/models/alert_state.go index ae29b7d8a77..5dbfb2ee7cd 100644 --- a/pkg/models/alert_state.go +++ b/pkg/models/alert_state.go @@ -3,16 +3,18 @@ package models import ( "time" + "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/services/alerting/alertstates" ) type AlertState struct { - Id int64 `json:"-"` - OrgId int64 `json:"-"` - AlertId int64 `json:"alertId"` - NewState string `json:"newState"` - Created time.Time `json:"created"` - Info string `json:"info"` + Id int64 `json:"-"` + OrgId int64 `json:"-"` + AlertId int64 `json:"alertId"` + NewState string `json:"newState"` + Created time.Time `json:"created"` + Info string `json:"info"` + TriggeredAlerts *simplejson.Json `json:"triggeredAlerts"` } func (this *UpdateAlertStateCommand) IsValidState() bool { @@ -27,10 +29,11 @@ func (this *UpdateAlertStateCommand) IsValidState() bool { // Commands type UpdateAlertStateCommand struct { - AlertId int64 `json:"alertId" binding:"Required"` - OrgId int64 `json:"orgId" binding:"Required"` - NewState string `json:"newState" binding:"Required"` - Info string `json:"info"` + AlertId int64 `json:"alertId" binding:"Required"` + OrgId int64 `json:"orgId" binding:"Required"` + NewState string `json:"newState" binding:"Required"` + Info string `json:"info"` + TriggeredAlerts *simplejson.Json `json:"triggeredAlerts"` Result *Alert } diff --git a/pkg/services/alerting/engine.go b/pkg/services/alerting/engine.go index 100ea5ae0b3..937505f4c6b 100644 --- a/pkg/services/alerting/engine.go +++ b/pkg/services/alerting/engine.go @@ -6,6 +6,7 @@ import ( "github.com/benbjohnson/clock" "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/log" m "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/alerting/alertstates" @@ -145,10 +146,11 @@ func (e *Engine) resultHandler() { func (e *Engine) reactToState(result *AlertResult) { if shouldUpdateState(result) { cmd := &m.UpdateAlertStateCommand{ - AlertId: result.AlertJob.Rule.Id, - NewState: result.State, - Info: result.Description, - OrgId: result.AlertJob.Rule.OrgId, + AlertId: result.AlertJob.Rule.Id, + NewState: result.State, + Info: result.Description, + OrgId: result.AlertJob.Rule.OrgId, + TriggeredAlerts: simplejson.NewFromAny(result.TriggeredAlerts), } if err := bus.Dispatch(cmd); err != nil { diff --git a/pkg/services/alerting/handler.go b/pkg/services/alerting/handler.go index 553949ae91d..68a6f08931d 100644 --- a/pkg/services/alerting/handler.go +++ b/pkg/services/alerting/handler.go @@ -126,7 +126,6 @@ func (e *HandlerImpl) evaluateRule(rule *AlertRule, series tsdb.TimeSeriesSlice) } executionState := alertstates.Ok - description := "" for _, raised := range triggeredAlert { if raised.State == alertstates.Critical { executionState = alertstates.Critical @@ -135,9 +134,7 @@ func (e *HandlerImpl) evaluateRule(rule *AlertRule, series tsdb.TimeSeriesSlice) if executionState != alertstates.Critical && raised.State == alertstates.Warn { executionState = alertstates.Warn } - - description += fmt.Sprintf(descriptionFmt, raised.ActualValue, raised.Name) } - return &AlertResult{State: executionState, Description: description, TriggeredAlerts: triggeredAlert} + return &AlertResult{State: executionState, Description: "Returned " + executionState, TriggeredAlerts: triggeredAlert} } diff --git a/pkg/services/sqlstore/alert_state.go b/pkg/services/sqlstore/alert_state.go index d2453f0cb26..f2d85cf6265 100644 --- a/pkg/services/sqlstore/alert_state.go +++ b/pkg/services/sqlstore/alert_state.go @@ -51,11 +51,12 @@ func SetNewAlertState(cmd *m.UpdateAlertStateCommand) error { sess.Id(alert.Id).Update(&alert) alertState := m.AlertState{ - AlertId: cmd.AlertId, - OrgId: cmd.OrgId, - NewState: cmd.NewState, - Info: cmd.Info, - Created: time.Now(), + AlertId: cmd.AlertId, + OrgId: cmd.OrgId, + NewState: cmd.NewState, + Info: cmd.Info, + Created: time.Now(), + TriggeredAlerts: cmd.TriggeredAlerts, } sess.Insert(&alertState) diff --git a/pkg/services/sqlstore/migrations/alert_mig.go b/pkg/services/sqlstore/migrations/alert_mig.go index a6c5f49cda1..cc8be46f52e 100644 --- a/pkg/services/sqlstore/migrations/alert_mig.go +++ b/pkg/services/sqlstore/migrations/alert_mig.go @@ -49,6 +49,7 @@ func addAlertMigrations(mg *Migrator) { {Name: "org_id", Type: DB_BigInt, Nullable: false}, {Name: "new_state", Type: DB_NVarchar, Length: 50, Nullable: false}, {Name: "info", Type: DB_Text, Nullable: true}, + {Name: "triggered_alerts", Type: DB_Text, Nullable: true}, {Name: "created", Type: DB_DateTime, Nullable: false}, }, }