From 1f3f91f464fdfa6066ad3f895907bbc3ecd2761c Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Thu, 19 Nov 2020 22:49:49 -0500 Subject: [PATCH] Use Component for start/shutdown of the Scraper (#2187) In a followup PR, after #2186 is merged, use component helper. Signed-off-by: Bogdan Drutu --- .../hostmetrics_receiver_test.go | 13 ++--- receiver/receiverhelper/scraper.go | 15 ++---- receiver/receiverhelper/scrapercontroller.go | 48 +++++-------------- 3 files changed, 25 insertions(+), 51 deletions(-) diff --git a/receiver/hostmetricsreceiver/hostmetrics_receiver_test.go b/receiver/hostmetricsreceiver/hostmetrics_receiver_test.go index e11047e16b7..c605154321a 100644 --- a/receiver/hostmetricsreceiver/hostmetrics_receiver_test.go +++ b/receiver/hostmetricsreceiver/hostmetrics_receiver_test.go @@ -26,6 +26,7 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/zap" + "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/consumer/pdata" @@ -212,9 +213,9 @@ func (m *mockFactory) CreateMetricsScraper(context.Context, *zap.Logger, interna return args.Get(0).(receiverhelper.MetricsScraper), args.Error(1) } -func (m *mockScraper) Name() string { return "" } -func (m *mockScraper) Initialize(context.Context) error { return nil } -func (m *mockScraper) Close(context.Context) error { return nil } +func (m *mockScraper) Name() string { return "" } +func (m *mockScraper) Start(context.Context, component.Host) error { return nil } +func (m *mockScraper) Shutdown(context.Context) error { return nil } func (m *mockScraper) Scrape(context.Context, string) (pdata.MetricSlice, error) { return pdata.NewMetricSlice(), errors.New("err1") } @@ -228,9 +229,9 @@ func (m *mockResourceFactory) CreateResourceMetricsScraper(context.Context, *zap return args.Get(0).(receiverhelper.ResourceMetricsScraper), args.Error(1) } -func (m *mockResourceScraper) Name() string { return "" } -func (m *mockResourceScraper) Initialize(context.Context) error { return nil } -func (m *mockResourceScraper) Close(context.Context) error { return nil } +func (m *mockResourceScraper) Name() string { return "" } +func (m *mockResourceScraper) Start(context.Context, component.Host) error { return nil } +func (m *mockResourceScraper) Shutdown(context.Context) error { return nil } func (m *mockResourceScraper) Scrape(context.Context, string) (pdata.ResourceMetricsSlice, error) { return pdata.NewResourceMetricsSlice(), errors.New("err2") } diff --git a/receiver/receiverhelper/scraper.go b/receiver/receiverhelper/scraper.go index 7eb4dca002f..a21c9061090 100644 --- a/receiver/receiverhelper/scraper.go +++ b/receiver/receiverhelper/scraper.go @@ -17,6 +17,7 @@ package receiverhelper import ( "context" + "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer/pdata" "go.opentelemetry.io/collector/obsreport" ) @@ -39,16 +40,10 @@ type Close func(ctx context.Context) error type ScraperOption func(*baseScraper) type BaseScraper interface { + component.Component + // Name returns the scraper name Name() string - - // Initialize performs any timely initialization tasks such as - // setting up performance counters for initial collection. - Initialize(ctx context.Context) error - - // Close should clean up any unmanaged resources such as - // performance counter handles. - Close(ctx context.Context) error } // MetricsScraper is an interface for scrapers that scrape metrics. @@ -75,14 +70,14 @@ func (b baseScraper) Name() string { return b.name } -func (b baseScraper) Initialize(ctx context.Context) error { +func (b baseScraper) Start(ctx context.Context, _ component.Host) error { if b.initialize == nil { return nil } return b.initialize(ctx) } -func (b baseScraper) Close(ctx context.Context) error { +func (b baseScraper) Shutdown(ctx context.Context) error { if b.close == nil { return nil } diff --git a/receiver/receiverhelper/scrapercontroller.go b/receiver/receiverhelper/scrapercontroller.go index c1082143024..bee489e6dac 100644 --- a/receiver/receiverhelper/scrapercontroller.go +++ b/receiver/receiverhelper/scrapercontroller.go @@ -138,9 +138,11 @@ func NewScraperControllerReceiver( } // Start the receiver, invoked during service start. -func (sc *scraperController) Start(ctx context.Context, _ component.Host) error { - if err := sc.initializeScrapers(ctx); err != nil { - return err +func (sc *scraperController) Start(ctx context.Context, host component.Host) error { + for _, scraper := range sc.resourceMetricScrapers { + if err := scraper.Start(ctx, host); err != nil { + return err + } } sc.initialized = true @@ -157,24 +159,13 @@ func (sc *scraperController) Shutdown(ctx context.Context) error { <-sc.terminated } - var errors []error - - if err := sc.closeScrapers(ctx); err != nil { - errors = append(errors, err) - } - - return componenterror.CombineErrors(errors) -} - -// initializeScrapers initializes all the scrapers -func (sc *scraperController) initializeScrapers(ctx context.Context) error { + var errs []error for _, scraper := range sc.resourceMetricScrapers { - if err := scraper.Initialize(ctx); err != nil { - return err + if err := scraper.Shutdown(ctx); err != nil { + errs = append(errs, err) } } - - return nil + return componenterror.CombineErrors(errs) } // startScraping initiates a ticker that calls Scrape based on the configured @@ -232,19 +223,6 @@ func (sc *scraperController) stopScraping() { close(sc.done) } -// closeScrapers closes all the scrapers -func (sc *scraperController) closeScrapers(ctx context.Context) error { - var errs []error - - for _, scraper := range sc.resourceMetricScrapers { - if err := scraper.Close(ctx); err != nil { - errs = append(errs, err) - } - } - - return componenterror.CombineErrors(errs) -} - var _ ResourceMetricsScraper = (*multiMetricScraper)(nil) type multiMetricScraper struct { @@ -255,19 +233,19 @@ func (mms *multiMetricScraper) Name() string { return "" } -func (mms *multiMetricScraper) Initialize(ctx context.Context) error { +func (mms *multiMetricScraper) Start(ctx context.Context, host component.Host) error { for _, scraper := range mms.scrapers { - if err := scraper.Initialize(ctx); err != nil { + if err := scraper.Start(ctx, host); err != nil { return err } } return nil } -func (mms *multiMetricScraper) Close(ctx context.Context) error { +func (mms *multiMetricScraper) Shutdown(ctx context.Context) error { var errs []error for _, scraper := range mms.scrapers { - if err := scraper.Close(ctx); err != nil { + if err := scraper.Shutdown(ctx); err != nil { errs = append(errs, err) } }