Merge pull request #1582 from LiZhenCheng9527/fix-metric-bug

return an error for missing metric templates
This commit is contained in:
Stefan Prodan
2024-01-30 14:17:14 +02:00
committed by GitHub
4 changed files with 43 additions and 0 deletions
@@ -356,6 +356,10 @@ func newDaemonSetTestCanaryAB() *flaggerv1.Canary {
Min: toFloatPtr(0),
Max: toFloatPtr(500000),
},
TemplateRef: &flaggerv1.CrossNamespaceObjectReference{
Name: "envoy",
Namespace: "default",
},
Interval: "1m",
Query: "fake",
},
@@ -396,6 +396,10 @@ func newDeploymentTestCanaryAB() *flaggerv1.Canary {
Min: toFloatPtr(0),
Max: toFloatPtr(500000),
},
TemplateRef: &flaggerv1.CrossNamespaceObjectReference{
Name: "envoy",
Namespace: "default",
},
Interval: "1m",
Query: "fake",
},
+3
View File
@@ -306,6 +306,9 @@ 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")
return false
}
}
+32
View File
@@ -107,4 +107,36 @@ func TestController_runMetricChecks(t *testing.T) {
}
assert.Equal(t, true, ctrl.runMetricChecks(canary))
})
t.Run("undefined metric", 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),
},
}}}
canary := &flaggerv1.Canary{
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
Spec: flaggerv1.CanarySpec{Analysis: analysis},
}
assert.Equal(t, false, ctrl.runMetricChecks(canary))
})
t.Run("builtinMetric", func(t *testing.T) {
ctrl := newDeploymentFixture(nil).ctrl
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
Name: "request-success-rate",
ThresholdRange: &flaggerv1.CanaryThresholdRange{
Min: toFloatPtr(0),
Max: toFloatPtr(100),
},
}}}
canary := &flaggerv1.Canary{
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
Spec: flaggerv1.CanarySpec{Analysis: analysis},
}
assert.Equal(t, true, ctrl.runMetricChecks(canary))
})
}