Skip to content

Commit d8df87d

Browse files
authored
fix: insights metrics comparison (#10800)
* fix: insights metrics comparison * links
1 parent 6b3f599 commit d8df87d

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

coderd/prometheusmetrics/insights/metricscollector_test.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131

3232
func TestCollectInsights(t *testing.T) {
3333
t.Parallel()
34-
t.Skip("https://github.com/coder/coder/issues/10599#issuecomment-1815954166")
3534

3635
logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
3736
db, ps := dbtestutil.NewDB(t)
@@ -164,7 +163,7 @@ func TestCollectInsights(t *testing.T) {
164163
}
165164
}
166165

167-
return assert.ObjectsAreEqualValues(golden, collected)
166+
return insightsMetricsAreEqual(golden, collected)
168167
}, testutil.WaitMedium, testutil.IntervalFast, "template insights are inconsistent with golden files, got: %v", collected)
169168
}
170169

@@ -219,3 +218,23 @@ func provisionApplyWithAgentAndApp(authToken string) []*proto.Response {
219218
},
220219
}}
221220
}
221+
222+
// insightsMetricsAreEqual patches collected metrics to be used
223+
// in comparison with golden metrics using `assert.ObjectsAreEqualValues`.
224+
// Collected metrics must be patched as sometimes they may slip
225+
// due to timestamp truncation.
226+
// See:
227+
// https://github.com/coder/coder/blob/92ef0baff3b632c52c2335aae1d643a3cc49e26a/coderd/database/dbmem/dbmem.go#L2463
228+
// https://github.com/coder/coder/blob/9b6433e3a7c788b7e87b7d8f539ea111957a0cf1/coderd/database/queries/insights.sql#L246
229+
func insightsMetricsAreEqual(golden, collected map[string]int) bool {
230+
greaterOrEqualKeys := []string{
231+
"coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]",
232+
"coderd_insights_applications_usage_seconds[application_name=SSH,slug=,template_name=golden-template]",
233+
}
234+
for _, key := range greaterOrEqualKeys {
235+
if v, ok := collected[key]; ok && v > golden[key] {
236+
collected[key] = golden[key]
237+
}
238+
}
239+
return assert.ObjectsAreEqualValues(golden, collected)
240+
}

coderd/prometheusmetrics/insights/testdata/insights-metrics.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"coderd_insights_applications_usage_seconds[application_name=Visual Studio Code,slug=,template_name=golden-template]": 0,
44
"coderd_insights_applications_usage_seconds[application_name=Web Terminal,slug=,template_name=golden-template]": 0,
55
"coderd_insights_applications_usage_seconds[application_name=SSH,slug=,template_name=golden-template]": 60,
6-
"coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]": 180,
6+
"coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]": 120,
77
"coderd_insights_parameters[parameter_name=first_parameter,parameter_type=string,parameter_value=Foobar,template_name=golden-template]": 1,
88
"coderd_insights_parameters[parameter_name=second_parameter,parameter_type=bool,parameter_value=true,template_name=golden-template]": 1,
99
"coderd_insights_parameters[parameter_name=third_parameter,parameter_type=number,parameter_value=789,template_name=golden-template]": 1,

0 commit comments

Comments
 (0)