Skip to content

Commit 9a0f010

Browse files
authored
Merge pull request #1611 from LiZhenCheng9527/fix-metricTemplate
Fixed bug where query with no metric template returned an error
2 parents 2957690 + b778013 commit 9a0f010

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

pkg/controller/scheduler_metrics.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,8 @@ func (c *Controller) runMetricChecks(canary *flaggerv1.Canary) bool {
306306
canary.Name, canary.Namespace, metric.Name, val, metric.Threshold)
307307
return false
308308
}
309-
} else if metric.Name != "request-success-rate" && metric.Name != "request-duration" {
310-
c.recordEventErrorf(canary, "Metric query failed for no usable metrics template were configured")
309+
} else if metric.Name != "request-success-rate" && metric.Name != "request-duration" && metric.Query == "" {
310+
c.recordEventErrorf(canary, "Metric query failed for no usable metrics template and query were configured")
311311
return false
312312
}
313313
}

pkg/controller/scheduler_metrics_test.go

+44-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ func TestController_runMetricChecks(t *testing.T) {
8888
t.Run("customVariables", func(t *testing.T) {
8989
ctrl := newDeploymentFixture(nil).ctrl
9090
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
91-
Name: "", TemplateVariables: map[string]string{
91+
Name: "",
92+
TemplateVariables: map[string]string{
9293
"first": "abc",
9394
"second": "def",
9495
},
@@ -139,4 +140,46 @@ func TestController_runMetricChecks(t *testing.T) {
139140
}
140141
assert.Equal(t, true, ctrl.runMetricChecks(canary))
141142
})
143+
144+
t.Run("no metric Template is defined, but a query is specified", func(t *testing.T) {
145+
ctrl := newDeploymentFixture(nil).ctrl
146+
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
147+
Name: "undefined metric",
148+
ThresholdRange: &flaggerv1.CanaryThresholdRange{
149+
Min: toFloatPtr(0),
150+
Max: toFloatPtr(100),
151+
},
152+
Query: ">- sum(logback_events_total{level=\"error\", job=\"some-app\"}) <= bool 0",
153+
}}}
154+
canary := &flaggerv1.Canary{
155+
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
156+
Spec: flaggerv1.CanarySpec{Analysis: analysis},
157+
}
158+
assert.Equal(t, true, ctrl.runMetricChecks(canary))
159+
})
160+
161+
t.Run("both have metric Template and query", func(t *testing.T) {
162+
ctrl := newDeploymentFixture(nil).ctrl
163+
analysis := &flaggerv1.CanaryAnalysis{Metrics: []flaggerv1.CanaryMetric{{
164+
Name: "",
165+
TemplateVariables: map[string]string{
166+
"first": "abc",
167+
"second": "def",
168+
},
169+
TemplateRef: &flaggerv1.CrossNamespaceObjectReference{
170+
Name: "custom-vars",
171+
Namespace: "default",
172+
},
173+
ThresholdRange: &flaggerv1.CanaryThresholdRange{
174+
Min: toFloatPtr(0),
175+
Max: toFloatPtr(100),
176+
},
177+
Query: ">- sum(logback_events_total{level=\"error\", job=\"some-app\"}) <= bool 0",
178+
}}}
179+
canary := &flaggerv1.Canary{
180+
ObjectMeta: metav1.ObjectMeta{Namespace: "default"},
181+
Spec: flaggerv1.CanarySpec{Analysis: analysis},
182+
}
183+
assert.Equal(t, true, ctrl.runMetricChecks(canary))
184+
})
142185
}

0 commit comments

Comments
 (0)