From c104caa05ed7f90e7c2dbaa354788154b7cf65f3 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 20 Nov 2023 17:53:02 +0100 Subject: [PATCH 1/2] fix: insights metrics comparison --- .../insights/metricscollector_test.go | 21 +++++++++++++++++-- .../insights/testdata/insights-metrics.json | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/coderd/prometheusmetrics/insights/metricscollector_test.go b/coderd/prometheusmetrics/insights/metricscollector_test.go index 62a06a143d549..8a0b017dd8fc5 100644 --- a/coderd/prometheusmetrics/insights/metricscollector_test.go +++ b/coderd/prometheusmetrics/insights/metricscollector_test.go @@ -31,7 +31,6 @@ import ( func TestCollectInsights(t *testing.T) { t.Parallel() - t.Skip("https://github.com/coder/coder/issues/10599#issuecomment-1815954166") logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) db, ps := dbtestutil.NewDB(t) @@ -164,7 +163,7 @@ func TestCollectInsights(t *testing.T) { } } - return assert.ObjectsAreEqualValues(golden, collected) + return insightsMetricsAreEqual(golden, collected) }, testutil.WaitMedium, testutil.IntervalFast, "template insights are inconsistent with golden files, got: %v", collected) } @@ -219,3 +218,21 @@ func provisionApplyWithAgentAndApp(authToken string) []*proto.Response { }, }} } + +// insightsMetricsAreEqual patches collected metrics to be used +// in comparison with golden metrics using `assert.ObjectsAreEqualValues`. +// Collected metrics must be patched as sometimes they may slip +// due to timestamp truncation. +// See: https://github.com/coder/coder/blob/92ef0baff3b632c52c2335aae1d643a3cc49e26a/coderd/database/dbmem/dbmem.go#L2463 +func insightsMetricsAreEqual(golden, collected map[string]int) bool { + greaterOrEqualKeys := []string{ + "coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]", + "coderd_insights_applications_usage_seconds[application_name=SSH,slug=,template_name=golden-template]", + } + for _, key := range greaterOrEqualKeys { + if v, ok := collected[key]; ok && v > golden[key] { + collected[key] = golden[key] + } + } + return assert.ObjectsAreEqualValues(golden, collected) +} diff --git a/coderd/prometheusmetrics/insights/testdata/insights-metrics.json b/coderd/prometheusmetrics/insights/testdata/insights-metrics.json index 49a549b83318b..2923565c97de4 100644 --- a/coderd/prometheusmetrics/insights/testdata/insights-metrics.json +++ b/coderd/prometheusmetrics/insights/testdata/insights-metrics.json @@ -3,7 +3,7 @@ "coderd_insights_applications_usage_seconds[application_name=Visual Studio Code,slug=,template_name=golden-template]": 0, "coderd_insights_applications_usage_seconds[application_name=Web Terminal,slug=,template_name=golden-template]": 0, "coderd_insights_applications_usage_seconds[application_name=SSH,slug=,template_name=golden-template]": 60, - "coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]": 180, + "coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]": 120, "coderd_insights_parameters[parameter_name=first_parameter,parameter_type=string,parameter_value=Foobar,template_name=golden-template]": 1, "coderd_insights_parameters[parameter_name=second_parameter,parameter_type=bool,parameter_value=true,template_name=golden-template]": 1, "coderd_insights_parameters[parameter_name=third_parameter,parameter_type=number,parameter_value=789,template_name=golden-template]": 1, From 0fc5f5926f04d6ad68821e9640d7438c6ce34c6c Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 20 Nov 2023 17:57:37 +0100 Subject: [PATCH 2/2] links --- coderd/prometheusmetrics/insights/metricscollector_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/coderd/prometheusmetrics/insights/metricscollector_test.go b/coderd/prometheusmetrics/insights/metricscollector_test.go index 8a0b017dd8fc5..05619a2965336 100644 --- a/coderd/prometheusmetrics/insights/metricscollector_test.go +++ b/coderd/prometheusmetrics/insights/metricscollector_test.go @@ -223,7 +223,9 @@ func provisionApplyWithAgentAndApp(authToken string) []*proto.Response { // in comparison with golden metrics using `assert.ObjectsAreEqualValues`. // Collected metrics must be patched as sometimes they may slip // due to timestamp truncation. -// See: https://github.com/coder/coder/blob/92ef0baff3b632c52c2335aae1d643a3cc49e26a/coderd/database/dbmem/dbmem.go#L2463 +// See: +// https://github.com/coder/coder/blob/92ef0baff3b632c52c2335aae1d643a3cc49e26a/coderd/database/dbmem/dbmem.go#L2463 +// https://github.com/coder/coder/blob/9b6433e3a7c788b7e87b7d8f539ea111957a0cf1/coderd/database/queries/insights.sql#L246 func insightsMetricsAreEqual(golden, collected map[string]int) bool { greaterOrEqualKeys := []string{ "coderd_insights_applications_usage_seconds[application_name=Golden Slug,slug=golden-slug,template_name=golden-template]",