|
@@ -8,6 +8,10 @@ import (
|
|
|
"github.com/grafana/grafana/pkg/metrics"
|
|
"github.com/grafana/grafana/pkg/metrics"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+var (
|
|
|
|
|
+ MaxRetries int = 1
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
type DefaultEvalHandler struct {
|
|
type DefaultEvalHandler struct {
|
|
|
log log.Logger
|
|
log log.Logger
|
|
|
alertJobTimeout time.Duration
|
|
alertJobTimeout time.Duration
|
|
@@ -28,8 +32,24 @@ func (e *DefaultEvalHandler) Eval(context *EvalContext) {
|
|
|
context.Error = fmt.Errorf("Timeout")
|
|
context.Error = fmt.Errorf("Timeout")
|
|
|
context.EndTime = time.Now()
|
|
context.EndTime = time.Now()
|
|
|
e.log.Debug("Job Execution timeout", "alertId", context.Rule.Id)
|
|
e.log.Debug("Job Execution timeout", "alertId", context.Rule.Id)
|
|
|
|
|
+ e.retry(context)
|
|
|
case <-context.DoneChan:
|
|
case <-context.DoneChan:
|
|
|
e.log.Debug("Job Execution done", "timeMs", context.GetDurationMs(), "alertId", context.Rule.Id, "firing", context.Firing)
|
|
e.log.Debug("Job Execution done", "timeMs", context.GetDurationMs(), "alertId", context.Rule.Id, "firing", context.Firing)
|
|
|
|
|
+
|
|
|
|
|
+ if context.Error != nil {
|
|
|
|
|
+ e.retry(context)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (e *DefaultEvalHandler) retry(context *EvalContext) {
|
|
|
|
|
+ e.log.Debug("Retrying eval exeuction", "alertId", context.Rule.Id)
|
|
|
|
|
+
|
|
|
|
|
+ context.RetryCount++
|
|
|
|
|
+ if context.RetryCount > MaxRetries {
|
|
|
|
|
+ context.DoneChan = make(chan bool, 1)
|
|
|
|
|
+ context.CancelChan = make(chan bool, 1)
|
|
|
|
|
+ e.Eval(context)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|