Commit 28029ce4 by bergquist

alerting: support `for` on execution errors and notdata

parent 84eb3bd0
...@@ -118,21 +118,13 @@ func (c *EvalContext) GetRuleUrl() (string, error) { ...@@ -118,21 +118,13 @@ func (c *EvalContext) GetRuleUrl() (string, error) {
return fmt.Sprintf(urlFormat, m.GetFullDashboardUrl(ref.Uid, ref.Slug), c.Rule.PanelId, c.Rule.OrgId), nil 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 { func (c *EvalContext) GetNewState() m.AlertStateType {
if c.Error != nil { ns := getNewStateInternal(c)
c.log.Error("Alert Rule Result Error", if ns != m.AlertStateAlerting || c.Rule.For == 0 {
"ruleId", c.Rule.Id, return ns
"name", c.Rule.Name,
"error", c.Error,
"changing state to", c.Rule.ExecutionErrorState.ToAlertState())
if c.Rule.ExecutionErrorState == m.ExecutionErrorKeepState {
return c.PrevAlertState
}
return c.Rule.ExecutionErrorState.ToAlertState()
} }
if c.Firing && c.Rule.For != 0 {
since := time.Now().Sub(c.Rule.LastStateChange) since := time.Now().Sub(c.Rule.LastStateChange)
if since > c.Rule.For { if since > c.Rule.For {
return m.AlertStateAlerting return m.AlertStateAlerting
...@@ -143,6 +135,20 @@ func (c *EvalContext) GetNewState() m.AlertStateType { ...@@ -143,6 +135,20 @@ func (c *EvalContext) GetNewState() m.AlertStateType {
} }
return m.AlertStatePending return m.AlertStatePending
}
func getNewStateInternal(c *EvalContext) m.AlertStateType {
if c.Error != nil {
c.log.Error("Alert Rule Result Error",
"ruleId", c.Rule.Id,
"name", c.Rule.Name,
"error", c.Error,
"changing state to", c.Rule.ExecutionErrorState.ToAlertState())
if c.Rule.ExecutionErrorState == m.ExecutionErrorKeepState {
return c.PrevAlertState
}
return c.Rule.ExecutionErrorState.ToAlertState()
} }
if c.Firing { if c.Firing {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment