From 81ab4e19d98a0d167b986d7b3222ba26d99344af Mon Sep 17 00:00:00 2001 From: Colin Adler Date: Mon, 3 Jun 2024 19:51:30 +0000 Subject: [PATCH] chore: fix `TestServer/Prometheus/DBMetricsDisabled` test flake See: https://github.com/coder/coder/actions/runs/9352137263/job/25739550487#step:5:368 --- cli/server_test.go | 75 +++++++++++-------- coderd/prometheusmetrics/prometheusmetrics.go | 4 +- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/cli/server_test.go b/cli/server_test.go index 3ca57cf0ce162..b163713cff303 100644 --- a/cli/server_test.go +++ b/cli/server_test.go @@ -967,26 +967,32 @@ func TestServer(t *testing.T) { assert.NoError(t, err) // nolint:bodyclose res, err = http.DefaultClient.Do(req) - return err == nil - }, testutil.WaitShort, testutil.IntervalFast) - defer res.Body.Close() - - scanner := bufio.NewScanner(res.Body) - hasActiveUsers := false - for scanner.Scan() { - // This metric is manually registered to be tracked in the server. That's - // why we test it's tracked here. - if strings.HasPrefix(scanner.Text(), "coderd_api_active_users_duration_hour") { - hasActiveUsers = true - continue + if err != nil { + return false } - if strings.HasPrefix(scanner.Text(), "coderd_db_query_latencies_seconds") { - t.Fatal("db metrics should not be tracked when --prometheus-collect-db-metrics is not enabled") + defer res.Body.Close() + + scanner := bufio.NewScanner(res.Body) + hasActiveUsers := false + for scanner.Scan() { + // This metric is manually registered to be tracked in the server. That's + // why we test it's tracked here. + if strings.HasPrefix(scanner.Text(), "coderd_api_active_users_duration_hour") { + hasActiveUsers = true + continue + } + if strings.HasPrefix(scanner.Text(), "coderd_db_query_latencies_seconds") { + t.Fatal("db metrics should not be tracked when --prometheus-collect-db-metrics is not enabled") + } + t.Logf("scanned %s", scanner.Text()) } - t.Logf("scanned %s", scanner.Text()) - } - require.NoError(t, scanner.Err()) - require.True(t, hasActiveUsers) + if scanner.Err() != nil { + t.Logf("scanner err: %s", scanner.Err().Error()) + return false + } + + return hasActiveUsers + }, testutil.WaitShort, testutil.IntervalFast, "didn't find coderd_api_active_users_duration_hour in time") }) t.Run("DBMetricsEnabled", func(t *testing.T) { @@ -1017,20 +1023,25 @@ func TestServer(t *testing.T) { assert.NoError(t, err) // nolint:bodyclose res, err = http.DefaultClient.Do(req) - return err == nil - }, testutil.WaitShort, testutil.IntervalFast) - defer res.Body.Close() - - scanner := bufio.NewScanner(res.Body) - hasDBMetrics := false - for scanner.Scan() { - if strings.HasPrefix(scanner.Text(), "coderd_db_query_latencies_seconds") { - hasDBMetrics = true + if err != nil { + return false } - t.Logf("scanned %s", scanner.Text()) - } - require.NoError(t, scanner.Err()) - require.True(t, hasDBMetrics) + defer res.Body.Close() + + scanner := bufio.NewScanner(res.Body) + hasDBMetrics := false + for scanner.Scan() { + if strings.HasPrefix(scanner.Text(), "coderd_db_query_latencies_seconds") { + hasDBMetrics = true + } + t.Logf("scanned %s", scanner.Text()) + } + if scanner.Err() != nil { + t.Logf("scanner err: %s", scanner.Err().Error()) + return false + } + return hasDBMetrics + }, testutil.WaitShort, testutil.IntervalFast, "didn't find coderd_db_query_latencies_seconds in time") }) }) t.Run("GitHubOAuth", func(t *testing.T) { @@ -1347,7 +1358,7 @@ func TestServer(t *testing.T) { } return lastStat.Size() > 0 }, - testutil.WaitShort, + dur, //nolint:gocritic testutil.IntervalFast, "file at %s should exist, last stat: %+v", fiName, lastStat, diff --git a/coderd/prometheusmetrics/prometheusmetrics.go b/coderd/prometheusmetrics/prometheusmetrics.go index fcc6958f39e84..b9a54633a5b13 100644 --- a/coderd/prometheusmetrics/prometheusmetrics.go +++ b/coderd/prometheusmetrics/prometheusmetrics.go @@ -120,9 +120,9 @@ func Workspaces(ctx context.Context, logger slog.Logger, registerer prometheus.R if errors.Is(err, sql.ErrNoRows) { // clear all series if there are no database entries workspaceLatestBuildTotals.Reset() + } else { + logger.Warn(ctx, "failed to load latest workspace builds", slog.Error(err)) } - - logger.Warn(ctx, "failed to load latest workspace builds", slog.Error(err)) return } jobIDs := make([]uuid.UUID, 0, len(builds))