Browse Source

feat(alerting): add triggeredAlerts as json to alert_state

bergquist 9 years ago
parent
commit
67197d54f9

+ 13 - 10
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
 }

+ 6 - 4
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 {

+ 1 - 4
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}
 }

+ 6 - 5
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)

+ 1 - 0
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},
 		},
 	}