From baf89f11bf65ca127b386ecf4ae19ef40ea156fd Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Mon, 12 Jul 2021 11:01:06 -0700 Subject: [PATCH] Pass a TracerProvider via construct settings to all the components (#3592) Followup PR will use the passed tracer to construct obsreport. Signed-off-by: Bogdan Drutu --- component/componenttest/nop_exporter.go | 6 +++-- component/componenttest/nop_extension.go | 6 +++-- component/componenttest/nop_processor.go | 6 +++-- component/componenttest/nop_receiver.go | 6 +++-- component/exporter.go | 4 +++ component/extension.go | 4 +++ component/processor.go | 4 +++ component/receiver.go | 4 +++ service/internal/builder/exporters_builder.go | 13 ++++++---- .../builder/exporters_builder_test.go | 11 ++++---- .../internal/builder/extensions_builder.go | 7 ++++-- .../builder/extensions_builder_test.go | 3 ++- service/internal/builder/pipelines_builder.go | 20 +++++++++------ .../builder/pipelines_builder_test.go | 13 +++++----- service/internal/builder/receivers_builder.go | 13 ++++++---- .../builder/receivers_builder_test.go | 25 ++++++++++--------- service/service.go | 21 ++++++++++------ 17 files changed, 106 insertions(+), 60 deletions(-) diff --git a/component/componenttest/nop_exporter.go b/component/componenttest/nop_exporter.go index 7146329ad1..2a474e6b02 100644 --- a/component/componenttest/nop_exporter.go +++ b/component/componenttest/nop_exporter.go @@ -17,6 +17,7 @@ package componenttest import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -28,8 +29,9 @@ import ( // NewNopExporterCreateSettings returns a new nop settings for Create*Exporter functions. func NewNopExporterCreateSettings() component.ExporterCreateSettings { return component.ExporterCreateSettings{ - Logger: zap.NewNop(), - BuildInfo: component.DefaultBuildInfo(), + Logger: zap.NewNop(), + TracerProvider: trace.NewNoopTracerProvider(), + BuildInfo: component.DefaultBuildInfo(), } } diff --git a/component/componenttest/nop_extension.go b/component/componenttest/nop_extension.go index e8e4d18079..222cb940b9 100644 --- a/component/componenttest/nop_extension.go +++ b/component/componenttest/nop_extension.go @@ -17,6 +17,7 @@ package componenttest import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -27,8 +28,9 @@ import ( // NewNopExtensionCreateSettings returns a new nop settings for Create*Extension functions. func NewNopExtensionCreateSettings() component.ExtensionCreateSettings { return component.ExtensionCreateSettings{ - Logger: zap.NewNop(), - BuildInfo: component.DefaultBuildInfo(), + Logger: zap.NewNop(), + TracerProvider: trace.NewNoopTracerProvider(), + BuildInfo: component.DefaultBuildInfo(), } } diff --git a/component/componenttest/nop_processor.go b/component/componenttest/nop_processor.go index ef8c2be1ee..0e7fd1b5f0 100644 --- a/component/componenttest/nop_processor.go +++ b/component/componenttest/nop_processor.go @@ -17,6 +17,7 @@ package componenttest import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -29,8 +30,9 @@ import ( // NewNopProcessorCreateSettings returns a new nop settings for Create*Processor functions. func NewNopProcessorCreateSettings() component.ProcessorCreateSettings { return component.ProcessorCreateSettings{ - Logger: zap.NewNop(), - BuildInfo: component.DefaultBuildInfo(), + Logger: zap.NewNop(), + TracerProvider: trace.NewNoopTracerProvider(), + BuildInfo: component.DefaultBuildInfo(), } } diff --git a/component/componenttest/nop_receiver.go b/component/componenttest/nop_receiver.go index 500126099e..1f449e1ba0 100644 --- a/component/componenttest/nop_receiver.go +++ b/component/componenttest/nop_receiver.go @@ -17,6 +17,7 @@ package componenttest import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -28,8 +29,9 @@ import ( // NewNopReceiverCreateSettings returns a new nop settings for Create*Receiver functions. func NewNopReceiverCreateSettings() component.ReceiverCreateSettings { return component.ReceiverCreateSettings{ - Logger: zap.NewNop(), - BuildInfo: component.DefaultBuildInfo(), + Logger: zap.NewNop(), + TracerProvider: trace.NewNoopTracerProvider(), + BuildInfo: component.DefaultBuildInfo(), } } diff --git a/component/exporter.go b/component/exporter.go index 96da6c297d..2e46935008 100644 --- a/component/exporter.go +++ b/component/exporter.go @@ -17,6 +17,7 @@ package component import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/config" @@ -52,6 +53,9 @@ type ExporterCreateSettings struct { // component to be used later as well. Logger *zap.Logger + // TracerProvider that the factory can pass to other instrumented third-party libraries. + TracerProvider trace.TracerProvider + // BuildInfo can be used by components for informational purposes BuildInfo BuildInfo } diff --git a/component/extension.go b/component/extension.go index 0c4a332443..9f865c7f96 100644 --- a/component/extension.go +++ b/component/extension.go @@ -17,6 +17,7 @@ package component import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/config" @@ -52,6 +53,9 @@ type ExtensionCreateSettings struct { // component to be used later as well. Logger *zap.Logger + // TracerProvider that the factory can pass to other instrumented third-party libraries. + TracerProvider trace.TracerProvider + // BuildInfo can be used by components for informational purposes BuildInfo BuildInfo } diff --git a/component/processor.go b/component/processor.go index 86d2d2f019..c6035317b8 100644 --- a/component/processor.go +++ b/component/processor.go @@ -17,6 +17,7 @@ package component import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component/componenterror" @@ -54,6 +55,9 @@ type ProcessorCreateSettings struct { // component to be used later as well. Logger *zap.Logger + // TracerProvider that the factory can pass to other instrumented third-party libraries. + TracerProvider trace.TracerProvider + // BuildInfo can be used by components for informational purposes BuildInfo BuildInfo } diff --git a/component/receiver.go b/component/receiver.go index 28a8164b97..fb2c885428 100644 --- a/component/receiver.go +++ b/component/receiver.go @@ -17,6 +17,7 @@ package component import ( "context" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/config" @@ -61,6 +62,9 @@ type ReceiverCreateSettings struct { // component to be used later as well. Logger *zap.Logger + // TracerProvider that the factory can pass to other instrumented third-party libraries. + TracerProvider trace.TracerProvider + // BuildInfo can be used by components for informational purposes. BuildInfo BuildInfo } diff --git a/service/internal/builder/exporters_builder.go b/service/internal/builder/exporters_builder.go index af31d3a22c..21c1316284 100644 --- a/service/internal/builder/exporters_builder.go +++ b/service/internal/builder/exporters_builder.go @@ -18,6 +18,7 @@ import ( "context" "fmt" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -143,6 +144,7 @@ type exportersRequiredDataTypes map[config.Exporter]dataTypeRequirements // BuildExporters builds Exporters from config. func BuildExporters( logger *zap.Logger, + tracerProvider trace.TracerProvider, buildInfo component.BuildInfo, config *config.Config, factories map[config.Type]component.ExporterFactory, @@ -155,17 +157,18 @@ func BuildExporters( exporters := make(Exporters) // BuildExporters exporters based on configuration and required input data types. - for _, cfg := range config.Exporters { + for _, expCfg := range config.Exporters { set := component.ExporterCreateSettings{ - Logger: logger.With(zap.Stringer(zapNameKey, cfg.ID())), - BuildInfo: buildInfo, + Logger: logger.With(zap.Stringer(zapNameKey, expCfg.ID())), + TracerProvider: tracerProvider, + BuildInfo: buildInfo, } - exp, err := buildExporter(context.Background(), factories, set, cfg, exporterInputDataTypes) + exp, err := buildExporter(context.Background(), factories, set, expCfg, exporterInputDataTypes) if err != nil { return nil, err } - exporters[cfg] = exp + exporters[expCfg] = exp } return exporters, nil diff --git a/service/internal/builder/exporters_builder_test.go b/service/internal/builder/exporters_builder_test.go index 8f254dd56a..e8076170c7 100644 --- a/service/internal/builder/exporters_builder_test.go +++ b/service/internal/builder/exporters_builder_test.go @@ -21,6 +21,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -60,7 +61,7 @@ func TestBuildExporters(t *testing.T) { }, } - exporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + exporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NoError(t, err) require.NotNil(t, exporters) @@ -89,7 +90,7 @@ func TestBuildExporters(t *testing.T) { // This should result in creating an exporter that has none of consumption // functions set. delete(cfg.Service.Pipelines, "trace") - exporters, err = BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + exporters, err = BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NotNil(t, exporters) assert.NoError(t, err) @@ -127,7 +128,7 @@ func TestBuildExporters_BuildLogs(t *testing.T) { }, } - exporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + exporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NoError(t, err) require.NotNil(t, exporters) @@ -152,7 +153,7 @@ func TestBuildExporters_BuildLogs(t *testing.T) { // This should result in creating an exporter that has none of consumption // functions set. delete(cfg.Service.Pipelines, "logs") - exporters, err = BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + exporters, err = BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NotNil(t, exporters) assert.Nil(t, err) @@ -238,7 +239,7 @@ func TestBuildExporters_NotSupportedDataType(t *testing.T) { cfg, err := configtest.LoadConfigAndValidate(path.Join("testdata", test.configFile), factories) require.Nil(t, err) - exporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + exporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.Error(t, err) assert.Zero(t, len(exporters)) }) diff --git a/service/internal/builder/extensions_builder.go b/service/internal/builder/extensions_builder.go index fbae898813..8a116b5fe8 100644 --- a/service/internal/builder/extensions_builder.go +++ b/service/internal/builder/extensions_builder.go @@ -18,6 +18,7 @@ import ( "context" "fmt" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -113,6 +114,7 @@ func (exts Extensions) ToMap() map[config.ComponentID]component.Extension { // BuildExtensions builds Extensions from config. func BuildExtensions( logger *zap.Logger, + tracerProvider trace.TracerProvider, buildInfo component.BuildInfo, config *config.Config, factories map[config.Type]component.ExtensionFactory, @@ -126,8 +128,9 @@ func BuildExtensions( } set := component.ExtensionCreateSettings{ - Logger: logger.With(zap.Stringer(zapNameKey, extCfg.ID())), - BuildInfo: buildInfo, + Logger: logger.With(zap.Stringer(zapNameKey, extCfg.ID())), + TracerProvider: tracerProvider, + BuildInfo: buildInfo, } ext, err := buildExtension(context.Background(), factories, set, extCfg) if err != nil { diff --git a/service/internal/builder/extensions_builder_test.go b/service/internal/builder/extensions_builder_test.go index b0281e700c..cda5f91450 100644 --- a/service/internal/builder/extensions_builder_test.go +++ b/service/internal/builder/extensions_builder_test.go @@ -20,6 +20,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -115,7 +116,7 @@ func TestService_setupExtensions(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - ext, err := BuildExtensions(zap.NewNop(), component.DefaultBuildInfo(), tt.config, tt.factories.Extensions) + ext, err := BuildExtensions(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), tt.config, tt.factories.Extensions) assert.Error(t, err) assert.Equal(t, tt.wantErrMsg, err.Error()) diff --git a/service/internal/builder/pipelines_builder.go b/service/internal/builder/pipelines_builder.go index 4ec064c0ce..a5bd450ac9 100644 --- a/service/internal/builder/pipelines_builder.go +++ b/service/internal/builder/pipelines_builder.go @@ -18,6 +18,7 @@ import ( "context" "fmt" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -81,23 +82,25 @@ func (bps BuiltPipelines) ShutdownProcessors(ctx context.Context) error { // pipelinesBuilder builds Pipelines from config. type pipelinesBuilder struct { - logger *zap.Logger - buildInfo component.BuildInfo - config *config.Config - exporters Exporters - factories map[config.Type]component.ProcessorFactory + logger *zap.Logger + tracerProvider trace.TracerProvider + buildInfo component.BuildInfo + config *config.Config + exporters Exporters + factories map[config.Type]component.ProcessorFactory } // BuildPipelines builds pipeline processors from config. Requires exporters to be already // built via BuildExporters. func BuildPipelines( logger *zap.Logger, + tracerProvider trace.TracerProvider, buildInfo component.BuildInfo, config *config.Config, exporters Exporters, factories map[config.Type]component.ProcessorFactory, ) (BuiltPipelines, error) { - pb := &pipelinesBuilder{logger, buildInfo, config, exporters, factories} + pb := &pipelinesBuilder{logger, tracerProvider, buildInfo, config, exporters, factories} pipelineProcessors := make(BuiltPipelines) for _, pipeline := range pb.config.Service.Pipelines { @@ -151,8 +154,9 @@ func (pb *pipelinesBuilder) buildPipeline(ctx context.Context, pipelineCfg *conf // which we will build in the next loop iteration). var err error set := component.ProcessorCreateSettings{ - Logger: pb.logger.With(zap.String(zapKindKey, zapKindProcessor), zap.Stringer(zapNameKey, procCfg.ID())), - BuildInfo: pb.buildInfo, + Logger: pb.logger.With(zap.String(zapKindKey, zapKindProcessor), zap.Stringer(zapNameKey, procCfg.ID())), + TracerProvider: pb.tracerProvider, + BuildInfo: pb.buildInfo, } switch pipelineCfg.InputType { diff --git a/service/internal/builder/pipelines_builder_test.go b/service/internal/builder/pipelines_builder_test.go index 0bc3e98f6c..44c2020a6c 100644 --- a/service/internal/builder/pipelines_builder_test.go +++ b/service/internal/builder/pipelines_builder_test.go @@ -21,6 +21,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -112,7 +113,7 @@ func TestBuildPipelines_BuildVarious(t *testing.T) { cfg := createExampleConfig(dataType) // BuildProcessors the pipeline - allExporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + allExporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) if test.shouldFail { assert.Error(t, err) return @@ -120,7 +121,7 @@ func TestBuildPipelines_BuildVarious(t *testing.T) { require.NoError(t, err) require.EqualValues(t, 1, len(allExporters)) - pipelineProcessors, err := BuildPipelines(zap.NewNop(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) + pipelineProcessors, err := BuildPipelines(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) assert.NoError(t, err) require.NotNil(t, pipelineProcessors) @@ -184,9 +185,9 @@ func testPipeline(t *testing.T, pipelineName string, exporterIDs []config.Compon require.Nil(t, err) // BuildProcessors the pipeline - allExporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + allExporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NoError(t, err) - pipelineProcessors, err := BuildPipelines(zap.NewNop(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) + pipelineProcessors, err := BuildPipelines(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) assert.NoError(t, err) require.NotNil(t, pipelineProcessors) @@ -258,10 +259,10 @@ func TestBuildPipelines_NotSupportedDataType(t *testing.T) { cfg, err := configtest.LoadConfigAndValidate(path.Join("testdata", test.configFile), factories) require.Nil(t, err) - allExporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + allExporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NoError(t, err) - pipelineProcessors, err := BuildPipelines(zap.NewNop(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) + pipelineProcessors, err := BuildPipelines(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) assert.Error(t, err) assert.Zero(t, len(pipelineProcessors)) }) diff --git a/service/internal/builder/receivers_builder.go b/service/internal/builder/receivers_builder.go index 5db7836f34..76653e3ac7 100644 --- a/service/internal/builder/receivers_builder.go +++ b/service/internal/builder/receivers_builder.go @@ -19,6 +19,7 @@ import ( "errors" "fmt" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -89,6 +90,7 @@ type receiversBuilder struct { // BuildReceivers builds Receivers from config. func BuildReceivers( logger *zap.Logger, + tracerProvider trace.TracerProvider, buildInfo component.BuildInfo, config *config.Config, builtPipelines BuiltPipelines, @@ -97,12 +99,13 @@ func BuildReceivers( rb := &receiversBuilder{logger.With(zap.String(zapKindKey, zapKindReceiver)), buildInfo, config, builtPipelines, factories} receivers := make(Receivers) - for _, cfg := range rb.config.Receivers { + for _, recvCfg := range rb.config.Receivers { set := component.ReceiverCreateSettings{ - Logger: rb.logger.With(zap.Stringer(zapNameKey, cfg.ID())), - BuildInfo: buildInfo, + Logger: rb.logger.With(zap.Stringer(zapNameKey, recvCfg.ID())), + TracerProvider: tracerProvider, + BuildInfo: buildInfo, } - rcv, err := rb.buildReceiver(context.Background(), set, cfg) + rcv, err := rb.buildReceiver(context.Background(), set, recvCfg) if err != nil { if err == errUnusedReceiver { set.Logger.Info("Ignoring receiver as it is not used by any pipeline") @@ -110,7 +113,7 @@ func BuildReceivers( } return nil, err } - receivers[cfg] = rcv + receivers[recvCfg] = rcv } return receivers, nil diff --git a/service/internal/builder/receivers_builder_test.go b/service/internal/builder/receivers_builder_test.go index 9c017703cc..a2cd2afa88 100644 --- a/service/internal/builder/receivers_builder_test.go +++ b/service/internal/builder/receivers_builder_test.go @@ -21,6 +21,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -100,11 +101,11 @@ func testReceivers( require.NoError(t, err) // Build the pipeline - allExporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + allExporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NoError(t, err) - pipelineProcessors, err := BuildPipelines(zap.NewNop(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) + pipelineProcessors, err := BuildPipelines(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) assert.NoError(t, err) - receivers, err := BuildReceivers(zap.NewNop(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) + receivers, err := BuildReceivers(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) assert.NoError(t, err) require.NotNil(t, receivers) @@ -201,16 +202,16 @@ func TestBuildReceivers_BuildCustom(t *testing.T) { cfg := createExampleConfig(dataType) // Build the pipeline - allExporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + allExporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) if test.shouldFail { assert.Error(t, err) return } assert.NoError(t, err) - pipelineProcessors, err := BuildPipelines(zap.NewNop(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) + pipelineProcessors, err := BuildPipelines(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) assert.NoError(t, err) - receivers, err := BuildReceivers(zap.NewNop(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) + receivers, err := BuildReceivers(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) assert.NoError(t, err) require.NotNil(t, receivers) @@ -302,11 +303,11 @@ func TestBuildReceivers_Unused(t *testing.T) { assert.NoError(t, err) // Build the pipeline - allExporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + allExporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NoError(t, err) - pipelineProcessors, err := BuildPipelines(zap.NewNop(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) + pipelineProcessors, err := BuildPipelines(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) assert.NoError(t, err) - receivers, err := BuildReceivers(zap.NewNop(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) + receivers, err := BuildReceivers(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) assert.NoError(t, err) assert.NotNil(t, receivers) @@ -338,13 +339,13 @@ func TestBuildReceivers_NotSupportedDataType(t *testing.T) { assert.NoError(t, err) require.NotNil(t, cfg) - allExporters, err := BuildExporters(zap.NewNop(), component.DefaultBuildInfo(), cfg, factories.Exporters) + allExporters, err := BuildExporters(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, factories.Exporters) assert.NoError(t, err) - pipelineProcessors, err := BuildPipelines(zap.NewNop(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) + pipelineProcessors, err := BuildPipelines(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, allExporters, factories.Processors) assert.NoError(t, err) - receivers, err := BuildReceivers(zap.NewNop(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) + receivers, err := BuildReceivers(zap.NewNop(), trace.NewNoopTracerProvider(), component.DefaultBuildInfo(), cfg, pipelineProcessors, factories.Receivers) assert.Error(t, err) assert.Zero(t, len(receivers)) }) diff --git a/service/service.go b/service/service.go index b15458d688..91b1eb1e78 100644 --- a/service/service.go +++ b/service/service.go @@ -18,6 +18,8 @@ import ( "context" "fmt" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -32,6 +34,7 @@ type service struct { buildInfo component.BuildInfo config *config.Config logger *zap.Logger + tracerProvider trace.TracerProvider asyncErrorChannel chan error builtExporters builder.Exporters @@ -42,10 +45,12 @@ type service struct { func newService(set *svcSettings) (*service, error) { srv := &service{ - factories: set.Factories, - buildInfo: set.BuildInfo, - config: set.Config, - logger: set.Logger, + factories: set.Factories, + buildInfo: set.BuildInfo, + config: set.Config, + logger: set.Logger, + // TODO: Configure the right tracer provider. + tracerProvider: otel.GetTracerProvider(), asyncErrorChannel: set.AsyncErrorChannel, } @@ -126,7 +131,7 @@ func (srv *service) GetExporters() map[config.DataType]map[config.ComponentID]co func (srv *service) buildExtensions() error { var err error - srv.builtExtensions, err = builder.BuildExtensions(srv.logger, srv.buildInfo, srv.config, srv.factories.Extensions) + srv.builtExtensions, err = builder.BuildExtensions(srv.logger, srv.tracerProvider, srv.buildInfo, srv.config, srv.factories.Extensions) if err != nil { return fmt.Errorf("cannot build builtExtensions: %w", err) } @@ -157,20 +162,20 @@ func (srv *service) buildPipelines() error { // First create exporters. var err error - srv.builtExporters, err = builder.BuildExporters(srv.logger, srv.buildInfo, srv.config, srv.factories.Exporters) + srv.builtExporters, err = builder.BuildExporters(srv.logger, srv.tracerProvider, srv.buildInfo, srv.config, srv.factories.Exporters) if err != nil { return fmt.Errorf("cannot build builtExporters: %w", err) } // Create pipelines and their processors and plug exporters to the // end of the pipelines. - srv.builtPipelines, err = builder.BuildPipelines(srv.logger, srv.buildInfo, srv.config, srv.builtExporters, srv.factories.Processors) + srv.builtPipelines, err = builder.BuildPipelines(srv.logger, srv.tracerProvider, srv.buildInfo, srv.config, srv.builtExporters, srv.factories.Processors) if err != nil { return fmt.Errorf("cannot build pipelines: %w", err) } // Create receivers and plug them into the start of the pipelines. - srv.builtReceivers, err = builder.BuildReceivers(srv.logger, srv.buildInfo, srv.config, srv.builtPipelines, srv.factories.Receivers) + srv.builtReceivers, err = builder.BuildReceivers(srv.logger, srv.tracerProvider, srv.buildInfo, srv.config, srv.builtPipelines, srv.factories.Receivers) if err != nil { return fmt.Errorf("cannot build receivers: %w", err) }