From eb560701beec10ee0a8c1dd6389adde456ce051c Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 10:28:28 +0200 Subject: [PATCH 01/25] [scraper] add Profiles support Signed-off-by: Florian Lehner --- .chloggen/scraper-profiles.yaml | 25 +++++++++++ scraper/factory.go | 40 +++++++++++++++-- scraper/go.mod | 9 ++-- scraper/go.sum | 18 ++++---- scraper/profiles.go | 43 ++++++++++++++++++ scraper/profiles_test.go | 78 +++++++++++++++++++++++++++++++++ 6 files changed, 197 insertions(+), 16 deletions(-) create mode 100644 .chloggen/scraper-profiles.yaml create mode 100644 scraper/profiles.go create mode 100644 scraper/profiles_test.go diff --git a/.chloggen/scraper-profiles.yaml b/.chloggen/scraper-profiles.yaml new file mode 100644 index 00000000000..03be601213c --- /dev/null +++ b/.chloggen/scraper-profiles.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: 'enhancement' + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: scraper + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Implement scraper for Profiles. + +# One or more tracking issues or pull requests related to the change +issues: [13915] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [user] diff --git a/scraper/factory.go b/scraper/factory.go index 2fe9a017080..e47130159ed 100644 --- a/scraper/factory.go +++ b/scraper/factory.go @@ -41,12 +41,20 @@ type Factory interface { // this function returns the error [pipeline.ErrSignalNotSupported]. CreateMetrics(ctx context.Context, set Settings, cfg component.Config) (Metrics, error) + // CreateProfiles creates a Profiles scraper based on this config. + // If the scraper type does not support profiles, + // this function returns the error [pipeline.ErrSignalNotSupported]. + CreateProfiles(ctx context.Context, set Settings, cfg component.Config) (Profiles, error) + // LogsStability gets the stability level of the Logs scraper. LogsStability() component.StabilityLevel // MetricsStability gets the stability level of the Metrics scraper. MetricsStability() component.StabilityLevel + // ProfilesStability gets the stability level of the Profiles scraper. + ProfilesStability() component.StabilityLevel + unexportedFactoryFunc() } @@ -68,10 +76,12 @@ func (f factoryOptionFunc) applyOption(o *factory) { type factory struct { cfgType component.Type component.CreateDefaultConfigFunc - createLogsFunc CreateLogsFunc - createMetricsFunc CreateMetricsFunc - logsStabilityLevel component.StabilityLevel - metricsStabilityLevel component.StabilityLevel + createLogsFunc CreateLogsFunc + createMetricsFunc CreateMetricsFunc + createProfilesFunc CreateProfilesFunc + logsStabilityLevel component.StabilityLevel + metricsStabilityLevel component.StabilityLevel + profilesStabilityLevel component.StabilityLevel } func (f *factory) Type() component.Type { @@ -88,6 +98,10 @@ func (f *factory) MetricsStability() component.StabilityLevel { return f.metricsStabilityLevel } +func (f *factory) ProfilesStability() component.StabilityLevel { + return f.profilesStabilityLevel +} + func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Config) (Logs, error) { if f.createLogsFunc == nil { return nil, pipeline.ErrSignalNotSupported @@ -102,12 +116,22 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component return f.createMetricsFunc(ctx, set, cfg) } +func (f *factory) CreateProfiles(ctx context.Context, set Settings, cfg component.Config) (Profiles, error) { + if f.createProfilesFunc == nil { + return nil, pipeline.ErrSignalNotSupported + } + return f.createProfilesFunc(ctx, set, cfg) +} + // CreateLogsFunc is the equivalent of Factory.CreateLogs(). type CreateLogsFunc func(context.Context, Settings, component.Config) (Logs, error) // CreateMetricsFunc is the equivalent of Factory.CreateMetrics(). type CreateMetricsFunc func(context.Context, Settings, component.Config) (Metrics, error) +// CreateProfilesFunc is the equivalent of Factory.CreateProfiles(). +type CreateProfilesFunc func(context.Context, Settings, component.Config) (Profiles, error) + // WithLogs overrides the default "error not supported" implementation for CreateLogs and the default "undefined" stability level. func WithLogs(createLogs CreateLogsFunc, sl component.StabilityLevel) FactoryOption { return factoryOptionFunc(func(o *factory) { @@ -124,6 +148,14 @@ func WithMetrics(createMetrics CreateMetricsFunc, sl component.StabilityLevel) F }) } +// WithProfiles overrides the default "error not supported" implementation for CreateProfiles and the default "undefined" stability level. +func WithProfiles(createProfiles CreateProfilesFunc, sl component.StabilityLevel) FactoryOption { + return factoryOptionFunc(func(o *factory) { + o.profilesStabilityLevel = sl + o.createProfilesFunc = createProfiles + }) +} + // NewFactory returns a Factory. func NewFactory(cfgType component.Type, createDefaultConfig component.CreateDefaultConfigFunc, options ...FactoryOption) Factory { f := &factory{ diff --git a/scraper/go.mod b/scraper/go.mod index 6fa0253acc7..03eaa507454 100644 --- a/scraper/go.mod +++ b/scraper/go.mod @@ -7,6 +7,7 @@ require ( go.opentelemetry.io/collector/component v1.42.0 go.opentelemetry.io/collector/component/componenttest v0.136.0 go.opentelemetry.io/collector/pdata v1.42.0 + go.opentelemetry.io/collector/pdata/pprofile v0.136.1-0.20250926084501-6ccdc890b16f go.opentelemetry.io/collector/pipeline v1.42.0 go.uber.org/goleak v1.3.0 go.uber.org/multierr v1.11.0 @@ -34,10 +35,10 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.41.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.26.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect google.golang.org/grpc v1.75.1 // indirect google.golang.org/protobuf v1.36.9 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/scraper/go.sum b/scraper/go.sum index 85727c9641d..468ca5a4ff1 100644 --- a/scraper/go.sum +++ b/scraper/go.sum @@ -43,6 +43,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/collector/pdata/pprofile v0.136.1-0.20250926084501-6ccdc890b16f h1:Xcyr/cNi2uJaUFFKKZaxkSri+hfUREOpUJ+gf2WDHhw= +go.opentelemetry.io/collector/pdata/pprofile v0.136.1-0.20250926084501-6ccdc890b16f/go.mod h1:vAvrFj+xpwlSH85QFYGKYQ4xc0Lym5pWNRh1hMUH3TY= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= @@ -80,20 +82,20 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -104,8 +106,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= diff --git a/scraper/profiles.go b/scraper/profiles.go new file mode 100644 index 00000000000..02fc259dba4 --- /dev/null +++ b/scraper/profiles.go @@ -0,0 +1,43 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package scraper // import "go.opentelemetry.io/collector/scraper" + +import ( + "context" + + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/pdata/pprofile" +) + +// Profiles is the base interface for profiles scrapers. +type Profiles interface { + component.Component + + // ScrapeProfiles is the base interface to indicate that how should profiles be scraped. + ScrapeProfiles(context.Context) (pprofile.Profiles, error) +} + +// ScrapeProfilesFunc is a helper function. +type ScrapeProfilesFunc ScrapeFunc[pprofile.Profiles] + +func (sf ScrapeProfilesFunc) ScrapeProfiles(ctx context.Context) (pprofile.Profiles, error) { + return sf(ctx) +} + +type profiles struct { + baseScraper + ScrapeProfilesFunc +} + +// NewProfiles creates a new Profiles scraper. +func NewProfiles(scrape ScrapeProfilesFunc, options ...Option) (Profiles, error) { + if scrape == nil { + return nil, errNilFunc + } + bs := &profiles{ + baseScraper: newBaseScraper(options), + ScrapeProfilesFunc: scrape, + } + return bs, nil +} diff --git a/scraper/profiles_test.go b/scraper/profiles_test.go new file mode 100644 index 00000000000..77f10b7e4e5 --- /dev/null +++ b/scraper/profiles_test.go @@ -0,0 +1,78 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package scraper + +import ( + "context" + "errors" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componenttest" + "go.opentelemetry.io/collector/pdata/pprofile" +) + +func TestNewProfiles(t *testing.T) { + mp, err := NewProfiles(newTestScrapeProfilesFunc(nil)) + require.NoError(t, err) + + require.NoError(t, mp.Start(context.Background(), componenttest.NewNopHost())) + md, err := mp.ScrapeProfiles(context.Background()) + require.NoError(t, err) + assert.Equal(t, pprofile.NewProfiles(), md) + require.NoError(t, mp.Shutdown(context.Background())) +} + +func TestNewProfiles_WithOptions(t *testing.T) { + want := errors.New("my_error") + mp, err := NewProfiles(newTestScrapeProfilesFunc(nil), + WithStart(func(context.Context, component.Host) error { return want }), + WithShutdown(func(context.Context) error { return want })) + require.NoError(t, err) + + assert.Equal(t, want, mp.Start(context.Background(), componenttest.NewNopHost())) + assert.Equal(t, want, mp.Shutdown(context.Background())) +} + +func TestNewProfiles_NilRequiredFields(t *testing.T) { + _, err := NewProfiles(nil) + require.Error(t, err) +} + +func TestNewProfiles_ProcessProfilesError(t *testing.T) { + want := errors.New("my_error") + mp, err := NewProfiles(newTestScrapeProfilesFunc(want)) + require.NoError(t, err) + _, err = mp.ScrapeProfiles(context.Background()) + require.ErrorIs(t, err, want) +} + +func TestProfilesConcurrency(t *testing.T) { + mp, err := NewProfiles(newTestScrapeProfilesFunc(nil)) + require.NoError(t, err) + require.NoError(t, mp.Start(context.Background(), componenttest.NewNopHost())) + + var wg sync.WaitGroup + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for j := 0; j < 10000; j++ { + _, errScrape := mp.ScrapeProfiles(context.Background()) + assert.NoError(t, errScrape) + } + }() + } + wg.Wait() + require.NoError(t, mp.Shutdown(context.Background())) +} + +func newTestScrapeProfilesFunc(retError error) ScrapeProfilesFunc { + return func(_ context.Context) (pprofile.Profiles, error) { + return pprofile.NewProfiles(), retError + } +} From 98e90843f846ebc0fbd3fba27e321c7e80b3d20b Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 11:49:55 +0200 Subject: [PATCH 02/25] fixup: introduce xscraper Signed-off-by: Florian Lehner --- .chloggen/scraper-profiles.yaml | 2 +- scraper/factory.go | 40 +------ scraper/go.mod | 1 - scraper/go.sum | 2 - scraper/xscraper/Makefile | 1 + scraper/xscraper/doc.go | 7 ++ scraper/xscraper/factory.go | 77 +++++++++++++ scraper/xscraper/generated_package_test.go | 13 +++ scraper/xscraper/go.mod | 56 ++++++++++ scraper/xscraper/go.sum | 123 +++++++++++++++++++++ scraper/xscraper/metadata.yaml | 7 ++ scraper/{ => xscraper}/profiles.go | 5 +- scraper/{ => xscraper}/profiles_test.go | 3 +- scraper/xscraper/scraper.go | 58 ++++++++++ 14 files changed, 352 insertions(+), 43 deletions(-) create mode 100644 scraper/xscraper/Makefile create mode 100644 scraper/xscraper/doc.go create mode 100644 scraper/xscraper/factory.go create mode 100644 scraper/xscraper/generated_package_test.go create mode 100644 scraper/xscraper/go.mod create mode 100644 scraper/xscraper/go.sum create mode 100644 scraper/xscraper/metadata.yaml rename scraper/{ => xscraper}/profiles.go (84%) rename scraper/{ => xscraper}/profiles_test.go (99%) create mode 100644 scraper/xscraper/scraper.go diff --git a/.chloggen/scraper-profiles.yaml b/.chloggen/scraper-profiles.yaml index 03be601213c..12b3c01674f 100644 --- a/.chloggen/scraper-profiles.yaml +++ b/.chloggen/scraper-profiles.yaml @@ -7,7 +7,7 @@ change_type: 'enhancement' component: scraper # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Implement scraper for Profiles. +note: Implement xscraper for Profiles. # One or more tracking issues or pull requests related to the change issues: [13915] diff --git a/scraper/factory.go b/scraper/factory.go index e47130159ed..2fe9a017080 100644 --- a/scraper/factory.go +++ b/scraper/factory.go @@ -41,20 +41,12 @@ type Factory interface { // this function returns the error [pipeline.ErrSignalNotSupported]. CreateMetrics(ctx context.Context, set Settings, cfg component.Config) (Metrics, error) - // CreateProfiles creates a Profiles scraper based on this config. - // If the scraper type does not support profiles, - // this function returns the error [pipeline.ErrSignalNotSupported]. - CreateProfiles(ctx context.Context, set Settings, cfg component.Config) (Profiles, error) - // LogsStability gets the stability level of the Logs scraper. LogsStability() component.StabilityLevel // MetricsStability gets the stability level of the Metrics scraper. MetricsStability() component.StabilityLevel - // ProfilesStability gets the stability level of the Profiles scraper. - ProfilesStability() component.StabilityLevel - unexportedFactoryFunc() } @@ -76,12 +68,10 @@ func (f factoryOptionFunc) applyOption(o *factory) { type factory struct { cfgType component.Type component.CreateDefaultConfigFunc - createLogsFunc CreateLogsFunc - createMetricsFunc CreateMetricsFunc - createProfilesFunc CreateProfilesFunc - logsStabilityLevel component.StabilityLevel - metricsStabilityLevel component.StabilityLevel - profilesStabilityLevel component.StabilityLevel + createLogsFunc CreateLogsFunc + createMetricsFunc CreateMetricsFunc + logsStabilityLevel component.StabilityLevel + metricsStabilityLevel component.StabilityLevel } func (f *factory) Type() component.Type { @@ -98,10 +88,6 @@ func (f *factory) MetricsStability() component.StabilityLevel { return f.metricsStabilityLevel } -func (f *factory) ProfilesStability() component.StabilityLevel { - return f.profilesStabilityLevel -} - func (f *factory) CreateLogs(ctx context.Context, set Settings, cfg component.Config) (Logs, error) { if f.createLogsFunc == nil { return nil, pipeline.ErrSignalNotSupported @@ -116,22 +102,12 @@ func (f *factory) CreateMetrics(ctx context.Context, set Settings, cfg component return f.createMetricsFunc(ctx, set, cfg) } -func (f *factory) CreateProfiles(ctx context.Context, set Settings, cfg component.Config) (Profiles, error) { - if f.createProfilesFunc == nil { - return nil, pipeline.ErrSignalNotSupported - } - return f.createProfilesFunc(ctx, set, cfg) -} - // CreateLogsFunc is the equivalent of Factory.CreateLogs(). type CreateLogsFunc func(context.Context, Settings, component.Config) (Logs, error) // CreateMetricsFunc is the equivalent of Factory.CreateMetrics(). type CreateMetricsFunc func(context.Context, Settings, component.Config) (Metrics, error) -// CreateProfilesFunc is the equivalent of Factory.CreateProfiles(). -type CreateProfilesFunc func(context.Context, Settings, component.Config) (Profiles, error) - // WithLogs overrides the default "error not supported" implementation for CreateLogs and the default "undefined" stability level. func WithLogs(createLogs CreateLogsFunc, sl component.StabilityLevel) FactoryOption { return factoryOptionFunc(func(o *factory) { @@ -148,14 +124,6 @@ func WithMetrics(createMetrics CreateMetricsFunc, sl component.StabilityLevel) F }) } -// WithProfiles overrides the default "error not supported" implementation for CreateProfiles and the default "undefined" stability level. -func WithProfiles(createProfiles CreateProfilesFunc, sl component.StabilityLevel) FactoryOption { - return factoryOptionFunc(func(o *factory) { - o.profilesStabilityLevel = sl - o.createProfilesFunc = createProfiles - }) -} - // NewFactory returns a Factory. func NewFactory(cfgType component.Type, createDefaultConfig component.CreateDefaultConfigFunc, options ...FactoryOption) Factory { f := &factory{ diff --git a/scraper/go.mod b/scraper/go.mod index 03eaa507454..cf896227f0f 100644 --- a/scraper/go.mod +++ b/scraper/go.mod @@ -7,7 +7,6 @@ require ( go.opentelemetry.io/collector/component v1.42.0 go.opentelemetry.io/collector/component/componenttest v0.136.0 go.opentelemetry.io/collector/pdata v1.42.0 - go.opentelemetry.io/collector/pdata/pprofile v0.136.1-0.20250926084501-6ccdc890b16f go.opentelemetry.io/collector/pipeline v1.42.0 go.uber.org/goleak v1.3.0 go.uber.org/multierr v1.11.0 diff --git a/scraper/go.sum b/scraper/go.sum index 468ca5a4ff1..3ae3b45a4e8 100644 --- a/scraper/go.sum +++ b/scraper/go.sum @@ -43,8 +43,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/collector/pdata/pprofile v0.136.1-0.20250926084501-6ccdc890b16f h1:Xcyr/cNi2uJaUFFKKZaxkSri+hfUREOpUJ+gf2WDHhw= -go.opentelemetry.io/collector/pdata/pprofile v0.136.1-0.20250926084501-6ccdc890b16f/go.mod h1:vAvrFj+xpwlSH85QFYGKYQ4xc0Lym5pWNRh1hMUH3TY= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= diff --git a/scraper/xscraper/Makefile b/scraper/xscraper/Makefile new file mode 100644 index 00000000000..ded7a36092d --- /dev/null +++ b/scraper/xscraper/Makefile @@ -0,0 +1 @@ +include ../../Makefile.Common diff --git a/scraper/xscraper/doc.go b/scraper/xscraper/doc.go new file mode 100644 index 00000000000..b7c428e4886 --- /dev/null +++ b/scraper/xscraper/doc.go @@ -0,0 +1,7 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +//go:generate mdatagen metadata.yaml + +// Package xscraper allows to define pull based receivers that can be configured using the scraperreceiver. +package xscraper // import "go.opentelemetry.io/collector/scraper/xscraper" diff --git a/scraper/xscraper/factory.go b/scraper/xscraper/factory.go new file mode 100644 index 00000000000..212b31b2ea1 --- /dev/null +++ b/scraper/xscraper/factory.go @@ -0,0 +1,77 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package xscraper // import "go.opentelemetry.io/collector/scraper/xscraper" + +import ( + "context" + + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/pipeline" + "go.opentelemetry.io/collector/scraper" +) + +type Factory interface { + scraper.Factory + + // CreateProfiles creates a Profiles scraper based on this config. + // If the scraper type does not support profiles, + // this function returns the error [pipeline.ErrSignalNotSupported]. + CreateProfiles(ctx context.Context, set scraper.Settings, cfg component.Config) (Profiles, error) + + // ProfilesStability gets the stability level of the Profiles scraper. + ProfilesStability() component.StabilityLevel + + unexportedFactoryFunc() +} + +// FactoryOption apply changes to Options. +type FactoryOption interface { + // applyOption applies the option. + applyOption(o *factory) +} + +var _ FactoryOption = (*factoryOptionFunc)(nil) + +// factoryOptionFunc is a FactoryOption created through a function. +type factoryOptionFunc func(*factory) + +func (f factoryOptionFunc) applyOption(o *factory) { + f(o) +} + +type factory struct { + cfgType component.Type + component.CreateDefaultConfigFunc + scraper.Factory + createProfilesFunc CreateProfilesFunc + profilesStabilityLevel component.StabilityLevel +} + +func (f *factory) Type() component.Type { + return f.cfgType +} + +func (f *factory) unexportedFactoryFunc() {} + +func (f *factory) ProfilesStability() component.StabilityLevel { + return f.profilesStabilityLevel +} + +func (f *factory) CreateProfiles(ctx context.Context, set scraper.Settings, cfg component.Config) (Profiles, error) { + if f.createProfilesFunc == nil { + return nil, pipeline.ErrSignalNotSupported + } + return f.createProfilesFunc(ctx, set, cfg) +} + +// CreateProfilesFunc is the equivalent of Factory.CreateProfiles(). +type CreateProfilesFunc func(context.Context, scraper.Settings, component.Config) (Profiles, error) + +// WithProfiles overrides the default "error not supported" implementation for CreateProfiles and the default "undefined" stability level. +func WithProfiles(createProfiles CreateProfilesFunc, sl component.StabilityLevel) FactoryOption { + return factoryOptionFunc(func(o *factory) { + o.profilesStabilityLevel = sl + o.createProfilesFunc = createProfiles + }) +} diff --git a/scraper/xscraper/generated_package_test.go b/scraper/xscraper/generated_package_test.go new file mode 100644 index 00000000000..81b72880614 --- /dev/null +++ b/scraper/xscraper/generated_package_test.go @@ -0,0 +1,13 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package xscraper + +import ( + "testing" + + "go.uber.org/goleak" +) + +func TestMain(m *testing.M) { + goleak.VerifyTestMain(m) +} diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod new file mode 100644 index 00000000000..c344ef485a6 --- /dev/null +++ b/scraper/xscraper/go.mod @@ -0,0 +1,56 @@ +module go.opentelemetry.io/collector/scraper/xscraper + +go 1.25.0 + +require ( + github.com/stretchr/testify v1.11.1 + go.opentelemetry.io/collector/component v1.42.0 + go.opentelemetry.io/collector/component/componenttest v0.136.0 + go.opentelemetry.io/collector/pdata/pprofile v0.136.0 + go.opentelemetry.io/collector/pipeline v1.42.0 + go.opentelemetry.io/collector/scraper v0.136.0 + go.uber.org/goleak v1.3.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/collector/featuregate v1.42.0 // indirect + go.opentelemetry.io/collector/internal/telemetry v0.136.0 // indirect + go.opentelemetry.io/collector/pdata v1.42.0 // indirect + go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/log v0.14.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect + google.golang.org/grpc v1.75.1 // indirect + google.golang.org/protobuf v1.36.9 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) + +replace go.opentelemetry.io/collector/pipeline => ../../pipeline + +replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile + +replace go.opentelemetry.io/collector/component => ../../component + +replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest + +replace go.opentelemetry.io/collector/scraper => ../../scraper diff --git a/scraper/xscraper/go.sum b/scraper/xscraper/go.sum new file mode 100644 index 00000000000..f3e26c5fdab --- /dev/null +++ b/scraper/xscraper/go.sum @@ -0,0 +1,123 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/collector/featuregate v1.42.0 h1:uCVwumVBVex46DsG/fvgiTGuf9f53bALra7vGyKaqFI= +go.opentelemetry.io/collector/featuregate v1.42.0/go.mod h1:d0tiRzVYrytB6LkcYgz2ESFTv7OktRPQe0QEQcPt1L4= +go.opentelemetry.io/collector/internal/telemetry v0.136.0 h1:3TcnxyUFs6jJZeLo5ju3fMWS4lRmIApl9To2XWk922M= +go.opentelemetry.io/collector/internal/telemetry v0.136.0/go.mod h1:dTykH9zv/zOnlyUvqfGIqpaQZhmayW7NssD7TPU4paE= +go.opentelemetry.io/collector/pdata v1.42.0 h1:XEzisp/SNfKDcY4aRU6qrHeLzGypRUdYHjbBqkDFOO4= +go.opentelemetry.io/collector/pdata v1.42.0/go.mod h1:nnOmgf+RI/D5xYWgFPZ5nKuhf2E0Qy9Nx/mxoTvIq3k= +go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= +go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM= +go.opentelemetry.io/otel/log v0.14.0/go.mod h1:5jRG92fEAgx0SU/vFPxmJvhIuDU9E1SUnEQrMlJpOno= +go.opentelemetry.io/otel/log/logtest v0.14.0 h1:BGTqNeluJDK2uIHAY8lRqxjVAYfqgcaTbVk1n3MWe5A= +go.opentelemetry.io/otel/log/logtest v0.14.0/go.mod h1:IuguGt8XVP4XA4d2oEEDMVDBBCesMg8/tSGWDjuKfoA= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= +go.opentelemetry.io/proto/slim/otlp v1.8.0 h1:afcLwp2XOeCbGrjufT1qWyruFt+6C9g5SOuymrSPUXQ= +go.opentelemetry.io/proto/slim/otlp v1.8.0/go.mod h1:Yaa5fjYm1SMCq0hG0x/87wV1MP9H5xDuG/1+AhvBcsI= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.1.0 h1:Uc+elixz922LHx5colXGi1ORbsW8DTIGM+gg+D9V7HE= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.1.0/go.mod h1:VyU6dTWBWv6h9w/+DYgSZAPMabWbPTFTuxp25sM8+s0= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.1.0 h1:i8YpvWGm/Uq1koL//bnbJ/26eV3OrKWm09+rDYo7keU= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.1.0/go.mod h1:pQ70xHY/ZVxNUBPn+qUWPl8nwai87eWdqL3M37lNi9A= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= +google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= +google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/scraper/xscraper/metadata.yaml b/scraper/xscraper/metadata.yaml new file mode 100644 index 00000000000..6b86dca1bc7 --- /dev/null +++ b/scraper/xscraper/metadata.yaml @@ -0,0 +1,7 @@ +type: xscraper +github_project: open-telemetry/opentelemetry-collector + +status: + class: pkg + stability: + development: [profiles] diff --git a/scraper/profiles.go b/scraper/xscraper/profiles.go similarity index 84% rename from scraper/profiles.go rename to scraper/xscraper/profiles.go index 02fc259dba4..c6100e1af6b 100644 --- a/scraper/profiles.go +++ b/scraper/xscraper/profiles.go @@ -1,13 +1,14 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package scraper // import "go.opentelemetry.io/collector/scraper" +package xscraper // import "go.opentelemetry.io/collector/scraper/xscraper" import ( "context" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/pdata/pprofile" + "go.opentelemetry.io/collector/scraper" ) // Profiles is the base interface for profiles scrapers. @@ -19,7 +20,7 @@ type Profiles interface { } // ScrapeProfilesFunc is a helper function. -type ScrapeProfilesFunc ScrapeFunc[pprofile.Profiles] +type ScrapeProfilesFunc scraper.ScrapeFunc[pprofile.Profiles] func (sf ScrapeProfilesFunc) ScrapeProfiles(ctx context.Context) (pprofile.Profiles, error) { return sf(ctx) diff --git a/scraper/profiles_test.go b/scraper/xscraper/profiles_test.go similarity index 99% rename from scraper/profiles_test.go rename to scraper/xscraper/profiles_test.go index 77f10b7e4e5..714defbe1c7 100644 --- a/scraper/profiles_test.go +++ b/scraper/xscraper/profiles_test.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package scraper +package xscraper import ( "context" @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/pdata/pprofile" diff --git a/scraper/xscraper/scraper.go b/scraper/xscraper/scraper.go new file mode 100644 index 00000000000..96e988bdb14 --- /dev/null +++ b/scraper/xscraper/scraper.go @@ -0,0 +1,58 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package xscraper // import "go.opentelemetry.io/collector/scraper/xscraper" + +import ( + "context" + "errors" + + "go.opentelemetry.io/collector/component" +) + +var errNilFunc = errors.New("nil scrape func") + +// ScrapeFunc scrapes data. +type ScrapeFunc[T any] func(context.Context) (T, error) + +// Option apply changes to internal options. +type Option interface { + apply(*baseScraper) +} + +type scraperOptionFunc func(*baseScraper) + +func (of scraperOptionFunc) apply(e *baseScraper) { + of(e) +} + +// WithStart sets the function that will be called on startup. +func WithStart(start component.StartFunc) Option { + return scraperOptionFunc(func(o *baseScraper) { + o.StartFunc = start + }) +} + +// WithShutdown sets the function that will be called on shutdown. +func WithShutdown(shutdown component.ShutdownFunc) Option { + return scraperOptionFunc(func(o *baseScraper) { + o.ShutdownFunc = shutdown + }) +} + +type baseScraper struct { + component.StartFunc + component.ShutdownFunc +} + +// newBaseScraper returns the internal settings starting from the default and applying all options. +func newBaseScraper(options []Option) baseScraper { + // Start from the default options: + bs := baseScraper{} + + for _, op := range options { + op.apply(&bs) + } + + return bs +} From 5fd8efd22e17d3cc8d0e02e2b576bf0e2a6c0b02 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 12:19:58 +0200 Subject: [PATCH 03/25] align Go version in go.mod Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index c344ef485a6..873448675c9 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -1,6 +1,6 @@ module go.opentelemetry.io/collector/scraper/xscraper -go 1.25.0 +go 1.24.0 require ( github.com/stretchr/testify v1.11.1 From 845cda1891c89e57d776a4fd87d4edfb68a404f4 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 12:23:44 +0200 Subject: [PATCH 04/25] make gotidy Signed-off-by: Florian Lehner --- cmd/mdatagen/go.mod | 4 ++-- cmd/mdatagen/go.sum | 8 ++++---- scraper/scraperhelper/go.mod | 8 ++++---- scraper/scraperhelper/go.sum | 16 ++++++++-------- scraper/scrapertest/go.mod | 8 ++++---- scraper/scrapertest/go.sum | 16 ++++++++-------- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/cmd/mdatagen/go.mod b/cmd/mdatagen/go.mod index f8e397aea46..ca7971bacf0 100644 --- a/cmd/mdatagen/go.mod +++ b/cmd/mdatagen/go.mod @@ -72,9 +72,9 @@ require ( go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/net v0.43.0 // indirect + golang.org/x/net v0.44.0 // indirect golang.org/x/sys v0.36.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect google.golang.org/grpc v1.75.1 // indirect google.golang.org/protobuf v1.36.9 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/cmd/mdatagen/go.sum b/cmd/mdatagen/go.sum index e524fd1917c..5275d488237 100644 --- a/cmd/mdatagen/go.sum +++ b/cmd/mdatagen/go.sum @@ -104,8 +104,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -128,8 +128,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= diff --git a/scraper/scraperhelper/go.mod b/scraper/scraperhelper/go.mod index 33f5f4f49cf..39a86d06a90 100644 --- a/scraper/scraperhelper/go.mod +++ b/scraper/scraperhelper/go.mod @@ -45,10 +45,10 @@ require ( go.opentelemetry.io/collector/receiver/xreceiver v0.136.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect - golang.org/x/net v0.41.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.26.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect google.golang.org/grpc v1.75.1 // indirect google.golang.org/protobuf v1.36.9 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/scraper/scraperhelper/go.sum b/scraper/scraperhelper/go.sum index 85727c9641d..3ae3b45a4e8 100644 --- a/scraper/scraperhelper/go.sum +++ b/scraper/scraperhelper/go.sum @@ -80,20 +80,20 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -104,8 +104,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= diff --git a/scraper/scrapertest/go.mod b/scraper/scrapertest/go.mod index 36241cef33e..50103b3c6ff 100644 --- a/scraper/scrapertest/go.mod +++ b/scraper/scrapertest/go.mod @@ -31,10 +31,10 @@ require ( go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.41.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.26.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect google.golang.org/grpc v1.75.1 // indirect google.golang.org/protobuf v1.36.9 // indirect ) diff --git a/scraper/scrapertest/go.sum b/scraper/scrapertest/go.sum index 1e467bc1058..e99bebab99f 100644 --- a/scraper/scrapertest/go.sum +++ b/scraper/scrapertest/go.sum @@ -74,20 +74,20 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -98,8 +98,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= From 5d707f3dd3b7f138893e565ebd63eb4d834709f2 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 12:25:06 +0200 Subject: [PATCH 05/25] fixup: add xscraper to spell Signed-off-by: Florian Lehner --- .github/workflows/utils/cspell.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/utils/cspell.json b/.github/workflows/utils/cspell.json index 5f66e79d8e8..785647d896f 100644 --- a/.github/workflows/utils/cspell.json +++ b/.github/workflows/utils/cspell.json @@ -497,6 +497,7 @@ "xprocessor", "xprocessorhelper", "xreceiver", + "xscraper", "yamlmapprovider", "yamlprovider", "yamls", From e249f8c11a5f63b81365261fb615ee5a0edabc92 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 12:26:33 +0200 Subject: [PATCH 06/25] add Codeowner Signed-off-by: Florian Lehner --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4461dba129c..92a324a3e07 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -57,6 +57,7 @@ receiver/otlpreceiver/ @open-telemetry/collector-approvers receiver/receiverhelper/ @open-telemetry/collector-approvers receiver/xreceiver/ @open-telemetry/collector-approvers @mx-psi @dmathieu scraper/ @open-telemetry/collector-approvers +scraper/xscraper @open-telemetry/collector-approvers scraper/scraperhelper/ @open-telemetry/collector-approvers service/ @open-telemetry/collector-approvers service/internal/graph/ @open-telemetry/collector-approvers From ef6149de5e1ae355f1215b4b22f65f9255918ebf Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 14:00:19 +0200 Subject: [PATCH 07/25] make crosslink Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index 873448675c9..7725119ffb7 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -54,3 +54,9 @@ replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest replace go.opentelemetry.io/collector/scraper => ../../scraper + +replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry + +replace go.opentelemetry.io/collector/featuregate => ../../featuregate + +replace go.opentelemetry.io/collector/pdata => ../../pdata From 8fcbaa8bf12d8f95d04f073d9d2e678005f0a2a8 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 14:02:52 +0200 Subject: [PATCH 08/25] drop: unexportedFactoryFunc Signed-off-by: Florian Lehner --- scraper/xscraper/factory.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scraper/xscraper/factory.go b/scraper/xscraper/factory.go index 212b31b2ea1..57bdd39593a 100644 --- a/scraper/xscraper/factory.go +++ b/scraper/xscraper/factory.go @@ -21,8 +21,6 @@ type Factory interface { // ProfilesStability gets the stability level of the Profiles scraper. ProfilesStability() component.StabilityLevel - - unexportedFactoryFunc() } // FactoryOption apply changes to Options. @@ -52,8 +50,6 @@ func (f *factory) Type() component.Type { return f.cfgType } -func (f *factory) unexportedFactoryFunc() {} - func (f *factory) ProfilesStability() component.StabilityLevel { return f.profilesStabilityLevel } From a7883659a1ab81bd4d3c0675f26865aa14ad8dd0 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 14:05:47 +0200 Subject: [PATCH 09/25] make gotidy Signed-off-by: Florian Lehner --- scraper/xscraper/go.sum | 6 ------ 1 file changed, 6 deletions(-) diff --git a/scraper/xscraper/go.sum b/scraper/xscraper/go.sum index f3e26c5fdab..3ae3b45a4e8 100644 --- a/scraper/xscraper/go.sum +++ b/scraper/xscraper/go.sum @@ -43,12 +43,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/collector/featuregate v1.42.0 h1:uCVwumVBVex46DsG/fvgiTGuf9f53bALra7vGyKaqFI= -go.opentelemetry.io/collector/featuregate v1.42.0/go.mod h1:d0tiRzVYrytB6LkcYgz2ESFTv7OktRPQe0QEQcPt1L4= -go.opentelemetry.io/collector/internal/telemetry v0.136.0 h1:3TcnxyUFs6jJZeLo5ju3fMWS4lRmIApl9To2XWk922M= -go.opentelemetry.io/collector/internal/telemetry v0.136.0/go.mod h1:dTykH9zv/zOnlyUvqfGIqpaQZhmayW7NssD7TPU4paE= -go.opentelemetry.io/collector/pdata v1.42.0 h1:XEzisp/SNfKDcY4aRU6qrHeLzGypRUdYHjbBqkDFOO4= -go.opentelemetry.io/collector/pdata v1.42.0/go.mod h1:nnOmgf+RI/D5xYWgFPZ5nKuhf2E0Qy9Nx/mxoTvIq3k= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= From 2f63e055a7be1ff51238dcc3e6495fdb84aed031 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 14:14:15 +0200 Subject: [PATCH 10/25] make multimod-verify Signed-off-by: Florian Lehner --- versions.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/versions.yaml b/versions.yaml index 92512f91d08..18e6f000c04 100644 --- a/versions.yaml +++ b/versions.yaml @@ -91,6 +91,7 @@ module-sets: - go.opentelemetry.io/collector/scraper - go.opentelemetry.io/collector/scraper/scraperhelper - go.opentelemetry.io/collector/scraper/scrapertest + - go.opentelemetry.io/collector/scraper/xscraper - go.opentelemetry.io/collector/service - go.opentelemetry.io/collector/service/hostcapabilities - go.opentelemetry.io/collector/filter From 29c34fd8e2fa2e1995c3e050220ad75749e3d203 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 14:45:09 +0200 Subject: [PATCH 11/25] add test Signed-off-by: Florian Lehner --- scraper/xscraper/factory.go | 44 ++++++++++++++++++++++++-------- scraper/xscraper/factory_test.go | 34 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 scraper/xscraper/factory_test.go diff --git a/scraper/xscraper/factory.go b/scraper/xscraper/factory.go index 57bdd39593a..a848c9635b1 100644 --- a/scraper/xscraper/factory.go +++ b/scraper/xscraper/factory.go @@ -26,30 +26,30 @@ type Factory interface { // FactoryOption apply changes to Options. type FactoryOption interface { // applyOption applies the option. - applyOption(o *factory) + applyOption(o *factoryOpts) +} + +type factoryOpts struct { + opts []scraper.FactoryOption + *factory } var _ FactoryOption = (*factoryOptionFunc)(nil) // factoryOptionFunc is a FactoryOption created through a function. -type factoryOptionFunc func(*factory) +type factoryOptionFunc func(*factoryOpts) -func (f factoryOptionFunc) applyOption(o *factory) { +func (f factoryOptionFunc) applyOption(o *factoryOpts) { f(o) } type factory struct { - cfgType component.Type - component.CreateDefaultConfigFunc scraper.Factory + createProfilesFunc CreateProfilesFunc profilesStabilityLevel component.StabilityLevel } -func (f *factory) Type() component.Type { - return f.cfgType -} - func (f *factory) ProfilesStability() component.StabilityLevel { return f.profilesStabilityLevel } @@ -61,13 +61,37 @@ func (f *factory) CreateProfiles(ctx context.Context, set scraper.Settings, cfg return f.createProfilesFunc(ctx, set, cfg) } +// WithLogs overrides the default "error not supported" implementation for CreateLogs and the default "undefined" stability level. +func WithLogs(createLogs scraper.CreateLogsFunc, sl component.StabilityLevel) FactoryOption { + return factoryOptionFunc(func(o *factoryOpts) { + o.opts = append(o.opts, scraper.WithLogs(createLogs, sl)) + }) +} + +// WithMetrics overrides the default "error not supported" implementation for CreateMetrics and the default "undefined" stability level. +func WithMetrics(createMetrics scraper.CreateMetricsFunc, sl component.StabilityLevel) FactoryOption { + return factoryOptionFunc(func(o *factoryOpts) { + o.opts = append(o.opts, scraper.WithMetrics(createMetrics, sl)) + }) +} + // CreateProfilesFunc is the equivalent of Factory.CreateProfiles(). type CreateProfilesFunc func(context.Context, scraper.Settings, component.Config) (Profiles, error) // WithProfiles overrides the default "error not supported" implementation for CreateProfiles and the default "undefined" stability level. func WithProfiles(createProfiles CreateProfilesFunc, sl component.StabilityLevel) FactoryOption { - return factoryOptionFunc(func(o *factory) { + return factoryOptionFunc(func(o *factoryOpts) { o.profilesStabilityLevel = sl o.createProfilesFunc = createProfiles }) } + +// NewFactory returns a Factory. +func NewFactory(cfgType component.Type, createDefaultConfig component.CreateDefaultConfigFunc, options ...FactoryOption) Factory { + opts := factoryOpts{factory: &factory{}} + for _, opt := range options { + opt.applyOption(&opts) + } + opts.Factory = scraper.NewFactory(cfgType, createDefaultConfig, opts.opts...) + return opts.factory +} diff --git a/scraper/xscraper/factory_test.go b/scraper/xscraper/factory_test.go new file mode 100644 index 00000000000..fb99fc17ac6 --- /dev/null +++ b/scraper/xscraper/factory_test.go @@ -0,0 +1,34 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package xscraper + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/scraper" +) + +func TestNewFactoryWithOptions(t *testing.T) { + testType := component.MustNewType("test") + defaultCfg := struct{}{} + f := NewFactory( + testType, + func() component.Config { return &defaultCfg }, + WithProfiles(createProfiles, component.StabilityLevelDevelopment)) + assert.Equal(t, testType, f.Type()) + assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) + + assert.Equal(t, component.StabilityLevelDevelopment, f.ProfilesStability()) + _, err := f.CreateProfiles(context.Background(), scraper.Settings{}, &defaultCfg) + require.NoError(t, err) +} + +func createProfiles(context.Context, scraper.Settings, component.Config) (Profiles, error) { + return NewProfiles(newTestScrapeProfilesFunc(nil)) +} From 6296d71d34f31da3e4048024baadc7236133ff91 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 15:48:16 +0200 Subject: [PATCH 12/25] extend tests Signed-off-by: Florian Lehner --- scraper/xscraper/factory_test.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/scraper/xscraper/factory_test.go b/scraper/xscraper/factory_test.go index fb99fc17ac6..00ee144ba4e 100644 --- a/scraper/xscraper/factory_test.go +++ b/scraper/xscraper/factory_test.go @@ -11,6 +11,8 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/pdata/plog" + "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/scraper" ) @@ -20,6 +22,8 @@ func TestNewFactoryWithOptions(t *testing.T) { f := NewFactory( testType, func() component.Config { return &defaultCfg }, + WithLogs(createLogs, component.StabilityLevelAlpha), + WithMetrics(createMetrics, component.StabilityLevelAlpha), WithProfiles(createProfiles, component.StabilityLevelDevelopment)) assert.Equal(t, testType, f.Type()) assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) @@ -27,8 +31,36 @@ func TestNewFactoryWithOptions(t *testing.T) { assert.Equal(t, component.StabilityLevelDevelopment, f.ProfilesStability()) _, err := f.CreateProfiles(context.Background(), scraper.Settings{}, &defaultCfg) require.NoError(t, err) + + assert.Equal(t, component.StabilityLevelAlpha, f.LogsStability()) + _, err = f.CreateLogs(context.Background(), scraper.Settings{}, &defaultCfg) + require.NoError(t, err) + + assert.Equal(t, component.StabilityLevelAlpha, f.MetricsStability()) + _, err = f.CreateMetrics(context.Background(), scraper.Settings{}, &defaultCfg) + require.NoError(t, err) } func createProfiles(context.Context, scraper.Settings, component.Config) (Profiles, error) { return NewProfiles(newTestScrapeProfilesFunc(nil)) } + +func createLogs(context.Context, scraper.Settings, component.Config) (scraper.Logs, error) { + return scraper.NewLogs(newTestScrapeLogsFunc(nil)) +} + +func createMetrics(context.Context, scraper.Settings, component.Config) (scraper.Metrics, error) { + return scraper.NewMetrics(newTestScrapeMetricsFunc(nil)) +} + +func newTestScrapeLogsFunc(retError error) scraper.ScrapeLogsFunc { + return func(_ context.Context) (plog.Logs, error) { + return plog.NewLogs(), retError + } +} + +func newTestScrapeMetricsFunc(retError error) scraper.ScrapeMetricsFunc { + return func(_ context.Context) (pmetric.Metrics, error) { + return pmetric.NewMetrics(), retError + } +} From 7bb49a70df351bfc247422b674fd8468407f06f6 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 15:51:10 +0200 Subject: [PATCH 13/25] make gotidy Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index 7725119ffb7..0ea844a98c0 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -6,6 +6,7 @@ require ( github.com/stretchr/testify v1.11.1 go.opentelemetry.io/collector/component v1.42.0 go.opentelemetry.io/collector/component/componenttest v0.136.0 + go.opentelemetry.io/collector/pdata v1.42.0 go.opentelemetry.io/collector/pdata/pprofile v0.136.0 go.opentelemetry.io/collector/pipeline v1.42.0 go.opentelemetry.io/collector/scraper v0.136.0 @@ -26,7 +27,6 @@ require ( go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/featuregate v1.42.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.136.0 // indirect - go.opentelemetry.io/collector/pdata v1.42.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect From 00b35df325eccbba4594f7b860d0d706863a1572 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Mon, 29 Sep 2025 16:30:35 +0200 Subject: [PATCH 14/25] extend tests Signed-off-by: Florian Lehner --- scraper/xscraper/factory_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/scraper/xscraper/factory_test.go b/scraper/xscraper/factory_test.go index 00ee144ba4e..35cabef6f52 100644 --- a/scraper/xscraper/factory_test.go +++ b/scraper/xscraper/factory_test.go @@ -11,11 +11,33 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" + "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/scraper" ) +var testType = component.MustNewType("test") + +func nopSettings() scraper.Settings { + return scraper.Settings{ + ID: component.NewID(testType), + TelemetrySettings: componenttest.NewNopTelemetrySettings(), + } +} + +func TestNewFactory(t *testing.T) { + defaultCfg := struct{}{} + f := NewFactory( + testType, + func() component.Config { return &defaultCfg }) + assert.Equal(t, testType, f.Type()) + assert.EqualValues(t, &defaultCfg, f.CreateDefaultConfig()) + _, err := f.CreateProfiles(context.Background(), nopSettings(), &defaultCfg) + require.ErrorIs(t, err, pipeline.ErrSignalNotSupported) +} + func TestNewFactoryWithOptions(t *testing.T) { testType := component.MustNewType("test") defaultCfg := struct{}{} From 47ebbdc653a98bcbe63675e5262f93033910c024 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 14 Oct 2025 14:36:42 +0200 Subject: [PATCH 15/25] add codeowners Signed-off-by: Florian Lehner --- scraper/xscraper/metadata.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scraper/xscraper/metadata.yaml b/scraper/xscraper/metadata.yaml index 6b86dca1bc7..9097af6f76e 100644 --- a/scraper/xscraper/metadata.yaml +++ b/scraper/xscraper/metadata.yaml @@ -3,5 +3,9 @@ github_project: open-telemetry/opentelemetry-collector status: class: pkg + codeowners: + active: + - dmathieu + - florianl stability: development: [profiles] From 4d3b1a892a3f07a9d57663925a4e4db834bf8c6c Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 14 Oct 2025 14:38:58 +0200 Subject: [PATCH 16/25] fix codespell Signed-off-by: Florian Lehner --- .github/workflows/utils/cspell.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/utils/cspell.json b/.github/workflows/utils/cspell.json index eb8a6c835dc..9844cdc8228 100644 --- a/.github/workflows/utils/cspell.json +++ b/.github/workflows/utils/cspell.json @@ -217,6 +217,7 @@ "fileprovider", "filterprocessor", "filterset", + "florianl", "fluentbit", "fluentforward", "forwardconnector", From cfa8743c9f46be5cdd11fcd3525101ffbce8423c Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 14 Oct 2025 15:24:16 +0200 Subject: [PATCH 17/25] go mod tidy Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 16 ++++++++-------- scraper/xscraper/go.sum | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index 0ea844a98c0..f5db5da1d54 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -4,11 +4,11 @@ go 1.24.0 require ( github.com/stretchr/testify v1.11.1 - go.opentelemetry.io/collector/component v1.42.0 - go.opentelemetry.io/collector/component/componenttest v0.136.0 - go.opentelemetry.io/collector/pdata v1.42.0 + go.opentelemetry.io/collector/component v1.43.0 + go.opentelemetry.io/collector/component/componenttest v0.137.0 + go.opentelemetry.io/collector/pdata v1.43.0 go.opentelemetry.io/collector/pdata/pprofile v0.136.0 - go.opentelemetry.io/collector/pipeline v1.42.0 + go.opentelemetry.io/collector/pipeline v1.43.0 go.opentelemetry.io/collector/scraper v0.136.0 go.uber.org/goleak v1.3.0 ) @@ -25,8 +25,8 @@ require ( github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/featuregate v1.42.0 // indirect - go.opentelemetry.io/collector/internal/telemetry v0.136.0 // indirect + go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect @@ -40,8 +40,8 @@ require ( golang.org/x/sys v0.36.0 // indirect golang.org/x/text v0.29.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.9 // indirect + google.golang.org/grpc v1.76.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/scraper/xscraper/go.sum b/scraper/xscraper/go.sum index 3ae3b45a4e8..464dc97f577 100644 --- a/scraper/xscraper/go.sum +++ b/scraper/xscraper/go.sum @@ -106,10 +106,10 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= -google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= -google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= From 4f26f63b89ea95756cddfeeff1d98e89f7870fc1 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 14 Oct 2025 15:26:29 +0200 Subject: [PATCH 18/25] make generate-chloggen-components Signed-off-by: Florian Lehner --- .chloggen/config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.chloggen/config.yaml b/.chloggen/config.yaml index 0e25fe8511f..2e492697857 100644 --- a/.chloggen/config.yaml +++ b/.chloggen/config.yaml @@ -39,6 +39,7 @@ components: - pkg/xexporterhelper - pkg/xprocessor - pkg/xreceiver + - pkg/xscraper - processor/batch - processor/memory_limiter - processor/sample From fd0afa7a56b5324ec38367925e3c2a128245d8cc Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 14 Oct 2025 15:55:44 +0200 Subject: [PATCH 19/25] update component in changelog Signed-off-by: Florian Lehner --- .chloggen/scraper-profiles.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chloggen/scraper-profiles.yaml b/.chloggen/scraper-profiles.yaml index 12b3c01674f..587bee22e73 100644 --- a/.chloggen/scraper-profiles.yaml +++ b/.chloggen/scraper-profiles.yaml @@ -4,7 +4,7 @@ change_type: 'enhancement' # The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) -component: scraper +component: pkg/xscraper # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). note: Implement xscraper for Profiles. From 6eb3693d56b7faf9c96bd61a931a35b411e37ca9 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Thu, 23 Oct 2025 09:41:29 +0200 Subject: [PATCH 20/25] go mod tidy Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index f5db5da1d54..abe5e040c2a 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -4,11 +4,11 @@ go 1.24.0 require ( github.com/stretchr/testify v1.11.1 - go.opentelemetry.io/collector/component v1.43.0 - go.opentelemetry.io/collector/component/componenttest v0.137.0 - go.opentelemetry.io/collector/pdata v1.43.0 + go.opentelemetry.io/collector/component v1.44.0 + go.opentelemetry.io/collector/component/componenttest v0.138.0 + go.opentelemetry.io/collector/pdata v1.44.0 go.opentelemetry.io/collector/pdata/pprofile v0.136.0 - go.opentelemetry.io/collector/pipeline v1.43.0 + go.opentelemetry.io/collector/pipeline v1.44.0 go.opentelemetry.io/collector/scraper v0.136.0 go.uber.org/goleak v1.3.0 ) @@ -25,8 +25,8 @@ require ( github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/featuregate v1.43.0 // indirect - go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect + go.opentelemetry.io/collector/featuregate v1.44.0 // indirect + go.opentelemetry.io/collector/internal/telemetry v0.138.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/log v0.14.0 // indirect From 43471fb841f0ba6ce2e6be5d9e8c7eca44461a71 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Thu, 6 Nov 2025 16:05:19 +0100 Subject: [PATCH 21/25] make gotidy Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 19 ++++--------- scraper/xscraper/go.sum | 61 ++++------------------------------------- 2 files changed, 11 insertions(+), 69 deletions(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index abe5e040c2a..af2dd66f504 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -4,11 +4,11 @@ go 1.24.0 require ( github.com/stretchr/testify v1.11.1 - go.opentelemetry.io/collector/component v1.44.0 - go.opentelemetry.io/collector/component/componenttest v0.138.0 - go.opentelemetry.io/collector/pdata v1.44.0 + go.opentelemetry.io/collector/component v1.45.0 + go.opentelemetry.io/collector/component/componenttest v0.139.0 + go.opentelemetry.io/collector/pdata v1.45.0 go.opentelemetry.io/collector/pdata/pprofile v0.136.0 - go.opentelemetry.io/collector/pipeline v1.44.0 + go.opentelemetry.io/collector/pipeline v1.45.0 go.opentelemetry.io/collector/scraper v0.136.0 go.uber.org/goleak v1.3.0 ) @@ -17,7 +17,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/gogo/protobuf v1.3.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -25,23 +24,15 @@ require ( github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/featuregate v1.44.0 // indirect - go.opentelemetry.io/collector/internal/telemetry v0.138.0 // indirect - go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect + go.opentelemetry.io/collector/featuregate v1.45.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect - go.opentelemetry.io/otel/log v0.14.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.44.0 // indirect golang.org/x/sys v0.36.0 // indirect - golang.org/x/text v0.29.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect - google.golang.org/grpc v1.76.0 // indirect - google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/scraper/xscraper/go.sum b/scraper/xscraper/go.sum index 464dc97f577..62db14e70c4 100644 --- a/scraper/xscraper/go.sum +++ b/scraper/xscraper/go.sum @@ -6,10 +6,6 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -19,8 +15,6 @@ github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKe github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -39,18 +33,10 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw= -go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= -go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM= -go.opentelemetry.io/otel/log v0.14.0/go.mod h1:5jRG92fEAgx0SU/vFPxmJvhIuDU9E1SUnEQrMlJpOno= -go.opentelemetry.io/otel/log/logtest v0.14.0 h1:BGTqNeluJDK2uIHAY8lRqxjVAYfqgcaTbVk1n3MWe5A= -go.opentelemetry.io/otel/log/logtest v0.14.0/go.mod h1:IuguGt8XVP4XA4d2oEEDMVDBBCesMg8/tSGWDjuKfoA= go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= @@ -59,55 +45,20 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6 go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= -go.opentelemetry.io/proto/slim/otlp v1.8.0 h1:afcLwp2XOeCbGrjufT1qWyruFt+6C9g5SOuymrSPUXQ= -go.opentelemetry.io/proto/slim/otlp v1.8.0/go.mod h1:Yaa5fjYm1SMCq0hG0x/87wV1MP9H5xDuG/1+AhvBcsI= -go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.1.0 h1:Uc+elixz922LHx5colXGi1ORbsW8DTIGM+gg+D9V7HE= -go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.1.0/go.mod h1:VyU6dTWBWv6h9w/+DYgSZAPMabWbPTFTuxp25sM8+s0= -go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.1.0 h1:i8YpvWGm/Uq1koL//bnbJ/26eV3OrKWm09+rDYo7keU= -go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.1.0/go.mod h1:pQ70xHY/ZVxNUBPn+qUWPl8nwai87eWdqL3M37lNi9A= +go.opentelemetry.io/proto/slim/otlp v1.9.0 h1:fPVMv8tP3TrsqlkH1HWYUpbCY9cAIemx184VGkS6vlE= +go.opentelemetry.io/proto/slim/otlp v1.9.0/go.mod h1:xXdeJJ90Gqyll+orzUkY4bOd2HECo5JofeoLpymVqdI= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0 h1:o13nadWDNkH/quoDomDUClnQBpdQQ2Qqv0lQBjIXjE8= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0/go.mod h1:Gyb6Xe7FTi/6xBHwMmngGoHqL0w29Y4eW8TGFzpefGA= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.2.0 h1:EiUYvtwu6PMrMHVjcPfnsG3v+ajPkbUeH+IL93+QYyk= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.2.0/go.mod h1:mUUHKFiN2SST3AhJ8XhJxEoeVW12oqfXog0Bo8W3Ec4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= -golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= -golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= -google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= -google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 0c095769bf958c29eb11d296ab735ea871000802 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Thu, 6 Nov 2025 16:14:36 +0100 Subject: [PATCH 22/25] make crosslink Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index af2dd66f504..0d7377ce794 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -46,8 +46,6 @@ replace go.opentelemetry.io/collector/component/componenttest => ../../component replace go.opentelemetry.io/collector/scraper => ../../scraper -replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry - replace go.opentelemetry.io/collector/featuregate => ../../featuregate replace go.opentelemetry.io/collector/pdata => ../../pdata From 63184efec24b251328280c864719a52d136d4c8e Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 18 Nov 2025 08:13:12 +0100 Subject: [PATCH 23/25] make tidy Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index 0d7377ce794..4f249f97f59 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -4,11 +4,11 @@ go 1.24.0 require ( github.com/stretchr/testify v1.11.1 - go.opentelemetry.io/collector/component v1.45.0 - go.opentelemetry.io/collector/component/componenttest v0.139.0 - go.opentelemetry.io/collector/pdata v1.45.0 + go.opentelemetry.io/collector/component v1.46.0 + go.opentelemetry.io/collector/component/componenttest v0.140.0 + go.opentelemetry.io/collector/pdata v1.46.0 go.opentelemetry.io/collector/pdata/pprofile v0.136.0 - go.opentelemetry.io/collector/pipeline v1.45.0 + go.opentelemetry.io/collector/pipeline v1.46.0 go.opentelemetry.io/collector/scraper v0.136.0 go.uber.org/goleak v1.3.0 ) @@ -24,7 +24,7 @@ require ( github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/featuregate v1.45.0 // indirect + go.opentelemetry.io/collector/featuregate v1.46.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/sdk v1.38.0 // indirect From 5af4968d5dc7a2ff46c665dc41d05b4d8ffc4991 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 18 Nov 2025 08:59:44 +0100 Subject: [PATCH 24/25] make lint Signed-off-by: Florian Lehner --- scraper/xscraper/profiles_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scraper/xscraper/profiles_test.go b/scraper/xscraper/profiles_test.go index 714defbe1c7..ac98158ad86 100644 --- a/scraper/xscraper/profiles_test.go +++ b/scraper/xscraper/profiles_test.go @@ -58,11 +58,11 @@ func TestProfilesConcurrency(t *testing.T) { require.NoError(t, mp.Start(context.Background(), componenttest.NewNopHost())) var wg sync.WaitGroup - for i := 0; i < 10; i++ { + for range 10 { wg.Add(1) go func() { defer wg.Done() - for j := 0; j < 10000; j++ { + for range 10000 { _, errScrape := mp.ScrapeProfiles(context.Background()) assert.NoError(t, errScrape) } From 1ecee8d302461c8f6dfc0a620576e20439f1493e Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Wed, 19 Nov 2025 13:15:39 +0100 Subject: [PATCH 25/25] make tidy Signed-off-by: Florian Lehner --- scraper/xscraper/go.mod | 2 +- scraper/xscraper/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scraper/xscraper/go.mod b/scraper/xscraper/go.mod index 4f249f97f59..ec886f3eab4 100644 --- a/scraper/xscraper/go.mod +++ b/scraper/xscraper/go.mod @@ -32,7 +32,7 @@ require ( go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.36.0 // indirect + golang.org/x/sys v0.37.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/scraper/xscraper/go.sum b/scraper/xscraper/go.sum index 62db14e70c4..898d0c8bf05 100644 --- a/scraper/xscraper/go.sum +++ b/scraper/xscraper/go.sum @@ -57,8 +57,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=