From a3393977fad689476f7e42d3e5884548ef7571ee Mon Sep 17 00:00:00 2001 From: Pavel <177363085+pkcll@users.noreply.github.com> Date: Tue, 7 Jul 2026 13:02:02 -0400 Subject: [PATCH] beholder: apply 1s MetricReaderInterval default when config field is zero Partial beholder.Config literals left MetricReaderInterval at zero, which OTel interpreted as its own 60s default instead of Beholder's intended 1s. Centralize effective defaulting inside beholder and record the resolved interval in the config gauge. --- pkg/beholder/client.go | 4 ++-- pkg/beholder/config.go | 7 +++++++ pkg/beholder/config_defaults_test.go | 15 +++++++++++++++ pkg/beholder/httpclient.go | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 pkg/beholder/config_defaults_test.go diff --git a/pkg/beholder/client.go b/pkg/beholder/client.go index cf66c39306..0b0f884fd0 100644 --- a/pkg/beholder/client.go +++ b/pkg/beholder/client.go @@ -434,7 +434,7 @@ func createConfigMetric(meter otelmetric.Meter, cfg Config) (otelmetric.Int64Gau // Metrics config attribute.String( - "metric_reader_interval", cfg.MetricReaderInterval.String()), + "metric_reader_interval", metricReaderInterval(cfg).String()), attribute.String( "metric_compressor", cfg.MetricCompressor), } @@ -544,7 +544,7 @@ func newMeterProvider(cfg Config, resource *sdkresource.Resource, auth Auth, cre } readerOpts := []sdkmetric.PeriodicReaderOption{ - sdkmetric.WithInterval(cfg.MetricReaderInterval), // Default is 10s + sdkmetric.WithInterval(metricReaderInterval(cfg)), // Zero uses Beholder default (1s) } for _, p := range cfg.MetricProducers { readerOpts = append(readerOpts, sdkmetric.WithProducer(p)) diff --git a/pkg/beholder/config.go b/pkg/beholder/config.go index 09ef907ed7..36ea1ed71f 100644 --- a/pkg/beholder/config.go +++ b/pkg/beholder/config.go @@ -163,6 +163,13 @@ func DefaultConfig() Config { } } +func metricReaderInterval(cfg Config) time.Duration { + if cfg.MetricReaderInterval > 0 { + return cfg.MetricReaderInterval + } + return DefaultConfig().MetricReaderInterval +} + func TestDefaultConfig() Config { config := DefaultConfig() // Should be only disabled for testing diff --git a/pkg/beholder/config_defaults_test.go b/pkg/beholder/config_defaults_test.go new file mode 100644 index 0000000000..85270ee886 --- /dev/null +++ b/pkg/beholder/config_defaults_test.go @@ -0,0 +1,15 @@ +package beholder + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestMetricReaderInterval_zeroUsesDefault(t *testing.T) { + t.Parallel() + + assert.Equal(t, time.Second, metricReaderInterval(Config{})) + assert.Equal(t, 5*time.Second, metricReaderInterval(Config{MetricReaderInterval: 5 * time.Second})) +} diff --git a/pkg/beholder/httpclient.go b/pkg/beholder/httpclient.go index 4bc3c78db6..e5ad96bcfa 100644 --- a/pkg/beholder/httpclient.go +++ b/pkg/beholder/httpclient.go @@ -289,7 +289,7 @@ func newHTTPMeterProvider(config Config, resource *sdkresource.Resource, tlsConf sdkmetric.WithReader( sdkmetric.NewPeriodicReader( exporter, - sdkmetric.WithInterval(config.MetricReaderInterval), // Default is 10s + sdkmetric.WithInterval(metricReaderInterval(config)), // Zero uses Beholder default (1s) )), sdkmetric.WithResource(resource), sdkmetric.WithView(config.MetricViews...),