feat(alerting): doing schema changes

This commit is contained in:
Torkel Ödegaard
2016-08-15 15:12:43 +02:00
parent 4d0982a21c
commit 0392fde34e
9 changed files with 68 additions and 40 deletions

View File

@ -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

View File

@ -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,
})

View File

@ -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"),
}
}

View File

@ -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()),

View File

@ -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
}

View File

@ -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",

View File

@ -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,

View File

@ -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]))
}

View File

@ -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))
//
//