mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
parent
0092d10764
commit
984c95de63
@ -9,9 +9,9 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/services/ngalert/eval"
|
|
||||||
apiv1 "github.com/prometheus/client_golang/api/prometheus/v1"
|
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"
|
ngmodels "github.com/grafana/grafana/pkg/services/ngalert/models"
|
||||||
"github.com/grafana/grafana/pkg/services/ngalert/store"
|
"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) {
|
for _, alertState := range srv.manager.GetAll(c.OrgId) {
|
||||||
startsAt := alertState.StartsAt
|
startsAt := alertState.StartsAt
|
||||||
valString := ""
|
valString := ""
|
||||||
if len(alertState.Results) > 0 && alertState.State == eval.Alerting {
|
if alertState.State == eval.Alerting {
|
||||||
valString = alertState.Results[0].EvaluationString
|
valString = alertState.LastEvaluationString
|
||||||
}
|
}
|
||||||
alertResponse.Data.Alerts = append(alertResponse.Data.Alerts, &apimodels.Alert{
|
alertResponse.Data.Alerts = append(alertResponse.Data.Alerts, &apimodels.Alert{
|
||||||
Labels: map[string]string(alertState.Labels),
|
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) {
|
for _, alertState := range srv.manager.GetStatesForRuleUID(c.OrgId, rule.UID) {
|
||||||
activeAt := alertState.StartsAt
|
activeAt := alertState.StartsAt
|
||||||
valString := ""
|
valString := ""
|
||||||
if len(alertState.Results) > 0 && alertState.State == eval.Alerting {
|
if alertState.State == eval.Alerting {
|
||||||
valString = alertState.Results[0].EvaluationString
|
valString = alertState.LastEvaluationString
|
||||||
}
|
}
|
||||||
alert := &apimodels.Alert{
|
alert := &apimodels.Alert{
|
||||||
Labels: map[string]string(alertState.Labels),
|
Labels: map[string]string(alertState.Labels),
|
||||||
|
@ -35,8 +35,8 @@ func stateToPostableAlert(alertState *state.State, appURL *url.URL) *models.Post
|
|||||||
nL := alertState.Labels.Copy()
|
nL := alertState.Labels.Copy()
|
||||||
nA := data.Labels(alertState.Annotations).Copy()
|
nA := data.Labels(alertState.Annotations).Copy()
|
||||||
|
|
||||||
if len(alertState.Results) > 0 {
|
if alertState.LastEvaluationString != "" {
|
||||||
nA["__value_string__"] = alertState.Results[0].EvaluationString
|
nA["__value_string__"] = alertState.LastEvaluationString
|
||||||
}
|
}
|
||||||
|
|
||||||
var urlStr string
|
var urlStr string
|
||||||
|
@ -100,11 +100,7 @@ func Test_stateToPostableAlert(t *testing.T) {
|
|||||||
alertState := randomState(tc.state)
|
alertState := randomState(tc.state)
|
||||||
alertState.Annotations = randomMapOfStrings()
|
alertState.Annotations = randomMapOfStrings()
|
||||||
expectedValueString := util.GenerateShortUID()
|
expectedValueString := util.GenerateShortUID()
|
||||||
alertState.Results = []state.Evaluation{
|
alertState.LastEvaluationString = expectedValueString
|
||||||
{
|
|
||||||
EvaluationString: expectedValueString,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
result := stateToPostableAlert(alertState, appURL)
|
result := stateToPostableAlert(alertState, appURL)
|
||||||
|
|
||||||
|
@ -96,16 +96,16 @@ func (st *Manager) Warm() {
|
|||||||
st.log.Error("error getting cacheId for entry", "msg", err.Error())
|
st.log.Error("error getting cacheId for entry", "msg", err.Error())
|
||||||
}
|
}
|
||||||
stateForEntry := &State{
|
stateForEntry := &State{
|
||||||
AlertRuleUID: entry.RuleUID,
|
AlertRuleUID: entry.RuleUID,
|
||||||
OrgID: entry.RuleOrgID,
|
OrgID: entry.RuleOrgID,
|
||||||
CacheId: cacheId,
|
CacheId: cacheId,
|
||||||
Labels: lbs,
|
Labels: lbs,
|
||||||
State: translateInstanceState(entry.CurrentState),
|
State: translateInstanceState(entry.CurrentState),
|
||||||
Results: []Evaluation{},
|
LastEvaluationString: "",
|
||||||
StartsAt: entry.CurrentStateSince,
|
StartsAt: entry.CurrentStateSince,
|
||||||
EndsAt: entry.CurrentStateEnd,
|
EndsAt: entry.CurrentStateEnd,
|
||||||
LastEvaluationTime: entry.LastEvalTime,
|
LastEvaluationTime: entry.LastEvalTime,
|
||||||
Annotations: ruleForEntry.Annotations,
|
Annotations: ruleForEntry.Annotations,
|
||||||
}
|
}
|
||||||
states = append(states, stateForEntry)
|
states = append(states, stateForEntry)
|
||||||
}
|
}
|
||||||
@ -158,11 +158,11 @@ func (st *Manager) setNextState(ctx context.Context, alertRule *ngModels.AlertRu
|
|||||||
currentState.LastEvaluationTime = result.EvaluatedAt
|
currentState.LastEvaluationTime = result.EvaluatedAt
|
||||||
currentState.EvaluationDuration = result.EvaluationDuration
|
currentState.EvaluationDuration = result.EvaluationDuration
|
||||||
currentState.Results = append(currentState.Results, Evaluation{
|
currentState.Results = append(currentState.Results, Evaluation{
|
||||||
EvaluationTime: result.EvaluatedAt,
|
EvaluationTime: result.EvaluatedAt,
|
||||||
EvaluationState: result.State,
|
EvaluationState: result.State,
|
||||||
EvaluationString: result.EvaluationString,
|
Values: NewEvaluationValues(result.Values),
|
||||||
Values: NewEvaluationValues(result.Values),
|
|
||||||
})
|
})
|
||||||
|
currentState.LastEvaluationString = result.EvaluationString
|
||||||
currentState.TrimResults(alertRule)
|
currentState.TrimResults(alertRule)
|
||||||
oldState := currentState.State
|
oldState := currentState.State
|
||||||
|
|
||||||
|
@ -437,16 +437,6 @@ func TestProcessEvalResults(t *testing.T) {
|
|||||||
},
|
},
|
||||||
State: eval.Pending,
|
State: eval.Pending,
|
||||||
Results: []state.Evaluation{
|
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),
|
EvaluationTime: evaluationTime.Add(30 * time.Second),
|
||||||
EvaluationState: eval.Alerting,
|
EvaluationState: eval.Alerting,
|
||||||
@ -528,16 +518,6 @@ func TestProcessEvalResults(t *testing.T) {
|
|||||||
},
|
},
|
||||||
State: eval.NoData,
|
State: eval.NoData,
|
||||||
Results: []state.Evaluation{
|
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),
|
EvaluationTime: evaluationTime.Add(20 * time.Second),
|
||||||
EvaluationState: eval.Alerting,
|
EvaluationState: eval.Alerting,
|
||||||
@ -1336,11 +1316,6 @@ func TestProcessEvalResults(t *testing.T) {
|
|||||||
},
|
},
|
||||||
State: eval.Alerting,
|
State: eval.Alerting,
|
||||||
Results: []state.Evaluation{
|
Results: []state.Evaluation{
|
||||||
{
|
|
||||||
EvaluationTime: evaluationTime,
|
|
||||||
EvaluationState: eval.Normal,
|
|
||||||
Values: make(map[string]*float64),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
EvaluationTime: evaluationTime.Add(30 * time.Second),
|
EvaluationTime: evaluationTime.Add(30 * time.Second),
|
||||||
EvaluationState: eval.Alerting,
|
EvaluationState: eval.Alerting,
|
||||||
@ -1428,11 +1403,6 @@ func TestProcessEvalResults(t *testing.T) {
|
|||||||
},
|
},
|
||||||
State: eval.NoData,
|
State: eval.NoData,
|
||||||
Results: []state.Evaluation{
|
Results: []state.Evaluation{
|
||||||
{
|
|
||||||
EvaluationTime: evaluationTime,
|
|
||||||
EvaluationState: eval.Normal,
|
|
||||||
Values: make(map[string]*float64),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
EvaluationTime: evaluationTime.Add(30 * time.Second),
|
EvaluationTime: evaluationTime.Add(30 * time.Second),
|
||||||
EvaluationState: eval.Alerting,
|
EvaluationState: eval.Alerting,
|
||||||
|
@ -12,26 +12,26 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type State struct {
|
type State struct {
|
||||||
AlertRuleUID string
|
AlertRuleUID string
|
||||||
OrgID int64
|
OrgID int64
|
||||||
CacheId string
|
CacheId string
|
||||||
State eval.State
|
State eval.State
|
||||||
Resolved bool
|
Resolved bool
|
||||||
Results []Evaluation
|
Results []Evaluation
|
||||||
StartsAt time.Time
|
LastEvaluationString string
|
||||||
EndsAt time.Time
|
StartsAt time.Time
|
||||||
LastEvaluationTime time.Time
|
EndsAt time.Time
|
||||||
EvaluationDuration time.Duration
|
LastEvaluationTime time.Time
|
||||||
LastSentAt time.Time
|
EvaluationDuration time.Duration
|
||||||
Annotations map[string]string
|
LastSentAt time.Time
|
||||||
Labels data.Labels
|
Annotations map[string]string
|
||||||
Error error
|
Labels data.Labels
|
||||||
|
Error error
|
||||||
}
|
}
|
||||||
|
|
||||||
type Evaluation struct {
|
type Evaluation struct {
|
||||||
EvaluationTime time.Time
|
EvaluationTime time.Time
|
||||||
EvaluationState eval.State
|
EvaluationState eval.State
|
||||||
EvaluationString string
|
|
||||||
// Values contains the RefID and value of reduce and math expressions.
|
// Values contains the RefID and value of reduce and math expressions.
|
||||||
// It does not contain values for classic conditions as the values
|
// It does not contain values for classic conditions as the values
|
||||||
// in classic conditions do not have a RefID.
|
// 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) {
|
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 {
|
if numBuckets == 0 {
|
||||||
numBuckets = 10 // keep at least 10 evaluations in the event For is set to 0
|
numBuckets = 10 // keep at least 10 evaluations in the event For is set to 0
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user