From 80121015ea6bf32ffa5132487ff64bfec6508a76 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Wed, 17 Apr 2024 10:29:19 -0700 Subject: [PATCH] [receiver/prometheus] speed up tests by setting skipOffsetting (#32341) Fixes #32298 This PR modifies prometheusreceiver to allow to set the skipOffsetting option on its scrape option config. This option is private, so it can only be set by reflection. This removes the random offset to start added to scraping prometheus metrics, so we may get faster CI builds. --------- Co-authored-by: Alex Boten <223565+codeboten@users.noreply.github.com> Co-authored-by: David Ashpole Co-authored-by: Evan Bradley <11745660+evan-bradley@users.noreply.github.com> --- .../prometheusreceiver/metrics_receiver.go | 18 ++++++++++++++++-- .../metrics_receiver_helper_test.go | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/receiver/prometheusreceiver/metrics_receiver.go b/receiver/prometheusreceiver/metrics_receiver.go index 462365886f4d..021c260f6380 100644 --- a/receiver/prometheusreceiver/metrics_receiver.go +++ b/receiver/prometheusreceiver/metrics_receiver.go @@ -12,9 +12,11 @@ import ( "net/http" "net/url" "os" + "reflect" "regexp" "sync" "time" + "unsafe" "github.com/go-kit/log" "github.com/mitchellh/hashstructure/v2" @@ -54,6 +56,7 @@ type pReceiver struct { httpClient *http.Client registerer prometheus.Registerer unregisterMetrics func() + skipOffsetting bool // for testing only } // New creates a new prometheus.Receiver reference. @@ -299,13 +302,24 @@ func (r *pReceiver) initPrometheusComponents(ctx context.Context, logger log.Log return err } - scrapeManager, err := scrape.NewManager(&scrape.Options{ + opts := &scrape.Options{ PassMetadataInContext: true, ExtraMetrics: r.cfg.ReportExtraScrapeMetrics, HTTPClientOptions: []commonconfig.HTTPClientOption{ commonconfig.WithUserAgent(r.settings.BuildInfo.Command + "/" + r.settings.BuildInfo.Version), }, - }, logger, store, r.registerer) + } + + // for testing only + if r.skipOffsetting { + optsValue := reflect.ValueOf(opts).Elem() + field := optsValue.FieldByName("skipOffsetting") + reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())). + Elem(). + Set(reflect.ValueOf(true)) + } + + scrapeManager, err := scrape.NewManager(opts, logger, store, r.registerer) if err != nil { return err } diff --git a/receiver/prometheusreceiver/metrics_receiver_helper_test.go b/receiver/prometheusreceiver/metrics_receiver_helper_test.go index 41ed19989a0a..d70e22fe5210 100644 --- a/receiver/prometheusreceiver/metrics_receiver_helper_test.go +++ b/receiver/prometheusreceiver/metrics_receiver_helper_test.go @@ -660,6 +660,7 @@ func testComponent(t *testing.T, targets []*testData, alterConfig func(*Config), cms := new(consumertest.MetricsSink) receiver := newPrometheusReceiver(receivertest.NewNopCreateSettings(), config, cms) + receiver.skipOffsetting = true require.NoError(t, receiver.Start(ctx, componenttest.NewNopHost())) // verify state after shutdown is called