mirror of
https://github.com/fluxcd/flagger.git
synced 2026-04-15 06:57:34 +00:00
Fixed issue where query with no metric template returned an error
Signed-off-by: LiZhenCheng9527 <lizhencheng6@huawei.com>
This commit is contained in:
@@ -306,8 +306,8 @@ func (c *Controller) runMetricChecks(canary *flaggerv1.Canary) bool {
|
||||
canary.Name, canary.Namespace, metric.Name, val, metric.Threshold)
|
||||
return false
|
||||
}
|
||||
} else if metric.Name != "request-success-rate" && metric.Name != "request-duration" {
|
||||
c.recordEventErrorf(canary, "Metric query failed for no usable metrics template were configured")
|
||||
} else if metric.Name != "request-success-rate" && metric.Name != "request-duration" && metric.Query == "" {
|
||||
c.recordEventErrorf(canary, "Metric query failed for no usable metrics template and query were configured")
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,8 @@ func TestController_runMetricChecks(t *testing.T) {
|
||||
t.Run("customVariables", func(t *testing.T) {
|
||||
ctrl := newDeploymentFixture(nil).ctrl
|
||||
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
|
||||
Name: "", TemplateVariables: map[string]string{
|
||||
Name: "",
|
||||
TemplateVariables: map[string]string{
|
||||
"first": "abc",
|
||||
"second": "def",
|
||||
},
|
||||
@@ -139,4 +140,46 @@ func TestController_runMetricChecks(t *testing.T) {
|
||||
}
|
||||
assert.Equal(t, true, ctrl.runMetricChecks(canary))
|
||||
})
|
||||
|
||||
t.Run("no metric Template is defined, but a query is specified", func(t *testing.T) {
|
||||
ctrl := newDeploymentFixture(nil).ctrl
|
||||
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
|
||||
Name: "undefined metric",
|
||||
ThresholdRange: &flaggerv1.CanaryThresholdRange{
|
||||
Min: toFloatPtr(0),
|
||||
Max: toFloatPtr(100),
|
||||
},
|
||||
Query: ">- sum(logback_events_total{level=\"error\", job=\"some-app\"}) <= bool 0",
|
||||
}}}
|
||||
canary := &flaggerv1.Canary{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
|
||||
Spec: flaggerv1.CanarySpec{Analysis: analysis},
|
||||
}
|
||||
assert.Equal(t, true, ctrl.runMetricChecks(canary))
|
||||
})
|
||||
|
||||
t.Run("both have metric Template and query", func(t *testing.T) {
|
||||
ctrl := newDeploymentFixture(nil).ctrl
|
||||
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
|
||||
Name: "",
|
||||
TemplateVariables: map[string]string{
|
||||
"first": "abc",
|
||||
"second": "def",
|
||||
},
|
||||
TemplateRef: &flaggerv1.CrossNamespaceObjectReference{
|
||||
Name: "custom-vars",
|
||||
Namespace: "default",
|
||||
},
|
||||
ThresholdRange: &flaggerv1.CanaryThresholdRange{
|
||||
Min: toFloatPtr(0),
|
||||
Max: toFloatPtr(100),
|
||||
},
|
||||
Query: ">- sum(logback_events_total{level=\"error\", job=\"some-app\"}) <= bool 0",
|
||||
}}}
|
||||
canary := &flaggerv1.Canary{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
|
||||
Spec: flaggerv1.CanarySpec{Analysis: analysis},
|
||||
}
|
||||
assert.Equal(t, true, ctrl.runMetricChecks(canary))
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user