AlertingNG: manage and evaluate alert definitions via the API (#28377)

* Alerting NG: prototype v2 (WIP)

* Separate eval package

* Modify eval alert definition endpoint

* Disable migration if ngalert is not enabled

* Remove premature test

* Fix lint issues

* Delete obsolete struct

* Apply suggestions from code review

* Update pkg/services/ngalert/ngalert.go

Co-authored-by: Kyle Brandt <kyle@grafana.com>

* Add API endpoint for listing alert definitions

* Introduce index for alert_definition table

* make ds object for expression to avoid panic

* wrap error

* Update pkg/services/ngalert/eval/eval.go

* Swith to backend.DataQuery

* Export TransformWrapper callback

* Fix lint issues

* Update pkg/services/ngalert/ngalert.go

Co-authored-by: Kyle Brandt <kyle@grafana.com>

* Validate alert definitions before storing them

* Introduce AlertQuery

* Add test

* Add QueryType in AlertQuery

* Accept only float64 (seconds) durations

* Apply suggestions from code review

* Get rid of bus

* Do not export symbols

* Fix failing test

* Fix failure due to service initialization order

Introduce MediumHigh service priority and assign it to backendplugin
service

* Fix test

* Apply suggestions from code review

* Fix renamed reference

Co-authored-by: Kyle Brandt <kyle@grafana.com>
This commit is contained in:
Sofia Papagiannaki
2020-11-12 15:11:30 +02:00
committed by GitHub
co-authored by Kyle Brandt
parent a1e80af800
commit 43f580c299
21 changed files with 1558 additions and 411 deletions
+12 -3
View File
@@ -16,6 +16,14 @@ type Descriptor struct {
var services []*Descriptor
func RegisterServiceWithPriority(instance Service, priority Priority) {
services = append(services, &Descriptor{
Name: reflect.TypeOf(instance).Elem().Name(),
Instance: instance,
InitPriority: priority,
})
}
func RegisterService(instance Service) {
services = append(services, &Descriptor{
Name: reflect.TypeOf(instance).Elem().Name(),
@@ -111,7 +119,8 @@ func IsDisabled(srv Service) bool {
type Priority int
const (
High Priority = 100
Medium Priority = 50
Low Priority = 0
High Priority = 100
MediumHigh Priority = 75
Medium Priority = 50
Low Priority = 0
)