mirror of https://github.com/grafana/grafana.git
feat(alerting): adds sql layer for saving execution errors
This commit is contained in:
parent
434332f02d
commit
9915f15ed0
|
|
@ -122,6 +122,11 @@ type DeleteAlertCommand struct {
|
||||||
AlertId int64
|
AlertId int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SaveExecutionErrorCommand struct {
|
||||||
|
AlertId int64
|
||||||
|
ExecutionError string
|
||||||
|
}
|
||||||
|
|
||||||
//Queries
|
//Queries
|
||||||
type GetAlertsQuery struct {
|
type GetAlertsQuery struct {
|
||||||
OrgId int64
|
OrgId int64
|
||||||
|
|
|
||||||
|
|
@ -65,19 +65,19 @@ func (this *SlackNotifier) Notify(context *alerting.EvalContext) {
|
||||||
"attachments": []map[string]interface{}{
|
"attachments": []map[string]interface{}{
|
||||||
{
|
{
|
||||||
"color": context.GetColor(),
|
"color": context.GetColor(),
|
||||||
//"pretext": "Optional text that appears above the attachment block",
|
|
||||||
// "author_name": "Bobby Tables",
|
|
||||||
// "author_link": "http://flickr.com/bobby/",
|
|
||||||
// "author_icon": "http://flickr.com/icons/bobby.jpg",
|
|
||||||
"title": context.GetNotificationTitle(),
|
"title": context.GetNotificationTitle(),
|
||||||
"title_link": ruleUrl,
|
"title_link": ruleUrl,
|
||||||
"text": context.Rule.Message,
|
"text": context.Rule.Message,
|
||||||
"fields": fields,
|
"fields": fields,
|
||||||
"image_url": context.ImagePublicUrl,
|
"image_url": context.ImagePublicUrl,
|
||||||
// "thumb_url": "http://example.com/path/to/thumb.png",
|
|
||||||
"footer": "Grafana v" + setting.BuildVersion,
|
"footer": "Grafana v" + setting.BuildVersion,
|
||||||
"footer_icon": "http://grafana.org/assets/img/fav32.png",
|
"footer_icon": "http://grafana.org/assets/img/fav32.png",
|
||||||
"ts": time.Now().Unix(),
|
"ts": time.Now().Unix(),
|
||||||
|
//"pretext": "Optional text that appears above the attachment block",
|
||||||
|
// "author_name": "Bobby Tables",
|
||||||
|
// "author_link": "http://flickr.com/bobby/",
|
||||||
|
// "author_icon": "http://flickr.com/icons/bobby.jpg",
|
||||||
|
// "thumb_url": "http://example.com/path/to/thumb.png",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,24 @@ func init() {
|
||||||
bus.AddHandler("sql", DeleteAlertById)
|
bus.AddHandler("sql", DeleteAlertById)
|
||||||
bus.AddHandler("sql", GetAllAlertQueryHandler)
|
bus.AddHandler("sql", GetAllAlertQueryHandler)
|
||||||
bus.AddHandler("sql", SetAlertState)
|
bus.AddHandler("sql", SetAlertState)
|
||||||
|
bus.AddHandler("sql", SaveExecutionErrorForAlert)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveExecutionErrorForAlert(cmd *m.SaveExecutionErrorCommand) error {
|
||||||
|
return inTransaction(func(sess *xorm.Session) error {
|
||||||
|
alert := m.Alert{}
|
||||||
|
|
||||||
|
if has, err := sess.Id(cmd.AlertId).Get(&alert); err != nil {
|
||||||
|
return err
|
||||||
|
} else if !has {
|
||||||
|
return fmt.Errorf("Could not find alert")
|
||||||
|
}
|
||||||
|
|
||||||
|
alert.ExecutionError = cmd.ExecutionError
|
||||||
|
|
||||||
|
sess.Id(alert.Id).Update(&alert)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAlertById(query *m.GetAlertByIdQuery) error {
|
func GetAlertById(query *m.GetAlertByIdQuery) error {
|
||||||
|
|
|
||||||
|
|
@ -175,5 +175,39 @@ func TestAlertingDataAccess(t *testing.T) {
|
||||||
So(len(query.Result), ShouldEqual, 0)
|
So(len(query.Result), ShouldEqual, 0)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Convey("Can set new execution error", func() {
|
||||||
|
items := []*m.Alert{
|
||||||
|
{
|
||||||
|
PanelId: 1,
|
||||||
|
DashboardId: testDash.Id,
|
||||||
|
Name: "Alerting title",
|
||||||
|
Message: "Alerting message",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := m.SaveAlertsCommand{
|
||||||
|
Alerts: items,
|
||||||
|
DashboardId: testDash.Id,
|
||||||
|
OrgId: 1,
|
||||||
|
UserId: 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveAlerts(&cmd)
|
||||||
|
|
||||||
|
So(SaveExecutionErrorForAlert(&m.SaveExecutionErrorCommand{
|
||||||
|
AlertId: 1,
|
||||||
|
ExecutionError: "the slacker is broken",
|
||||||
|
}), ShouldBeNil)
|
||||||
|
|
||||||
|
Convey("Alerts should be removed", func() {
|
||||||
|
query := &m.GetAlertByIdQuery{Id: 1}
|
||||||
|
err2 := GetAlertById(query)
|
||||||
|
|
||||||
|
So(testDash.Id, ShouldEqual, 1)
|
||||||
|
So(err2, ShouldBeNil)
|
||||||
|
So(query.Result.ExecutionError, ShouldEqual, "the slacker is broken")
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue