From 8ef05717ca8606d8c74cfbef45d4c892865cf6df Mon Sep 17 00:00:00 2001 From: Damien Mathieu <42@dmathieu.com> Date: Thu, 29 Aug 2024 17:41:54 +0200 Subject: [PATCH] [chore] add profiles support to processor receiver builder (#10955) #### Description This allows building profiles in the processor builder. As this is only changing internal modules, I am marking it as chore (and skipping changelog entry). #### Link to tracking issue https://github.com/open-telemetry/opentelemetry-collector/pull/10375 cc @mx-psi --- cmd/builder/internal/builder/main_test.go | 1 + cmd/otelcorecol/builder-config.yaml | 5 +- cmd/otelcorecol/go.mod | 11 +- internal/e2e/go.mod | 3 + otelcol/go.mod | 3 + otelcol/otelcoltest/go.mod | 3 + processor/batchprocessor/go.mod | 3 + processor/go.mod | 5 +- processor/memorylimiterprocessor/go.mod | 3 + processor/processortest/nop_processor.go | 7 ++ processor/processortest/nop_processor_test.go | 8 ++ service/go.mod | 3 + service/internal/builders/processor.go | 21 ++++ service/internal/builders/processor_test.go | 103 ++++++++++++------ 14 files changed, 137 insertions(+), 42 deletions(-) diff --git a/cmd/builder/internal/builder/main_test.go b/cmd/builder/internal/builder/main_test.go index fc53a3a08f5..f65273b5dc4 100644 --- a/cmd/builder/internal/builder/main_test.go +++ b/cmd/builder/internal/builder/main_test.go @@ -77,6 +77,7 @@ var ( "/processor", "/processor/batchprocessor", "/processor/memorylimiterprocessor", + "/processor/processorprofiles", "/receiver", "/receiver/nopreceiver", "/receiver/otlpreceiver", diff --git a/cmd/otelcorecol/builder-config.yaml b/cmd/otelcorecol/builder-config.yaml index bc1241a8c8c..76dc528208c 100644 --- a/cmd/otelcorecol/builder-config.yaml +++ b/cmd/otelcorecol/builder-config.yaml @@ -84,11 +84,12 @@ replaces: - go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata - go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile - go.opentelemetry.io/collector/processor => ../../processor + - go.opentelemetry.io/collector/processor/batchprocessor => ../../processor/batchprocessor + - go.opentelemetry.io/collector/processor/memorylimiterprocessor => ../../processor/memorylimiterprocessor + - go.opentelemetry.io/collector/processor/processorprofiles => ../../processor/processorprofiles - go.opentelemetry.io/collector/receiver => ../../receiver - go.opentelemetry.io/collector/receiver/nopreceiver => ../../receiver/nopreceiver - go.opentelemetry.io/collector/receiver/otlpreceiver => ../../receiver/otlpreceiver - go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles - - go.opentelemetry.io/collector/processor/batchprocessor => ../../processor/batchprocessor - - go.opentelemetry.io/collector/processor/memorylimiterprocessor => ../../processor/memorylimiterprocessor - go.opentelemetry.io/collector/semconv => ../../semconv - go.opentelemetry.io/collector/service => ../../service diff --git a/cmd/otelcorecol/go.mod b/cmd/otelcorecol/go.mod index da04aab60b0..44ce8441769 100644 --- a/cmd/otelcorecol/go.mod +++ b/cmd/otelcorecol/go.mod @@ -103,6 +103,7 @@ require ( go.opentelemetry.io/collector/pdata v1.14.1 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.108.1 // indirect go.opentelemetry.io/collector/pdata/testdata v0.108.1 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.108.1 // indirect go.opentelemetry.io/collector/semconv v0.108.1 // indirect go.opentelemetry.io/collector/service v0.108.1 // indirect @@ -230,6 +231,12 @@ replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile replace go.opentelemetry.io/collector/processor => ../../processor +replace go.opentelemetry.io/collector/processor/batchprocessor => ../../processor/batchprocessor + +replace go.opentelemetry.io/collector/processor/memorylimiterprocessor => ../../processor/memorylimiterprocessor + +replace go.opentelemetry.io/collector/processor/processorprofiles => ../../processor/processorprofiles + replace go.opentelemetry.io/collector/receiver => ../../receiver replace go.opentelemetry.io/collector/receiver/nopreceiver => ../../receiver/nopreceiver @@ -238,10 +245,6 @@ replace go.opentelemetry.io/collector/receiver/otlpreceiver => ../../receiver/ot replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles -replace go.opentelemetry.io/collector/processor/batchprocessor => ../../processor/batchprocessor - -replace go.opentelemetry.io/collector/processor/memorylimiterprocessor => ../../processor/memorylimiterprocessor - replace go.opentelemetry.io/collector/semconv => ../../semconv replace go.opentelemetry.io/collector/service => ../../service diff --git a/internal/e2e/go.mod b/internal/e2e/go.mod index 9d183f53ef5..44efda6c118 100644 --- a/internal/e2e/go.mod +++ b/internal/e2e/go.mod @@ -82,6 +82,7 @@ require ( go.opentelemetry.io/collector/internal/globalgates v0.108.1 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.108.1 // indirect go.opentelemetry.io/collector/processor v0.108.1 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.108.1 // indirect go.opentelemetry.io/collector/semconv v0.108.1 // indirect go.opentelemetry.io/contrib/config v0.9.0 // indirect @@ -191,3 +192,5 @@ replace go.opentelemetry.io/collector/component/componentprofiles => ../../compo replace go.opentelemetry.io/collector/internal/globalgates => ../globalgates replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles + +replace go.opentelemetry.io/collector/processor/processorprofiles => ../../processor/processorprofiles diff --git a/otelcol/go.mod b/otelcol/go.mod index 2b210148720..4b7f325485b 100644 --- a/otelcol/go.mod +++ b/otelcol/go.mod @@ -71,6 +71,7 @@ require ( go.opentelemetry.io/collector/pdata v1.14.1 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.108.1 // indirect go.opentelemetry.io/collector/pdata/testdata v0.108.1 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.108.1 // indirect go.opentelemetry.io/collector/semconv v0.108.1 // indirect go.opentelemetry.io/contrib/config v0.9.0 // indirect @@ -164,3 +165,5 @@ replace go.opentelemetry.io/collector/client => ../client replace go.opentelemetry.io/collector/component/componentstatus => ../component/componentstatus replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../receiver/receiverprofiles + +replace go.opentelemetry.io/collector/processor/processorprofiles => ../processor/processorprofiles diff --git a/otelcol/otelcoltest/go.mod b/otelcol/otelcoltest/go.mod index ff2851aef20..1bc1f669ef2 100644 --- a/otelcol/otelcoltest/go.mod +++ b/otelcol/otelcoltest/go.mod @@ -70,6 +70,7 @@ require ( go.opentelemetry.io/collector/pdata v1.14.1 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.108.1 // indirect go.opentelemetry.io/collector/pdata/testdata v0.108.1 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.108.1 // indirect go.opentelemetry.io/collector/semconv v0.108.1 // indirect go.opentelemetry.io/contrib/config v0.9.0 // indirect @@ -179,3 +180,5 @@ replace go.opentelemetry.io/collector/client => ../../client replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles + +replace go.opentelemetry.io/collector/processor/processorprofiles => ../../processor/processorprofiles diff --git a/processor/batchprocessor/go.mod b/processor/batchprocessor/go.mod index 8f8ef31f464..6745812962d 100644 --- a/processor/batchprocessor/go.mod +++ b/processor/batchprocessor/go.mod @@ -49,6 +49,7 @@ require ( go.opentelemetry.io/collector/component/componentstatus v0.108.1 // indirect go.opentelemetry.io/collector/consumer/consumerprofiles v0.108.1 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.108.1 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 // indirect go.opentelemetry.io/otel/exporters/prometheus v0.51.0 // indirect go.opentelemetry.io/otel/sdk v1.29.0 // indirect go.uber.org/multierr v1.11.0 // indirect @@ -93,3 +94,5 @@ replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consume replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus + +replace go.opentelemetry.io/collector/processor/processorprofiles => ../processorprofiles diff --git a/processor/go.mod b/processor/go.mod index 27f1c792f03..7b8803cd9d8 100644 --- a/processor/go.mod +++ b/processor/go.mod @@ -13,7 +13,9 @@ require ( go.opentelemetry.io/collector/consumer/consumerprofiles v0.108.1 go.opentelemetry.io/collector/consumer/consumertest v0.108.1 go.opentelemetry.io/collector/pdata v1.14.1 + go.opentelemetry.io/collector/pdata/pprofile v0.108.1 go.opentelemetry.io/collector/pdata/testdata v0.108.1 + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 go.opentelemetry.io/otel v1.29.0 go.opentelemetry.io/otel/metric v1.29.0 go.opentelemetry.io/otel/sdk/metric v1.29.0 @@ -39,7 +41,6 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.56.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.108.1 // indirect go.opentelemetry.io/otel/exporters/prometheus v0.51.0 // indirect go.opentelemetry.io/otel/sdk v1.29.0 // indirect go.uber.org/multierr v1.11.0 // indirect @@ -75,3 +76,5 @@ replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../consumer/c replace go.opentelemetry.io/collector/consumer/consumertest => ../consumer/consumertest replace go.opentelemetry.io/collector/component/componentstatus => ../component/componentstatus + +replace go.opentelemetry.io/collector/processor/processorprofiles => ./processorprofiles diff --git a/processor/memorylimiterprocessor/go.mod b/processor/memorylimiterprocessor/go.mod index b17bf5e5df1..ac8c6dc9715 100644 --- a/processor/memorylimiterprocessor/go.mod +++ b/processor/memorylimiterprocessor/go.mod @@ -50,6 +50,7 @@ require ( go.opentelemetry.io/collector/consumer/consumerprofiles v0.108.1 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.108.1 // indirect go.opentelemetry.io/collector/pdata/testdata v0.108.1 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 // indirect go.opentelemetry.io/otel v1.29.0 // indirect go.opentelemetry.io/otel/exporters/prometheus v0.51.0 // indirect go.opentelemetry.io/otel/metric v1.29.0 // indirect @@ -97,3 +98,5 @@ replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consume replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus + +replace go.opentelemetry.io/collector/processor/processorprofiles => ../processorprofiles diff --git a/processor/processortest/nop_processor.go b/processor/processortest/nop_processor.go index 6e16dbc78e3..408130d7b8b 100644 --- a/processor/processortest/nop_processor.go +++ b/processor/processortest/nop_processor.go @@ -11,8 +11,10 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/consumer" + "go.opentelemetry.io/collector/consumer/consumerprofiles" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/processor/processorprofiles" ) var nopType = component.MustNewType("nop") @@ -34,6 +36,7 @@ func NewNopFactory() processor.Factory { processor.WithTraces(createTracesProcessor, component.StabilityLevelStable), processor.WithMetrics(createMetricsProcessor, component.StabilityLevelStable), processor.WithLogs(createLogsProcessor, component.StabilityLevelStable), + processorprofiles.WithProfiles(createProfilesProcessor, component.StabilityLevelAlpha), ) } @@ -49,6 +52,10 @@ func createLogsProcessor(context.Context, processor.Settings, component.Config, return nopInstance, nil } +func createProfilesProcessor(context.Context, processor.Settings, component.Config, consumerprofiles.Profiles) (processorprofiles.Profiles, error) { + return nopInstance, nil +} + type nopConfig struct{} var nopInstance = &nopProcessor{ diff --git a/processor/processortest/nop_processor_test.go b/processor/processortest/nop_processor_test.go index 41a52893d15..3ffdb7feed8 100644 --- a/processor/processortest/nop_processor_test.go +++ b/processor/processortest/nop_processor_test.go @@ -16,6 +16,7 @@ import ( "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" + "go.opentelemetry.io/collector/pdata/pprofile" "go.opentelemetry.io/collector/pdata/ptrace" ) @@ -46,6 +47,13 @@ func TestNewNopFactory(t *testing.T) { assert.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost())) assert.NoError(t, logs.ConsumeLogs(context.Background(), plog.NewLogs())) assert.NoError(t, logs.Shutdown(context.Background())) + + profiles, err := factory.CreateProfilesProcessor(context.Background(), NewNopSettings(), cfg, consumertest.NewNop()) + require.NoError(t, err) + assert.Equal(t, consumer.Capabilities{MutatesData: false}, profiles.Capabilities()) + assert.NoError(t, profiles.Start(context.Background(), componenttest.NewNopHost())) + assert.NoError(t, profiles.ConsumeProfiles(context.Background(), pprofile.NewProfiles())) + assert.NoError(t, profiles.Shutdown(context.Background())) } func TestNewNopBuilder(t *testing.T) { diff --git a/service/go.mod b/service/go.mod index e6631032856..2c415464ce6 100644 --- a/service/go.mod +++ b/service/go.mod @@ -27,6 +27,7 @@ require ( go.opentelemetry.io/collector/pdata v1.14.1 go.opentelemetry.io/collector/pdata/testdata v0.108.1 go.opentelemetry.io/collector/processor v0.108.1 + go.opentelemetry.io/collector/processor/processorprofiles v0.108.1 go.opentelemetry.io/collector/receiver v0.108.1 go.opentelemetry.io/collector/receiver/receiverprofiles v0.108.1 go.opentelemetry.io/collector/semconv v0.108.1 @@ -172,3 +173,5 @@ replace go.opentelemetry.io/collector/client => ../client replace go.opentelemetry.io/collector/internal/globalgates => ../internal/globalgates replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../receiver/receiverprofiles + +replace go.opentelemetry.io/collector/processor/processorprofiles => ../processor/processorprofiles diff --git a/service/internal/builders/processor.go b/service/internal/builders/processor.go index 4200a997227..35b327c3e9c 100644 --- a/service/internal/builders/processor.go +++ b/service/internal/builders/processor.go @@ -9,7 +9,9 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" + "go.opentelemetry.io/collector/consumer/consumerprofiles" "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/processor/processorprofiles" "go.opentelemetry.io/collector/processor/processortest" ) @@ -91,6 +93,25 @@ func (b *ProcessorBuilder) CreateLogs(ctx context.Context, set processor.Setting return f.CreateLogsProcessor(ctx, set, cfg, next) } +// CreateProfiles creates a Profiles processor based on the settings and config. +func (b *ProcessorBuilder) CreateProfiles(ctx context.Context, set processor.Settings, next consumerprofiles.Profiles) (processorprofiles.Profiles, error) { + if next == nil { + return nil, errNilNextConsumer + } + cfg, existsCfg := b.cfgs[set.ID] + if !existsCfg { + return nil, fmt.Errorf("processor %q is not configured", set.ID) + } + + f, existsFactory := b.factories[set.ID.Type()] + if !existsFactory { + return nil, fmt.Errorf("processor factory not available for: %q", set.ID) + } + + logStabilityLevel(set.Logger, f.ProfilesProcessorStability()) + return f.CreateProfilesProcessor(ctx, set, cfg, next) +} + func (b *ProcessorBuilder) Factory(componentType component.Type) component.Factory { return b.factories[componentType] } diff --git a/service/internal/builders/processor_test.go b/service/internal/builders/processor_test.go index 713465a1301..cc1ce0d5db2 100644 --- a/service/internal/builders/processor_test.go +++ b/service/internal/builders/processor_test.go @@ -13,8 +13,10 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/consumer" + "go.opentelemetry.io/collector/consumer/consumerprofiles" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/processor/processorprofiles" "go.opentelemetry.io/collector/processor/processortest" ) @@ -28,55 +30,62 @@ func TestProcessorBuilder(t *testing.T) { processor.WithTraces(createProcessorTraces, component.StabilityLevelDevelopment), processor.WithMetrics(createProcessorMetrics, component.StabilityLevelAlpha), processor.WithLogs(createProcessorLogs, component.StabilityLevelDeprecated), + processorprofiles.WithProfiles(createProcessorProfiles, component.StabilityLevelDevelopment), ), }...) require.NoError(t, err) testCases := []struct { - name string - id component.ID - err string - nextTraces consumer.Traces - nextLogs consumer.Logs - nextMetrics consumer.Metrics + name string + id component.ID + err string + nextTraces consumer.Traces + nextLogs consumer.Logs + nextMetrics consumer.Metrics + nextProfiles consumerprofiles.Profiles }{ { - name: "unknown", - id: component.MustNewID("unknown"), - err: "processor factory not available for: \"unknown\"", - nextTraces: consumertest.NewNop(), - nextLogs: consumertest.NewNop(), - nextMetrics: consumertest.NewNop(), + name: "unknown", + id: component.MustNewID("unknown"), + err: "processor factory not available for: \"unknown\"", + nextTraces: consumertest.NewNop(), + nextLogs: consumertest.NewNop(), + nextMetrics: consumertest.NewNop(), + nextProfiles: consumertest.NewNop(), }, { - name: "err", - id: component.MustNewID("err"), - err: "telemetry type is not supported", - nextTraces: consumertest.NewNop(), - nextLogs: consumertest.NewNop(), - nextMetrics: consumertest.NewNop(), + name: "err", + id: component.MustNewID("err"), + err: "telemetry type is not supported", + nextTraces: consumertest.NewNop(), + nextLogs: consumertest.NewNop(), + nextMetrics: consumertest.NewNop(), + nextProfiles: consumertest.NewNop(), }, { - name: "all", - id: component.MustNewID("all"), - nextTraces: consumertest.NewNop(), - nextLogs: consumertest.NewNop(), - nextMetrics: consumertest.NewNop(), + name: "all", + id: component.MustNewID("all"), + nextTraces: consumertest.NewNop(), + nextLogs: consumertest.NewNop(), + nextMetrics: consumertest.NewNop(), + nextProfiles: consumertest.NewNop(), }, { - name: "all/named", - id: component.MustNewIDWithName("all", "named"), - nextTraces: consumertest.NewNop(), - nextLogs: consumertest.NewNop(), - nextMetrics: consumertest.NewNop(), + name: "all/named", + id: component.MustNewIDWithName("all", "named"), + nextTraces: consumertest.NewNop(), + nextLogs: consumertest.NewNop(), + nextMetrics: consumertest.NewNop(), + nextProfiles: consumertest.NewNop(), }, { - name: "no next consumer", - id: component.MustNewID("unknown"), - err: "nil next Consumer", - nextTraces: nil, - nextLogs: nil, - nextMetrics: nil, + name: "no next consumer", + id: component.MustNewID("unknown"), + err: "nil next Consumer", + nextTraces: nil, + nextLogs: nil, + nextMetrics: nil, + nextProfiles: nil, }, } @@ -111,6 +120,15 @@ func TestProcessorBuilder(t *testing.T) { assert.NoError(t, err) assert.Equal(t, nopProcessorInstance, le) } + + pe, err := b.CreateProfiles(context.Background(), createProcessorSettings(tt.id), tt.nextProfiles) + if tt.err != "" { + assert.EqualError(t, err, tt.err) + assert.Nil(t, pe) + } else { + assert.NoError(t, err) + assert.Equal(t, nopProcessorInstance, pe) + } }) } } @@ -124,6 +142,7 @@ func TestProcessorBuilderMissingConfig(t *testing.T) { processor.WithTraces(createProcessorTraces, component.StabilityLevelDevelopment), processor.WithMetrics(createProcessorMetrics, component.StabilityLevelAlpha), processor.WithLogs(createProcessorLogs, component.StabilityLevelDeprecated), + processorprofiles.WithProfiles(createProcessorProfiles, component.StabilityLevelDevelopment), ), }...) @@ -143,6 +162,10 @@ func TestProcessorBuilderMissingConfig(t *testing.T) { le, err := bErr.CreateLogs(context.Background(), createProcessorSettings(missingID), consumertest.NewNop()) assert.EqualError(t, err, "processor \"all/missing\" is not configured") assert.Nil(t, le) + + pe, err := bErr.CreateProfiles(context.Background(), createProcessorSettings(missingID), consumertest.NewNop()) + assert.EqualError(t, err, "processor \"all/missing\" is not configured") + assert.Nil(t, pe) } func TestProcessorBuilderFactory(t *testing.T) { @@ -183,13 +206,19 @@ func TestNewNopProcessorBuilder(t *testing.T) { bLogs, err := builder.CreateLogs(context.Background(), set, consumertest.NewNop()) require.NoError(t, err) assert.IsType(t, logs, bLogs) + + profiles, err := factory.CreateProfilesProcessor(context.Background(), set, cfg, consumertest.NewNop()) + require.NoError(t, err) + bProfiles, err := builder.CreateProfiles(context.Background(), set, consumertest.NewNop()) + require.NoError(t, err) + assert.IsType(t, profiles, bProfiles) } var nopProcessorInstance = &nopProcessor{ Consumer: consumertest.NewNop(), } -// nopProcessor stores consumed traces and metrics for testing purposes. +// nopProcessor stores consumed traces, metrics, logs and profiles for testing purposes. type nopProcessor struct { component.StartFunc component.ShutdownFunc @@ -208,6 +237,10 @@ func createProcessorLogs(context.Context, processor.Settings, component.Config, return nopProcessorInstance, nil } +func createProcessorProfiles(context.Context, processor.Settings, component.Config, consumerprofiles.Profiles) (processorprofiles.Profiles, error) { + return nopProcessorInstance, nil +} + func createProcessorSettings(id component.ID) processor.Settings { return processor.Settings{ ID: id,