Do not store EvaluationString in Evaluation. (#44606)

* do not store evaluation string in Evaluation.
* reduce number of buckets to store for a single state
This commit is contained in:
Yuriy Tseretyan 2022-02-02 13:18:20 -05:00 committed by GitHub
parent 0092d10764
commit 984c95de63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 74 deletions

View File

@ -9,9 +9,9 @@ import (
"strings"
"time"
"github.com/grafana/grafana/pkg/services/ngalert/eval"
apiv1 "github.com/prometheus/client_golang/api/prometheus/v1"
"github.com/grafana/grafana/pkg/services/ngalert/eval"
ngmodels "github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/services/ngalert/store"
@ -40,8 +40,8 @@ func (srv PrometheusSrv) RouteGetAlertStatuses(c *models.ReqContext) response.Re
for _, alertState := range srv.manager.GetAll(c.OrgId) {
startsAt := alertState.StartsAt
valString := ""
if len(alertState.Results) > 0 && alertState.State == eval.Alerting {
valString = alertState.Results[0].EvaluationString
if alertState.State == eval.Alerting {
valString = alertState.LastEvaluationString
}
alertResponse.Data.Alerts = append(alertResponse.Data.Alerts, &apimodels.Alert{
Labels: map[string]string(alertState.Labels),
@ -173,8 +173,8 @@ func (srv PrometheusSrv) RouteGetRuleStatuses(c *models.ReqContext) response.Res
for _, alertState := range srv.manager.GetStatesForRuleUID(c.OrgId, rule.UID) {
activeAt := alertState.StartsAt
valString := ""
if len(alertState.Results) > 0 && alertState.State == eval.Alerting {
valString = alertState.Results[0].EvaluationString
if alertState.State == eval.Alerting {
valString = alertState.LastEvaluationString
}
alert := &apimodels.Alert{
Labels: map[string]string(alertState.Labels),

View File

@ -35,8 +35,8 @@ func stateToPostableAlert(alertState *state.State, appURL *url.URL) *models.Post
nL := alertState.Labels.Copy()
nA := data.Labels(alertState.Annotations).Copy()
if len(alertState.Results) > 0 {
nA["__value_string__"] = alertState.Results[0].EvaluationString
if alertState.LastEvaluationString != "" {
nA["__value_string__"] = alertState.LastEvaluationString
}
var urlStr string

View File

@ -100,11 +100,7 @@ func Test_stateToPostableAlert(t *testing.T) {
alertState := randomState(tc.state)
alertState.Annotations = randomMapOfStrings()
expectedValueString := util.GenerateShortUID()
alertState.Results = []state.Evaluation{
{
EvaluationString: expectedValueString,
},
}
alertState.LastEvaluationString = expectedValueString
result := stateToPostableAlert(alertState, appURL)

View File

@ -101,7 +101,7 @@ func (st *Manager) Warm() {
CacheId: cacheId,
Labels: lbs,
State: translateInstanceState(entry.CurrentState),
Results: []Evaluation{},
LastEvaluationString: "",
StartsAt: entry.CurrentStateSince,
EndsAt: entry.CurrentStateEnd,
LastEvaluationTime: entry.LastEvalTime,
@ -160,9 +160,9 @@ func (st *Manager) setNextState(ctx context.Context, alertRule *ngModels.AlertRu
currentState.Results = append(currentState.Results, Evaluation{
EvaluationTime: result.EvaluatedAt,
EvaluationState: result.State,
EvaluationString: result.EvaluationString,
Values: NewEvaluationValues(result.Values),
})
currentState.LastEvaluationString = result.EvaluationString
currentState.TrimResults(alertRule)
oldState := currentState.State

View File

@ -437,16 +437,6 @@ func TestProcessEvalResults(t *testing.T) {
},
State: eval.Pending,
Results: []state.Evaluation{
{
EvaluationTime: evaluationTime.Add(10 * time.Second),
EvaluationState: eval.Alerting,
Values: make(map[string]*float64),
},
{
EvaluationTime: evaluationTime.Add(20 * time.Second),
EvaluationState: eval.NoData,
Values: make(map[string]*float64),
},
{
EvaluationTime: evaluationTime.Add(30 * time.Second),
EvaluationState: eval.Alerting,
@ -528,16 +518,6 @@ func TestProcessEvalResults(t *testing.T) {
},
State: eval.NoData,
Results: []state.Evaluation{
{
EvaluationTime: evaluationTime,
EvaluationState: eval.Alerting,
Values: make(map[string]*float64),
},
{
EvaluationTime: evaluationTime.Add(10 * time.Second),
EvaluationState: eval.Alerting,
Values: make(map[string]*float64),
},
{
EvaluationTime: evaluationTime.Add(20 * time.Second),
EvaluationState: eval.Alerting,
@ -1336,11 +1316,6 @@ func TestProcessEvalResults(t *testing.T) {
},
State: eval.Alerting,
Results: []state.Evaluation{
{
EvaluationTime: evaluationTime,
EvaluationState: eval.Normal,
Values: make(map[string]*float64),
},
{
EvaluationTime: evaluationTime.Add(30 * time.Second),
EvaluationState: eval.Alerting,
@ -1428,11 +1403,6 @@ func TestProcessEvalResults(t *testing.T) {
},
State: eval.NoData,
Results: []state.Evaluation{
{
EvaluationTime: evaluationTime,
EvaluationState: eval.Normal,
Values: make(map[string]*float64),
},
{
EvaluationTime: evaluationTime.Add(30 * time.Second),
EvaluationState: eval.Alerting,

View File

@ -18,6 +18,7 @@ type State struct {
State eval.State
Resolved bool
Results []Evaluation
LastEvaluationString string
StartsAt time.Time
EndsAt time.Time
LastEvaluationTime time.Time
@ -31,7 +32,6 @@ type State struct {
type Evaluation struct {
EvaluationTime time.Time
EvaluationState eval.State
EvaluationString string
// Values contains the RefID and value of reduce and math expressions.
// It does not contain values for classic conditions as the values
// in classic conditions do not have a RefID.
@ -152,7 +152,7 @@ func (a *State) Equals(b *State) bool {
}
func (a *State) TrimResults(alertRule *ngModels.AlertRule) {
numBuckets := 2 * (int64(alertRule.For.Seconds()) / alertRule.IntervalSeconds)
numBuckets := int64(alertRule.For.Seconds()) / alertRule.IntervalSeconds
if numBuckets == 0 {
numBuckets = 10 // keep at least 10 evaluations in the event For is set to 0
}