eval_context.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package alerting
  2. import (
  3. "time"
  4. "github.com/grafana/grafana/pkg/log"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. type EvalContext struct {
  8. Firing bool
  9. IsTestRun bool
  10. Events []*Event
  11. Logs []*ResultLogEntry
  12. Error error
  13. Description string
  14. StartTime time.Time
  15. EndTime time.Time
  16. Rule *Rule
  17. DoneChan chan bool
  18. CancelChan chan bool
  19. log log.Logger
  20. }
  21. func (a *EvalContext) GetDurationMs() float64 {
  22. return float64(a.EndTime.Nanosecond()-a.StartTime.Nanosecond()) / float64(1000000)
  23. }
  24. func (c *EvalContext) GetColor() string {
  25. if !c.Firing {
  26. return "#36a64f"
  27. }
  28. if c.Rule.Severity == m.AlertSeverityWarning {
  29. return "#fd821b"
  30. } else {
  31. return "#D63232"
  32. }
  33. }
  34. func (c *EvalContext) GetStateText() string {
  35. if !c.Firing {
  36. return "OK"
  37. }
  38. if c.Rule.Severity == m.AlertSeverityWarning {
  39. return "WARNING"
  40. } else {
  41. return "CRITICAL"
  42. }
  43. }
  44. func NewEvalContext(rule *Rule) *EvalContext {
  45. return &EvalContext{
  46. StartTime: time.Now(),
  47. Rule: rule,
  48. Logs: make([]*ResultLogEntry, 0),
  49. Events: make([]*Event, 0),
  50. DoneChan: make(chan bool, 1),
  51. CancelChan: make(chan bool, 1),
  52. log: log.New("alerting.engine"),
  53. }
  54. }