eval_handler.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package alerting
  2. import (
  3. "time"
  4. "github.com/grafana/grafana/pkg/log"
  5. "github.com/grafana/grafana/pkg/metrics"
  6. )
  7. type DefaultEvalHandler struct {
  8. log log.Logger
  9. alertJobTimeout time.Duration
  10. }
  11. func NewEvalHandler() *DefaultEvalHandler {
  12. return &DefaultEvalHandler{
  13. log: log.New("alerting.evalHandler"),
  14. alertJobTimeout: time.Second * 5,
  15. }
  16. }
  17. func (e *DefaultEvalHandler) Eval(context *EvalContext) {
  18. firing := true
  19. for _, condition := range context.Rule.Conditions {
  20. cr, err := condition.Eval(context)
  21. if err != nil {
  22. context.Error = err
  23. }
  24. // break if condition could not be evaluated
  25. if context.Error != nil {
  26. break
  27. }
  28. // calculating Firing based on operator
  29. if cr.Operator == "or" {
  30. firing = firing || cr.Firing
  31. } else {
  32. firing = firing && cr.Firing
  33. }
  34. context.EvalMatches = append(context.EvalMatches, cr.EvalMatches...)
  35. }
  36. context.Firing = firing
  37. context.EndTime = time.Now()
  38. elapsedTime := context.EndTime.Sub(context.StartTime) / time.Millisecond
  39. metrics.M_Alerting_Exeuction_Time.Update(elapsedTime)
  40. }