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

@ -40,9 +40,14 @@ type Alert struct {
Severity AlertSeverityType
State AlertStateType
Handler int64
Enabled bool
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
@ -97,7 +97,7 @@ func NewEvalContext(rule *Rule) *EvalContext {
StartTime: time.Now(),
Rule: rule,
Logs: make([]*ResultLogEntry, 0),
Events: make([]*Event, 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))
//
//