Skip to content

Commit

Permalink
Merge pull request #1611 from LiZhenCheng9527/fix-metricTemplate
Browse files Browse the repository at this point in the history
Fixed bug where query with no metric template returned an error
  • Loading branch information
stefanprodan authored Mar 7, 2024
2 parents 2957690 + b778013 commit 9a0f010
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 3 deletions.
4 changes: 2 additions & 2 deletions pkg/controller/scheduler_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
Expand Down
45 changes: 44 additions & 1 deletion pkg/controller/scheduler_metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
},
Expand Down Expand Up @@ -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))
})
}

0 comments on commit 9a0f010

Please sign in to comment.