| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package alerting
- import (
- "context"
- "fmt"
- "github.com/grafana/grafana/pkg/bus"
- "github.com/grafana/grafana/pkg/components/simplejson"
- m "github.com/grafana/grafana/pkg/models"
- )
- type AlertTestCommand struct {
- Dashboard *simplejson.Json
- PanelId int64
- OrgId int64
- User *m.SignedInUser
- Result *EvalContext
- }
- func init() {
- bus.AddHandler("alerting", handleAlertTestCommand)
- }
- func handleAlertTestCommand(cmd *AlertTestCommand) error {
- dash := m.NewDashboardFromJson(cmd.Dashboard)
- extractor := NewDashAlertExtractor(dash, cmd.OrgId, cmd.User)
- alerts, err := extractor.GetAlerts()
- if err != nil {
- return err
- }
- for _, alert := range alerts {
- if alert.PanelId == cmd.PanelId {
- rule, err := NewRuleFromDBAlert(alert)
- if err != nil {
- return err
- }
- cmd.Result = testAlertRule(rule)
- return nil
- }
- }
- return fmt.Errorf("Could not find alert with panel id %d", cmd.PanelId)
- }
- func testAlertRule(rule *Rule) *EvalContext {
- handler := NewEvalHandler()
- context := NewEvalContext(context.Background(), rule)
- context.IsTestRun = true
- handler.Eval(context)
- context.Rule.State = context.GetNewState()
- return context
- }
|