Parcourir la source

feat(alerting): doing schema changes

Torkel Ödegaard il y a 9 ans
Parent
commit
0392fde34e

+ 16 - 11
pkg/models/alert.go

@@ -31,17 +31,22 @@ func (s AlertSeverityType) IsValid() bool {
 }
 
 type Alert struct {
-	Id          int64
-	OrgId       int64
-	DashboardId int64
-	PanelId     int64
-	Name        string
-	Message     string
-	Severity    AlertSeverityType
-	State       AlertStateType
-	Handler     int64
-	Enabled     bool
-	Frequency   int64
+	Id             int64
+	OrgId          int64
+	DashboardId    int64
+	PanelId        int64
+	Name           string
+	Message        string
+	Severity       AlertSeverityType
+	State          AlertStateType
+	Handler        int64
+	Paused         bool
+	Silenced       bool
+	ExecutionError string
+	Frequency      int64
+
+	LastEvalData *simplejson.Json
+	LastEvalTime time.Time
 
 	CreatedBy int64
 	UpdatedBy int64

+ 4 - 4
pkg/services/alerting/conditions/query.go

@@ -40,16 +40,16 @@ func (c *QueryCondition) Eval(context *alerting.EvalContext) {
 
 	for _, series := range seriesList {
 		reducedValue := c.Reducer.Reduce(series)
-		pass := c.Evaluator.Eval(series, reducedValue)
+		evalMatch := c.Evaluator.Eval(series, reducedValue)
 
 		if context.IsTestRun {
 			context.Logs = append(context.Logs, &alerting.ResultLogEntry{
-				Message: fmt.Sprintf("Condition[%d]: Eval: %v, Metric: %s, Value: %1.3f", c.Index, pass, series.Name, reducedValue),
+				Message: fmt.Sprintf("Condition[%d]: Eval: %v, Metric: %s, Value: %1.3f", c.Index, evalMatch, series.Name, reducedValue),
 			})
 		}
 
-		if pass {
-			context.Events = append(context.Events, &alerting.Event{
+		if evalMatch {
+			context.EvalMatches = append(context.EvalMatches, &alerting.EvalMatch{
 				Metric: series.Name,
 				Value:  reducedValue,
 			})

+ 8 - 8
pkg/services/alerting/eval_context.go

@@ -13,7 +13,7 @@ import (
 type EvalContext struct {
 	Firing          bool
 	IsTestRun       bool
-	Events          []*Event
+	EvalMatches     []*EvalMatch
 	Logs            []*ResultLogEntry
 	Error           error
 	Description     string
@@ -94,12 +94,12 @@ func (c *EvalContext) GetImageUrl() (string, error) {
 
 func NewEvalContext(rule *Rule) *EvalContext {
 	return &EvalContext{
-		StartTime:  time.Now(),
-		Rule:       rule,
-		Logs:       make([]*ResultLogEntry, 0),
-		Events:     make([]*Event, 0),
-		DoneChan:   make(chan bool, 1),
-		CancelChan: make(chan bool, 1),
-		log:        log.New("alerting.evalContext"),
+		StartTime:   time.Now(),
+		Rule:        rule,
+		Logs:        make([]*ResultLogEntry, 0),
+		EvalMatches: make([]*EvalMatch, 0),
+		DoneChan:    make(chan bool, 1),
+		CancelChan:  make(chan bool, 1),
+		log:         log.New("alerting.evalContext"),
 	}
 }

+ 0 - 1
pkg/services/alerting/extractor.go

@@ -87,7 +87,6 @@ func (e *DashAlertExtractor) GetAlerts() ([]*m.Alert, error) {
 				Id:          jsonAlert.Get("id").MustInt64(),
 				Name:        jsonAlert.Get("name").MustString(),
 				Handler:     jsonAlert.Get("handler").MustInt64(),
-				Enabled:     jsonAlert.Get("enabled").MustBool(),
 				Message:     jsonAlert.Get("message").MustString(),
 				Severity:    m.AlertSeverityType(jsonAlert.Get("severity").MustString()),
 				Frequency:   getTimeDurationStringToSeconds(jsonAlert.Get("frequency").MustString()),

+ 1 - 2
pkg/services/alerting/models.go

@@ -12,10 +12,9 @@ type ResultLogEntry struct {
 	Data    interface{}
 }
 
-type Event struct {
+type EvalMatch struct {
 	Value  float64
 	Metric string
-	State  string
 	Tags   map[string]string
 }
 

+ 1 - 1
pkg/services/alerting/notifiers/email.go

@@ -59,7 +59,7 @@ func (this *EmailNotifier) Notify(context *alerting.EvalContext) {
 			"RuleUrl":       ruleUrl,
 			"ImageLink":     context.ImagePublicUrl,
 			"AlertPageUrl":  setting.AppUrl + "alerting",
-			"Events":        context.Events,
+			"EvalMatches":   context.EvalMatches,
 		},
 		To:       this.Addresses,
 		Template: "alert_notification.html",

+ 1 - 1
pkg/services/alerting/notifiers/slack.go

@@ -50,7 +50,7 @@ func (this *SlackNotifier) Notify(context *alerting.EvalContext) {
 
 	fields := make([]map[string]interface{}, 0)
 	fieldLimitCount := 4
-	for index, evt := range context.Events {
+	for index, evt := range context.EvalMatches {
 		fields = append(fields, map[string]interface{}{
 			"title": evt.Metric,
 			"value": evt.Value,

+ 19 - 12
pkg/services/sqlstore/migrations/alert_mig.go

@@ -20,28 +20,30 @@ func addAlertMigrations(mg *Migrator) {
 			{Name: "frequency", Type: DB_BigInt, Nullable: false},
 			{Name: "handler", Type: DB_BigInt, Nullable: false},
 			{Name: "severity", Type: DB_Text, Nullable: false},
-			{Name: "enabled", Type: DB_Bool, Nullable: false},
+			{Name: "paused", Type: DB_Bool, Nullable: false},
+			{Name: "silenced", Type: DB_Bool, Nullable: false},
+			{Name: "execution_error", Type: DB_Text, Nullable: false},
+			{Name: "last_eval_data", Type: DB_Text, Nullable: false},
+			{Name: "last_eval_time", Type: DB_DateTime, Nullable: false},
 			{Name: "created", Type: DB_DateTime, Nullable: false},
 			{Name: "updated", Type: DB_DateTime, Nullable: false},
 			{Name: "updated_by", Type: DB_BigInt, Nullable: false},
 			{Name: "created_by", Type: DB_BigInt, Nullable: false},
 		},
+		Indices: []*Index{
+			{Cols: []string{"org_id", "id"}, Type: IndexType},
+			{Cols: []string{"state"}, Type: IndexType},
+			{Cols: []string{"dashboard_id"}, Type: IndexType},
+		},
 	}
 
 	// create table
 	mg.AddMigration("create alert table v1", NewAddTableMigration(alertV1))
 
-	alert_heartbeat := Table{
-		Name: "alert_heartbeat",
-		Columns: []*Column{
-			{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
-			{Name: "server_id", Type: DB_NVarchar, Length: 50, Nullable: false},
-			{Name: "created", Type: DB_DateTime, Nullable: false},
-			{Name: "updated", Type: DB_DateTime, Nullable: false},
-		},
-	}
-
-	mg.AddMigration("create alert_heartbeat table v1", NewAddTableMigration(alert_heartbeat))
+	// create indices
+	mg.AddMigration("add index alert org_id & id ", NewAddIndexMigration(alertV1, alertV1.Indices[0]))
+	mg.AddMigration("add index alert state", NewAddIndexMigration(alertV1, alertV1.Indices[1]))
+	mg.AddMigration("add index alert dashboard_id", NewAddIndexMigration(alertV1, alertV1.Indices[2]))
 
 	alert_notification := Table{
 		Name: "alert_notification",
@@ -54,7 +56,12 @@ func addAlertMigrations(mg *Migrator) {
 			{Name: "created", Type: DB_DateTime, Nullable: false},
 			{Name: "updated", Type: DB_DateTime, Nullable: false},
 		},
+		Indices: []*Index{
+			{Cols: []string{"org_id", "name"}, Type: UniqueIndex},
+		},
 	}
 
 	mg.AddMigration("create alert_notification table v1", NewAddTableMigration(alert_notification))
+
+	mg.AddMigration("add index alert_notification org_id & name", NewAddIndexMigration(alert_notification, alert_notification.Indices[0]))
 }

+ 18 - 0
pkg/services/sqlstore/migrations/heartbeat_mig.go

@@ -0,0 +1,18 @@
+package migrations
+
+// // create table
+// 	mg.AddMigration("create alert table v1", NewAddTableMigration(alertV1))
+//
+// 	alert_heartbeat := Table{
+// 		Name: "alert_heartbeat",
+// 		Columns: []*Column{
+// 			{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
+// 			{Name: "server_id", Type: DB_NVarchar, Length: 50, Nullable: false},
+// 			{Name: "created", Type: DB_DateTime, Nullable: false},
+// 			{Name: "updated", Type: DB_DateTime, Nullable: false},
+// 		},
+// 	}
+//
+// 	mg.AddMigration("create alert_heartbeat table v1", NewAddTableMigration(alert_heartbeat))
+//
+//