From 7a18c001460855082ef3167efa03964f4aadaf37 Mon Sep 17 00:00:00 2001 From: air-hand <45233435+air-hand@users.noreply.github.com> Date: Wed, 23 Jul 2025 21:02:19 +0900 Subject: [PATCH] feat: implement configurable label filtering with tests --- cmd/ghalistener/metrics/metrics.go | 23 +++++++++++------------ cmd/ghalistener/metrics/metrics_test.go | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/cmd/ghalistener/metrics/metrics.go b/cmd/ghalistener/metrics/metrics.go index 933f639d..7f0c3714 100644 --- a/cmd/ghalistener/metrics/metrics.go +++ b/cmd/ghalistener/metrics/metrics.go @@ -415,6 +415,14 @@ func installMetrics(config v1alpha1.MetricsConfig, reg *prometheus.Registry, log return metrics } +func configuredLabelsOnly(allLabels prometheus.Labels, configuredLabels []string) prometheus.Labels { + labels := make(prometheus.Labels, len(configuredLabels)) + for _, label := range configuredLabels { + labels[label] = allLabels[label] + } + return labels +} + func (e *exporter) ListenAndServe(ctx context.Context) error { e.logger.Info("starting metrics server", "addr", e.srv.Addr) go func() { @@ -432,10 +440,7 @@ func (e *exporter) setGauge(name string, allLabels prometheus.Labels, val float6 if !ok { return } - labels := make(prometheus.Labels, len(m.config.Labels)) - for _, label := range m.config.Labels { - labels[label] = allLabels[label] - } + labels := configuredLabelsOnly(allLabels, m.config.Labels) m.gauge.With(labels).Set(val) } @@ -444,10 +449,7 @@ func (e *exporter) incCounter(name string, allLabels prometheus.Labels) { if !ok { return } - labels := make(prometheus.Labels, len(m.config.Labels)) - for _, label := range m.config.Labels { - labels[label] = allLabels[label] - } + labels := configuredLabelsOnly(allLabels, m.config.Labels) m.counter.With(labels).Inc() } @@ -456,10 +458,7 @@ func (e *exporter) observeHistogram(name string, allLabels prometheus.Labels, va if !ok { return } - labels := make(prometheus.Labels, len(m.config.Labels)) - for _, label := range m.config.Labels { - labels[label] = allLabels[label] - } + labels := configuredLabelsOnly(allLabels, m.config.Labels) m.histogram.With(labels).Observe(val) } diff --git a/cmd/ghalistener/metrics/metrics_test.go b/cmd/ghalistener/metrics/metrics_test.go index 5863ea12..bf91074e 100644 --- a/cmd/ghalistener/metrics/metrics_test.go +++ b/cmd/ghalistener/metrics/metrics_test.go @@ -265,6 +265,26 @@ func TestExporterConfigDefaults(t *testing.T) { assert.Equal(t, want, config) } +func TestConfiguredLabelsOnly(t *testing.T) { + allLabels := prometheus.Labels{ + labelKeyRepository: "test-repo", + labelKeyOrganization: "test-org", + labelKeyJobName: "test-job", + } + + configuredLabels := []string{labelKeyRepository, labelKeyJobName} + + got := configuredLabelsOnly(allLabels, configuredLabels) + + want := prometheus.Labels{ + labelKeyRepository: "test-repo", + labelKeyJobName: "test-job", + } + + assert.Equal(t, want, got) + assert.NotContains(t, got, labelKeyOrganization) +} + func TestCompletedJobAllLabels(t *testing.T) { config := ExporterConfig{ ScaleSetName: "test-scale-set",