test_rule.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package alerting
  2. import (
  3. "fmt"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/components/simplejson"
  6. m "github.com/grafana/grafana/pkg/models"
  7. )
  8. type AlertTestCommand struct {
  9. Dashboard *simplejson.Json
  10. PanelId int64
  11. OrgId int64
  12. Result *EvalContext
  13. }
  14. func init() {
  15. bus.AddHandler("alerting", handleAlertTestCommand)
  16. }
  17. func handleAlertTestCommand(cmd *AlertTestCommand) error {
  18. dash := m.NewDashboardFromJson(cmd.Dashboard)
  19. extractor := NewDashAlertExtractor(dash, cmd.OrgId)
  20. alerts, err := extractor.GetAlerts()
  21. if err != nil {
  22. return err
  23. }
  24. for _, alert := range alerts {
  25. if alert.PanelId == cmd.PanelId {
  26. rule, err := NewRuleFromDBAlert(alert)
  27. if err != nil {
  28. return err
  29. }
  30. cmd.Result = testAlertRule(rule)
  31. return nil
  32. }
  33. }
  34. return fmt.Errorf("Could not find alert with panel id %d", cmd.PanelId)
  35. }
  36. func testAlertRule(rule *Rule) *EvalContext {
  37. handler := NewEvalHandler()
  38. context := NewEvalContext(rule)
  39. context.IsTestRun = true
  40. handler.Eval(context)
  41. return context
  42. }