diff --git a/plugins/status/plugin.go b/plugins/status/plugin.go index c457b44cb7..ea7f00f9fd 100644 --- a/plugins/status/plugin.go +++ b/plugins/status/plugin.go @@ -481,7 +481,7 @@ func updatePrometheusMetrics(u *UpdateRequestV1) { } lastSuccessfulActivation.Reset() for _, bundle := range u.Bundles { - if bundle.Code == "" && bundle.ActiveRevision != "" { + if bundle.Code == "" && !bundle.LastSuccessfulActivation.IsZero() { loaded.WithLabelValues(bundle.Name).Inc() } else { failLoad.WithLabelValues(bundle.Name, bundle.Code, bundle.Message).Inc() diff --git a/plugins/status/plugin_go1.17_test.go b/plugins/status/plugin_go1.17_test.go index ce714d4290..e408eac485 100644 --- a/plugins/status/plugin_go1.17_test.go +++ b/plugins/status/plugin_go1.17_test.go @@ -105,3 +105,36 @@ func TestPluginPrometheus(t *testing.T) { t.Fatalf("Unexpected number of plugins (%v), got %v", 1, pluginsStatus) } } + +func TestMetricsBundleWithoutRevision(t *testing.T) { + fixture := newTestFixture(t, nil, func(c *Config) { + c.Prometheus = true + }) + fixture.server.ch = make(chan UpdateRequestV1) + defer fixture.server.stop() + + ctx := context.Background() + + err := fixture.plugin.Start(ctx) + if err != nil { + t.Fatal(err) + } + defer fixture.plugin.Stop(ctx) + <-fixture.server.ch + + status := testStatus() + status.ActiveRevision = "" + + fixture.plugin.BulkUpdateBundleStatus(map[string]*bundle.Status{"bundle": status}) + <-fixture.server.ch + + bundlesLoaded := testutil.CollectAndCount(loaded) + if bundlesLoaded != 1 { + t.Fatalf("Unexpected number of bundle loads (%v), got %v", 1, bundlesLoaded) + } + + bundlesFailedToLoad := testutil.CollectAndCount(failLoad) + if bundlesFailedToLoad != 0 { + t.Fatalf("Unexpected number of bundle fails load (%v), got %v", 0, bundlesFailedToLoad) + } +}