Skip to content

Commit

Permalink
feat: PC-13340 Replay on SLO edit/creation - DataSource setting (#559)
Browse files Browse the repository at this point in the history
Abbitilit to trigger replay on SLO edit/creation - DataSource setting
  • Loading branch information
dawidwisn authored Oct 8, 2024
1 parent 0a3b167 commit 1ff0ee1
Show file tree
Hide file tree
Showing 34 changed files with 350 additions and 51 deletions.
13 changes: 8 additions & 5 deletions internal/manifest/v1alpha/examples/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,15 @@ func (a agentExample) Generate() v1alphaAgent.Agent {
agent = a.generateVariant(agent)
typ, _ := agent.Spec.GetType()
if maxDuration, err := v1alpha.GetDataRetrievalMaxDuration(manifest.KindAgent, typ); err == nil {
defaultDuration := v1alpha.HistoricalRetrievalDuration{
Value: ptr(*maxDuration.Value / 2),
Unit: maxDuration.Unit,
}
agent.Spec.HistoricalDataRetrieval = &v1alpha.HistoricalDataRetrieval{
MaxDuration: maxDuration,
DefaultDuration: v1alpha.HistoricalRetrievalDuration{
Value: ptr(*maxDuration.Value / 2),
Unit: maxDuration.Unit,
},
MaxDuration: maxDuration,
DefaultDuration: defaultDuration,
TriggeredBySloCreation: &defaultDuration,
TriggeredBySloEdit: &defaultDuration,
}
}
defaultQueryDelay := v1alpha.GetQueryDelayDefaults()[typ]
Expand Down
13 changes: 8 additions & 5 deletions internal/manifest/v1alpha/examples/direct.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,15 @@ func (d directExample) Generate() v1alphaDirect.Direct {
direct = d.generateVariant(direct)
typ, _ := direct.Spec.GetType()
if maxDuration, err := v1alpha.GetDataRetrievalMaxDuration(manifest.KindDirect, typ); err == nil {
defaultDuration := v1alpha.HistoricalRetrievalDuration{
Value: ptr(*maxDuration.Value / 2),
Unit: maxDuration.Unit,
}
direct.Spec.HistoricalDataRetrieval = &v1alpha.HistoricalDataRetrieval{
MaxDuration: maxDuration,
DefaultDuration: v1alpha.HistoricalRetrievalDuration{
Value: ptr(*maxDuration.Value / 2),
Unit: maxDuration.Unit,
},
MaxDuration: maxDuration,
DefaultDuration: defaultDuration,
TriggeredBySloCreation: &defaultDuration,
TriggeredBySloEdit: &defaultDuration,
}
}
defaultQueryDelay := v1alpha.GetQueryDelayDefaults()[typ]
Expand Down
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/amazon-prometheus.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 1
unit: Second
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/app-dynamics.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 2
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/azure-monitor.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 6
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/azure-prometheus.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 1
unit: Second
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/cloud-watch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ spec:
defaultDuration:
value: 7
unit: Day
triggeredBySloCreation:
value: 7
unit: Day
triggeredBySloEdit:
value: 7
unit: Day
queryDelay:
value: 2
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/datadog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 2
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/dynatrace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 14
unit: Day
triggeredBySloCreation:
value: 14
unit: Day
triggeredBySloEdit:
value: 14
unit: Day
queryDelay:
value: 3
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/google-cloud-monitoring.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 3
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/graphite.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 2
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/honeycomb.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ spec:
defaultDuration:
value: 3
unit: Day
triggeredBySloCreation:
value: 3
unit: Day
triggeredBySloEdit:
value: 3
unit: Day
queryDelay:
value: 6
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/lightstep.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 3
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/logic-monitor.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 3
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/new-relic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 2
unit: Minute
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/prometheus.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 1
unit: Second
6 changes: 6 additions & 0 deletions manifest/v1alpha/agent/examples/splunk.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ spec:
defaultDuration:
value: 15
unit: Day
triggeredBySloCreation:
value: 15
unit: Day
triggeredBySloEdit:
value: 15
unit: Day
queryDelay:
value: 6
unit: Minute
17 changes: 17 additions & 0 deletions manifest/v1alpha/agent/validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,23 @@ var historicalDataRetrievalValidationRule = govy.NewRule(func(spec Spec) error {
errors.Errorf("must be less than or equal to %d %s",
*maxDurationAllowed.Value, maxDurationAllowed.Unit))
}

if spec.HistoricalDataRetrieval.TriggeredBySloCreation != nil &&
spec.HistoricalDataRetrieval.TriggeredBySloCreation.BiggerThan(maxDurationAllowed) {
return govy.NewPropertyError(
"historicalDataRetrieval.triggeredBySloCreation",
spec.HistoricalDataRetrieval.TriggeredBySloCreation,
errors.Errorf("must be less than or equal to %d %s",
*maxDurationAllowed.Value, maxDurationAllowed.Unit))
}
if spec.HistoricalDataRetrieval.TriggeredBySloEdit != nil &&
spec.HistoricalDataRetrieval.TriggeredBySloEdit.BiggerThan(maxDurationAllowed) {
return govy.NewPropertyError(
"historicalDataRetrieval.triggeredBySloEdit",
spec.HistoricalDataRetrieval.TriggeredBySloEdit,
errors.Errorf("must be less than or equal to %d %s",
*maxDurationAllowed.Value, maxDurationAllowed.Unit))
}
return nil
})

Expand Down
67 changes: 47 additions & 20 deletions manifest/v1alpha/agent/validation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,8 +232,10 @@ func TestValidateSpec_HistoricalDataRetrieval(t *testing.T) {
} {
agent := validAgent(v1alpha.Prometheus)
agent.Spec.HistoricalDataRetrieval = &v1alpha.HistoricalDataRetrieval{
MaxDuration: v1alpha.HistoricalRetrievalDuration{Unit: unit, Value: ptr(0)},
DefaultDuration: v1alpha.HistoricalRetrievalDuration{Unit: unit, Value: ptr(0)},
MaxDuration: v1alpha.HistoricalRetrievalDuration{Unit: unit, Value: ptr(0)},
DefaultDuration: v1alpha.HistoricalRetrievalDuration{Unit: unit, Value: ptr(0)},
TriggeredBySloCreation: &v1alpha.HistoricalRetrievalDuration{Unit: unit, Value: ptr(0)},
TriggeredBySloEdit: &v1alpha.HistoricalRetrievalDuration{Unit: unit, Value: ptr(0)},
}
err := validate(agent)
testutils.AssertNoError(t, agent, err)
Expand Down Expand Up @@ -357,8 +359,10 @@ func TestValidateSpec_HistoricalDataRetrieval(t *testing.T) {
} {
agent := validAgent(v1alpha.Prometheus)
agent.Spec.HistoricalDataRetrieval = &v1alpha.HistoricalDataRetrieval{
MaxDuration: v1alpha.HistoricalRetrievalDuration{Value: ptr(10), Unit: unit},
DefaultDuration: v1alpha.HistoricalRetrievalDuration{Value: ptr(10), Unit: unit},
MaxDuration: v1alpha.HistoricalRetrievalDuration{Value: ptr(10), Unit: unit},
DefaultDuration: v1alpha.HistoricalRetrievalDuration{Value: ptr(10), Unit: unit},
TriggeredBySloCreation: &v1alpha.HistoricalRetrievalDuration{Value: ptr(10), Unit: unit},
TriggeredBySloEdit: &v1alpha.HistoricalRetrievalDuration{Value: ptr(10), Unit: unit},
}
err := validate(agent)
testutils.AssertNoError(t, agent, err)
Expand All @@ -375,31 +379,54 @@ func TestValidateSpec_HistoricalDataRetrieval(t *testing.T) {
Value: ptr(10),
Unit: v1alpha.HRDHour,
},
}
err := validate(agent)
testutils.AssertContainsErrors(t, agent, err, 1, testutils.ExpectedError{
Prop: "spec.historicalDataRetrieval",
Message: "historical data retrieval is not supported for Generic Agent",
})
})
t.Run("data retrieval default larger than max", func(t *testing.T) {
agent := validAgent(v1alpha.Prometheus)
agent.Spec.HistoricalDataRetrieval = &v1alpha.HistoricalDataRetrieval{
MaxDuration: v1alpha.HistoricalRetrievalDuration{
Value: ptr(1),
TriggeredBySloCreation: &v1alpha.HistoricalRetrievalDuration{
Value: ptr(10),
Unit: v1alpha.HRDHour,
},
DefaultDuration: v1alpha.HistoricalRetrievalDuration{
Value: ptr(2),
TriggeredBySloEdit: &v1alpha.HistoricalRetrievalDuration{
Value: ptr(10),
Unit: v1alpha.HRDHour,
},
}
err := validate(agent)
testutils.AssertContainsErrors(t, agent, err, 1, testutils.ExpectedError{
Prop: "spec.historicalDataRetrieval.defaultDuration",
Message: "must be less than or equal to 'maxDuration' (1 Hour)",
Prop: "spec.historicalDataRetrieval",
Message: "historical data retrieval is not supported for Generic Agent",
})
})
t.Run("data retrieval default, triggeredBySloCreation and TriggeredBySloEdit larger than max",
func(t *testing.T) {
agent := validAgent(v1alpha.Prometheus)
agent.Spec.HistoricalDataRetrieval = &v1alpha.HistoricalDataRetrieval{
MaxDuration: v1alpha.HistoricalRetrievalDuration{
Value: ptr(1),
Unit: v1alpha.HRDHour,
},
DefaultDuration: v1alpha.HistoricalRetrievalDuration{
Value: ptr(2),
Unit: v1alpha.HRDHour,
},
TriggeredBySloCreation: &v1alpha.HistoricalRetrievalDuration{
Value: ptr(10),
Unit: v1alpha.HRDHour,
},
TriggeredBySloEdit: &v1alpha.HistoricalRetrievalDuration{
Value: ptr(10),
Unit: v1alpha.HRDHour,
},
}
err := validate(agent)
testutils.AssertContainsErrors(t, agent, err, 3, testutils.ExpectedError{
Prop: "spec.historicalDataRetrieval.defaultDuration",
Message: "must be less than or equal to 'maxDuration' (1 Hour)",
}, testutils.ExpectedError{
Prop: "spec.historicalDataRetrieval.triggeredBySloCreation",
Message: "must be less than or equal to 'maxDuration' (1 Hour)",
}, testutils.ExpectedError{
Prop: "spec.historicalDataRetrieval.triggeredBySloEdit",
Message: "must be less than or equal to 'maxDuration' (1 Hour)",
})
})
t.Run("data retrieval max greater than max allowed", func(t *testing.T) {
for _, typ := range v1alpha.DataSourceTypeValues() {
maxDuration, err := v1alpha.GetDataRetrievalMaxDuration(manifest.KindAgent, typ)
Expand Down
Loading

0 comments on commit 1ff0ee1

Please sign in to comment.