From 28029ce4a7e6850e8a5665343507d200e9102831 Mon Sep 17 00:00:00 2001 From: bergquist Date: Thu, 15 Nov 2018 11:04:16 +0100 Subject: [PATCH] alerting: support `for` on execution errors and notdata --- pkg/services/alerting/eval_context.go | 32 ++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/pkg/services/alerting/eval_context.go b/pkg/services/alerting/eval_context.go index 23d3efa8bea..5a4b378ac28 100644 --- a/pkg/services/alerting/eval_context.go +++ b/pkg/services/alerting/eval_context.go @@ -118,7 +118,26 @@ func (c *EvalContext) GetRuleUrl() (string, error) { return fmt.Sprintf(urlFormat, m.GetFullDashboardUrl(ref.Uid, ref.Slug), c.Rule.PanelId, c.Rule.OrgId), nil } +// GetNewState returns the new state from the alert rule evaluation func (c *EvalContext) GetNewState() m.AlertStateType { + ns := getNewStateInternal(c) + if ns != m.AlertStateAlerting || c.Rule.For == 0 { + return ns + } + + since := time.Now().Sub(c.Rule.LastStateChange) + if since > c.Rule.For { + return m.AlertStateAlerting + } + + if c.PrevAlertState == m.AlertStateAlerting { + return m.AlertStateAlerting + } + + return m.AlertStatePending +} + +func getNewStateInternal(c *EvalContext) m.AlertStateType { if c.Error != nil { c.log.Error("Alert Rule Result Error", "ruleId", c.Rule.Id, @@ -132,19 +151,6 @@ func (c *EvalContext) GetNewState() m.AlertStateType { return c.Rule.ExecutionErrorState.ToAlertState() } - if c.Firing && c.Rule.For != 0 { - since := time.Now().Sub(c.Rule.LastStateChange) - if since > c.Rule.For { - return m.AlertStateAlerting - } - - if c.PrevAlertState == m.AlertStateAlerting { - return m.AlertStateAlerting - } - - return m.AlertStatePending - } - if c.Firing { return m.AlertStateAlerting }