Move exporter Factory and types to exporter package (#6672)

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
This commit is contained in:
Bogdan Drutu 2022-12-07 10:20:34 -08:00 committed by GitHub
parent 4069c593ed
commit 6a2dc302a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 446 additions and 312 deletions

25
.chloggen/deprecatecompexp.yaml Executable file
View File

@ -0,0 +1,25 @@
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: deprecation
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
component: component
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Deprecate Exporter related types/funcs from component package in favor of exporter package.
# One or more tracking issues or pull requests related to the change
issues: [6578]
# (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: |-
- `component.ExporterCreateSettings` -> `exporter.CreateSettings`
- `component.CreateTracesExporterFunc` -> `exporter.CreateTracesFunc`
- `component.CreateMetricsExporterFunc` -> `exporter.CreateMetricsFunc`
- `component.CreateLogsExporterFunc` -> `exporter.CreateLogsFunc`
- `component.ExporterFactory` -> `exporter.Factory`
- `component.NewExporterFactory` -> `exporter.NewFactory`
- `component.MakeExporterFactoryMap` -> `exporter.MakeFactoryMap`
- `componenttest.NewNopExporterCreateSettings` -> `exportertest.NewNopCreateSettings`
- `componenttest.NewNopExporterFactory` -> `exportertest.NewNopFactory`

View File

@ -20,11 +20,12 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/consumer/consumertest"
"go.opentelemetry.io/collector/exporter"
) )
// NewNopExporterCreateSettings returns a new nop settings for Create*Exporter functions. // NewNopExporterCreateSettings returns a new nop settings for Create*Exporter functions.
func NewNopExporterCreateSettings() component.ExporterCreateSettings { func NewNopExporterCreateSettings() exporter.CreateSettings {
return component.ExporterCreateSettings{ return exporter.CreateSettings{
TelemetrySettings: NewNopTelemetrySettings(), TelemetrySettings: NewNopTelemetrySettings(),
BuildInfo: component.NewDefaultBuildInfo(), BuildInfo: component.NewDefaultBuildInfo(),
} }
@ -34,30 +35,30 @@ type nopExporterConfig struct {
config.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct config.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct
} }
// NewNopExporterFactory returns a component.ExporterFactory that constructs nop exporters. // NewNopExporterFactory returns an exporter.Factory that constructs nop exporters.
func NewNopExporterFactory() component.ExporterFactory { func NewNopExporterFactory() exporter.Factory {
return component.NewExporterFactory( return exporter.NewFactory(
"nop", "nop",
func() component.Config { func() component.Config {
return &nopExporterConfig{ return &nopExporterConfig{
ExporterSettings: config.NewExporterSettings(component.NewID("nop")), ExporterSettings: config.NewExporterSettings(component.NewID("nop")),
} }
}, },
component.WithTracesExporter(createTracesExporter, component.StabilityLevelStable), exporter.WithTraces(createTracesExporter, component.StabilityLevelStable),
component.WithMetricsExporter(createMetricsExporter, component.StabilityLevelStable), exporter.WithMetrics(createMetricsExporter, component.StabilityLevelStable),
component.WithLogsExporter(createLogsExporter, component.StabilityLevelStable), exporter.WithLogs(createLogsExporter, component.StabilityLevelStable),
) )
} }
func createTracesExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.TracesExporter, error) { func createTracesExporter(context.Context, exporter.CreateSettings, component.Config) (exporter.Traces, error) {
return nopExporterInstance, nil return nopExporterInstance, nil
} }
func createMetricsExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.MetricsExporter, error) { func createMetricsExporter(context.Context, exporter.CreateSettings, component.Config) (exporter.Metrics, error) {
return nopExporterInstance, nil return nopExporterInstance, nil
} }
func createLogsExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.LogsExporter, error) { func createLogsExporter(context.Context, exporter.CreateSettings, component.Config) (exporter.Logs, error) {
return nopExporterInstance, nil return nopExporterInstance, nil
} }

View File

@ -32,6 +32,7 @@ func NopFactories() (component.Factories, error) {
return component.Factories{}, err return component.Factories{}, err
} }
//nolint:staticcheck
if factories.Exporters, err = component.MakeExporterFactoryMap(NewNopExporterFactory()); err != nil { if factories.Exporters, err = component.MakeExporterFactoryMap(NewNopExporterFactory()); err != nil {
return component.Factories{}, err return component.Factories{}, err
} }

View File

@ -26,25 +26,25 @@ type ExporterConfig = Config
// Deprecated: [v0.67.0] use UnmarshalConfig. // Deprecated: [v0.67.0] use UnmarshalConfig.
var UnmarshalExporterConfig = UnmarshalConfig var UnmarshalExporterConfig = UnmarshalConfig
// TracesExporter is an Exporter that can consume traces. // Deprecated: [v0.67.0] use exporter.Traces.
type TracesExporter interface { type TracesExporter interface {
Component Component
consumer.Traces consumer.Traces
} }
// MetricsExporter is an Exporter that can consume metrics. // Deprecated: [v0.67.0] use exporter.Metrics.
type MetricsExporter interface { type MetricsExporter interface {
Component Component
consumer.Metrics consumer.Metrics
} }
// LogsExporter is an Exporter that can consume logs. // Deprecated: [v0.67.0] use exporter.Logs.
type LogsExporter interface { type LogsExporter interface {
Component Component
consumer.Logs consumer.Logs
} }
// ExporterCreateSettings configures Exporter creators. // Deprecated: [v0.67.0] use exporter.CreateSettings.
type ExporterCreateSettings struct { type ExporterCreateSettings struct {
// ID returns the ID of the component that will be created. // ID returns the ID of the component that will be created.
ID ID ID ID
@ -55,10 +55,7 @@ type ExporterCreateSettings struct {
BuildInfo BuildInfo BuildInfo BuildInfo
} }
// ExporterFactory is factory interface for exporters. // Deprecated: [v0.67.0] use exporter.Factory.
//
// This interface cannot be directly implemented. Implementations must
// use the NewExporterFactory to implement it.
type ExporterFactory interface { type ExporterFactory interface {
Factory Factory
@ -87,7 +84,7 @@ type ExporterFactory interface {
LogsExporterStability() StabilityLevel LogsExporterStability() StabilityLevel
} }
// ExporterFactoryOption apply changes to ExporterOptions. // Deprecated: [v0.67.0] use exporter.FactoryOption.
type ExporterFactoryOption interface { type ExporterFactoryOption interface {
// applyExporterFactoryOption applies the option. // applyExporterFactoryOption applies the option.
applyExporterFactoryOption(o *exporterFactory) applyExporterFactoryOption(o *exporterFactory)
@ -105,7 +102,7 @@ func (f exporterFactoryOptionFunc) applyExporterFactoryOption(o *exporterFactory
// Deprecated: [v0.67.0] use CreateDefaultConfigFunc. // Deprecated: [v0.67.0] use CreateDefaultConfigFunc.
type ExporterCreateDefaultConfigFunc = CreateDefaultConfigFunc type ExporterCreateDefaultConfigFunc = CreateDefaultConfigFunc
// CreateTracesExporterFunc is the equivalent of ExporterFactory.CreateTracesExporter(). // Deprecated: [v0.67.0] use exporter.CreateTracesFunc.
type CreateTracesExporterFunc func(context.Context, ExporterCreateSettings, Config) (TracesExporter, error) type CreateTracesExporterFunc func(context.Context, ExporterCreateSettings, Config) (TracesExporter, error)
// CreateTracesExporter implements ExporterFactory.CreateTracesExporter(). // CreateTracesExporter implements ExporterFactory.CreateTracesExporter().
@ -116,7 +113,7 @@ func (f CreateTracesExporterFunc) CreateTracesExporter(ctx context.Context, set
return f(ctx, set, cfg) return f(ctx, set, cfg)
} }
// CreateMetricsExporterFunc is the equivalent of ExporterFactory.CreateMetricsExporter(). // Deprecated: [v0.67.0] use exporter.CreateMetricsFunc.
type CreateMetricsExporterFunc func(context.Context, ExporterCreateSettings, Config) (MetricsExporter, error) type CreateMetricsExporterFunc func(context.Context, ExporterCreateSettings, Config) (MetricsExporter, error)
// CreateMetricsExporter implements ExporterFactory.CreateMetricsExporter(). // CreateMetricsExporter implements ExporterFactory.CreateMetricsExporter().
@ -127,7 +124,7 @@ func (f CreateMetricsExporterFunc) CreateMetricsExporter(ctx context.Context, se
return f(ctx, set, cfg) return f(ctx, set, cfg)
} }
// CreateLogsExporterFunc is the equivalent of ExporterFactory.CreateLogsExporter(). // Deprecated: [v0.67.0] use exporter.CreateLogsFunc.
type CreateLogsExporterFunc func(context.Context, ExporterCreateSettings, Config) (LogsExporter, error) type CreateLogsExporterFunc func(context.Context, ExporterCreateSettings, Config) (LogsExporter, error)
// CreateLogsExporter implements ExporterFactory.CreateLogsExporter(). // CreateLogsExporter implements ExporterFactory.CreateLogsExporter().
@ -160,7 +157,7 @@ func (e exporterFactory) LogsExporterStability() StabilityLevel {
return e.logsStabilityLevel return e.logsStabilityLevel
} }
// WithTracesExporter overrides the default "error not supported" implementation for CreateTracesExporter and the default "undefined" stability level. // Deprecated: [v0.67.0] use exporter.WithTraces.
func WithTracesExporter(createTracesExporter CreateTracesExporterFunc, sl StabilityLevel) ExporterFactoryOption { func WithTracesExporter(createTracesExporter CreateTracesExporterFunc, sl StabilityLevel) ExporterFactoryOption {
return exporterFactoryOptionFunc(func(o *exporterFactory) { return exporterFactoryOptionFunc(func(o *exporterFactory) {
o.tracesStabilityLevel = sl o.tracesStabilityLevel = sl
@ -168,7 +165,7 @@ func WithTracesExporter(createTracesExporter CreateTracesExporterFunc, sl Stabil
}) })
} }
// WithMetricsExporter overrides the default "error not supported" implementation for CreateMetricsExporter and the default "undefined" stability level. // Deprecated: [v0.67.0] use exporter.WithMetrics.
func WithMetricsExporter(createMetricsExporter CreateMetricsExporterFunc, sl StabilityLevel) ExporterFactoryOption { func WithMetricsExporter(createMetricsExporter CreateMetricsExporterFunc, sl StabilityLevel) ExporterFactoryOption {
return exporterFactoryOptionFunc(func(o *exporterFactory) { return exporterFactoryOptionFunc(func(o *exporterFactory) {
o.metricsStabilityLevel = sl o.metricsStabilityLevel = sl
@ -176,7 +173,7 @@ func WithMetricsExporter(createMetricsExporter CreateMetricsExporterFunc, sl Sta
}) })
} }
// WithLogsExporter overrides the default "error not supported" implementation for CreateLogsExporter and the default "undefined" stability level. // Deprecated: [v0.67.0] use exporter.WithLogs.
func WithLogsExporter(createLogsExporter CreateLogsExporterFunc, sl StabilityLevel) ExporterFactoryOption { func WithLogsExporter(createLogsExporter CreateLogsExporterFunc, sl StabilityLevel) ExporterFactoryOption {
return exporterFactoryOptionFunc(func(o *exporterFactory) { return exporterFactoryOptionFunc(func(o *exporterFactory) {
o.logsStabilityLevel = sl o.logsStabilityLevel = sl
@ -184,7 +181,7 @@ func WithLogsExporter(createLogsExporter CreateLogsExporterFunc, sl StabilityLev
}) })
} }
// NewExporterFactory returns a ExporterFactory. // Deprecated: [v0.67.0] use exporter.NewFactory.
func NewExporterFactory(cfgType Type, createDefaultConfig CreateDefaultConfigFunc, options ...ExporterFactoryOption) ExporterFactory { func NewExporterFactory(cfgType Type, createDefaultConfig CreateDefaultConfigFunc, options ...ExporterFactoryOption) ExporterFactory {
f := &exporterFactory{ f := &exporterFactory{
baseFactory: baseFactory{ baseFactory: baseFactory{

View File

@ -1,80 +0,0 @@
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// TODO: Move tests back to component package after config.*Settings are removed.
package component_test
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config"
)
func TestNewExporterFactory(t *testing.T) {
const typeStr = "test"
defaultCfg := config.NewExporterSettings(component.NewID(typeStr))
factory := component.NewExporterFactory(
typeStr,
func() component.Config { return &defaultCfg })
assert.EqualValues(t, typeStr, factory.Type())
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
_, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateSettings{}, &defaultCfg)
assert.Error(t, err)
_, err = factory.CreateMetricsExporter(context.Background(), component.ExporterCreateSettings{}, &defaultCfg)
assert.Error(t, err)
_, err = factory.CreateLogsExporter(context.Background(), component.ExporterCreateSettings{}, &defaultCfg)
assert.Error(t, err)
}
func TestNewExporterFactory_WithOptions(t *testing.T) {
const typeStr = "test"
defaultCfg := config.NewExporterSettings(component.NewID(typeStr))
factory := component.NewExporterFactory(
typeStr,
func() component.Config { return &defaultCfg },
component.WithTracesExporter(createTracesExporter, component.StabilityLevelDevelopment),
component.WithMetricsExporter(createMetricsExporter, component.StabilityLevelAlpha),
component.WithLogsExporter(createLogsExporter, component.StabilityLevelDeprecated))
assert.EqualValues(t, typeStr, factory.Type())
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
assert.Equal(t, component.StabilityLevelDevelopment, factory.TracesExporterStability())
_, err := factory.CreateTracesExporter(context.Background(), component.ExporterCreateSettings{}, &defaultCfg)
assert.NoError(t, err)
assert.Equal(t, component.StabilityLevelAlpha, factory.MetricsExporterStability())
_, err = factory.CreateMetricsExporter(context.Background(), component.ExporterCreateSettings{}, &defaultCfg)
assert.NoError(t, err)
assert.Equal(t, component.StabilityLevelDeprecated, factory.LogsExporterStability())
_, err = factory.CreateLogsExporter(context.Background(), component.ExporterCreateSettings{}, &defaultCfg)
assert.NoError(t, err)
}
func createTracesExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.TracesExporter, error) {
return nil, nil
}
func createMetricsExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.MetricsExporter, error) {
return nil, nil
}
func createLogsExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.LogsExporter, error) {
return nil, nil
}

View File

@ -62,9 +62,7 @@ func MakeProcessorFactoryMap(factories ...ProcessorFactory) (map[Type]ProcessorF
return fMap, nil return fMap, nil
} }
// MakeExporterFactoryMap takes a list of exporter factories and returns a map // Deprecated: [v0.67.0] use exporter.MakeFactoryMap
// with factory type as keys. It returns a non-nil error when more than one factories
// have the same type.
func MakeExporterFactoryMap(factories ...ExporterFactory) (map[Type]ExporterFactory, error) { func MakeExporterFactoryMap(factories ...ExporterFactory) (map[Type]ExporterFactory, error) {
fMap := map[Type]ExporterFactory{} fMap := map[Type]ExporterFactory{}
for _, f := range factories { for _, f := range factories {

View File

@ -95,41 +95,3 @@ func TestMakeProcessorFactoryMap(t *testing.T) {
}) })
} }
} }
func TestMakeExporterFactoryMap(t *testing.T) {
type testCase struct {
name string
in []ExporterFactory
out map[Type]ExporterFactory
}
p1 := NewExporterFactory("p1", nil)
p2 := NewExporterFactory("p2", nil)
testCases := []testCase{
{
name: "different names",
in: []ExporterFactory{p1, p2},
out: map[Type]ExporterFactory{
p1.Type(): p1,
p2.Type(): p2,
},
},
{
name: "same name",
in: []ExporterFactory{p1, p2, NewExporterFactory("p1", nil)},
},
}
for i := range testCases {
tt := testCases[i]
t.Run(tt.name, func(t *testing.T) {
out, err := MakeExporterFactoryMap(tt.in...)
if tt.out == nil {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tt.out, out)
})
}
}

66
exporter/exporter.go Normal file
View File

@ -0,0 +1,66 @@
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package exporter // import "go.opentelemetry.io/collector/exporter"
import (
"go.opentelemetry.io/collector/component"
)
// Traces is an exporter that can consume traces.
type Traces = component.TracesExporter //nolint:staticcheck
// Metrics is an exporter that can consume metrics.
type Metrics = component.MetricsExporter //nolint:staticcheck
// Logs is an exporter that can consume logs.
type Logs = component.LogsExporter //nolint:staticcheck
// CreateSettings configures exporter creators.
type CreateSettings = component.ExporterCreateSettings //nolint:staticcheck
// Factory is factory interface for exporters.
//
// This interface cannot be directly implemented. Implementations must
// use the NewFactory to implement it.
type Factory = component.ExporterFactory //nolint:staticcheck
// FactoryOption apply changes to Factory.
type FactoryOption = component.ExporterFactoryOption //nolint:staticcheck
// CreateTracesFunc is the equivalent of Factory.CreateTraces.
type CreateTracesFunc = component.CreateTracesExporterFunc //nolint:staticcheck
// CreateMetricsFunc is the equivalent of Factory.CreateMetrics.
type CreateMetricsFunc = component.CreateMetricsExporterFunc //nolint:staticcheck
// CreateLogsFunc is the equivalent of Factory.CreateLogs.
type CreateLogsFunc = component.CreateLogsExporterFunc //nolint:staticcheck
// WithTraces overrides the default "error not supported" implementation for CreateTracesExporter and the default "undefined" stability level.
var WithTraces = component.WithTracesExporter //nolint:staticcheck
// WithMetrics overrides the default "error not supported" implementation for CreateMetricsExporter and the default "undefined" stability level.
var WithMetrics = component.WithMetricsExporter //nolint:staticcheck
// WithLogs overrides the default "error not supported" implementation for CreateLogsExporter and the default "undefined" stability level.
var WithLogs = component.WithLogsExporter //nolint:staticcheck
// NewFactory returns a Factory.
var NewFactory = component.NewExporterFactory //nolint:staticcheck
// MakeFactoryMap takes a list of exporter factories and returns a map
// with factory type as keys. It returns a non-nil error when more than one factories
// have the same type.
var MakeFactoryMap = component.MakeExporterFactoryMap //nolint:staticcheck

118
exporter/exporter_test.go Normal file
View File

@ -0,0 +1,118 @@
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// TODO: Move tests back to component package after config.*Settings are removed.
package exporter
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config"
)
func TestNewFactory(t *testing.T) {
const typeStr = "test"
defaultCfg := config.NewExporterSettings(component.NewID(typeStr))
factory := NewFactory(
typeStr,
func() component.Config { return &defaultCfg })
assert.EqualValues(t, typeStr, factory.Type())
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
_, err := factory.CreateTracesExporter(context.Background(), CreateSettings{}, &defaultCfg)
assert.Error(t, err)
_, err = factory.CreateMetricsExporter(context.Background(), CreateSettings{}, &defaultCfg)
assert.Error(t, err)
_, err = factory.CreateLogsExporter(context.Background(), CreateSettings{}, &defaultCfg)
assert.Error(t, err)
}
func TestNewFactoryWithOptions(t *testing.T) {
const typeStr = "test"
defaultCfg := config.NewExporterSettings(component.NewID(typeStr))
factory := NewFactory(
typeStr,
func() component.Config { return &defaultCfg },
WithTraces(createTracesExporter, component.StabilityLevelDevelopment),
WithMetrics(createMetricsExporter, component.StabilityLevelAlpha),
WithLogs(createLogsExporter, component.StabilityLevelDeprecated))
assert.EqualValues(t, typeStr, factory.Type())
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
assert.Equal(t, component.StabilityLevelDevelopment, factory.TracesExporterStability())
_, err := factory.CreateTracesExporter(context.Background(), CreateSettings{}, &defaultCfg)
assert.NoError(t, err)
assert.Equal(t, component.StabilityLevelAlpha, factory.MetricsExporterStability())
_, err = factory.CreateMetricsExporter(context.Background(), CreateSettings{}, &defaultCfg)
assert.NoError(t, err)
assert.Equal(t, component.StabilityLevelDeprecated, factory.LogsExporterStability())
_, err = factory.CreateLogsExporter(context.Background(), CreateSettings{}, &defaultCfg)
assert.NoError(t, err)
}
func TestMakeFactoryMap(t *testing.T) {
type testCase struct {
name string
in []Factory
out map[component.Type]Factory
}
p1 := NewFactory("p1", nil)
p2 := NewFactory("p2", nil)
testCases := []testCase{
{
name: "different names",
in: []Factory{p1, p2},
out: map[component.Type]Factory{
p1.Type(): p1,
p2.Type(): p2,
},
},
{
name: "same name",
in: []Factory{p1, p2, NewFactory("p1", nil)},
},
}
for i := range testCases {
tt := testCases[i]
t.Run(tt.name, func(t *testing.T) {
out, err := MakeFactoryMap(tt.in...)
if tt.out == nil {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tt.out, out)
})
}
}
func createTracesExporter(context.Context, CreateSettings, component.Config) (Traces, error) {
return nil, nil
}
func createMetricsExporter(context.Context, CreateSettings, component.Config) (Metrics, error) {
return nil, nil
}
func createLogsExporter(context.Context, CreateSettings, component.Config) (Logs, error) {
return nil, nil
}

View File

@ -20,6 +20,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal"
"go.opentelemetry.io/collector/obsreport" "go.opentelemetry.io/collector/obsreport"
) )
@ -155,7 +156,7 @@ type baseExporter struct {
qrSender *queuedRetrySender qrSender *queuedRetrySender
} }
func newBaseExporter(set component.ExporterCreateSettings, bs *baseSettings, signal component.DataType, reqUnmarshaler internal.RequestUnmarshaler) (*baseExporter, error) { func newBaseExporter(set exporter.CreateSettings, bs *baseSettings, signal component.DataType, reqUnmarshaler internal.RequestUnmarshaler) (*baseExporter, error) {
be := &baseExporter{} be := &baseExporter{}
var err error var err error

View File

@ -26,13 +26,14 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal"
"go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/pdata/ptrace"
) )
var ( var (
defaultID = component.NewID("test") defaultID = component.NewID("test")
defaultSettings = func() component.ExporterCreateSettings { defaultSettings = func() exporter.CreateSettings {
set := componenttest.NewNopExporterCreateSettings() set := componenttest.NewNopExporterCreateSettings()
set.ID = defaultID set.ID = defaultID
return set return set

View File

@ -21,6 +21,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal"
"go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/plog"
) )
@ -77,14 +78,14 @@ type logsExporter struct {
consumer.Logs consumer.Logs
} }
// NewLogsExporter creates a component.LogsExporter that records observability metrics and wraps every request with a Span. // NewLogsExporter creates a exporter.Logs that records observability metrics and wraps every request with a Span.
func NewLogsExporter( func NewLogsExporter(
_ context.Context, _ context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
pusher consumer.ConsumeLogsFunc, pusher consumer.ConsumeLogsFunc,
options ...Option, options ...Option,
) (component.LogsExporter, error) { ) (exporter.Logs, error) {
if cfg == nil { if cfg == nil {
return nil, errNilConfig return nil, errNilConfig
} }

View File

@ -31,6 +31,7 @@ import (
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics" "go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics"
"go.opentelemetry.io/collector/internal/testdata" "go.opentelemetry.io/collector/internal/testdata"
"go.opentelemetry.io/collector/obsreport/obsreporttest" "go.opentelemetry.io/collector/obsreport/obsreporttest"
@ -65,7 +66,7 @@ func TestLogsExporter_InvalidName(t *testing.T) {
} }
func TestLogsExporter_NilLogger(t *testing.T) { func TestLogsExporter_NilLogger(t *testing.T) {
le, err := NewLogsExporter(context.Background(), component.ExporterCreateSettings{}, &fakeLogsExporterConfig, newPushLogsData(nil)) le, err := NewLogsExporter(context.Background(), exporter.CreateSettings{}, &fakeLogsExporterConfig, newPushLogsData(nil))
require.Nil(t, le) require.Nil(t, le)
require.Equal(t, errNilLogger, err) require.Equal(t, errNilLogger, err)
} }
@ -212,7 +213,7 @@ func newPushLogsData(retError error) consumer.ConsumeLogsFunc {
} }
} }
func checkRecordedMetricsForLogsExporter(t *testing.T, tt obsreporttest.TestTelemetry, le component.LogsExporter, wantError error) { func checkRecordedMetricsForLogsExporter(t *testing.T, tt obsreporttest.TestTelemetry, le exporter.Logs, wantError error) {
ld := testdata.GenerateLogs(2) ld := testdata.GenerateLogs(2)
const numBatches = 7 const numBatches = 7
for i := 0; i < numBatches; i++ { for i := 0; i < numBatches; i++ {
@ -227,7 +228,7 @@ func checkRecordedMetricsForLogsExporter(t *testing.T, tt obsreporttest.TestTele
} }
} }
func generateLogsTraffic(t *testing.T, tracer trace.Tracer, le component.LogsExporter, numRequests int, wantError error) { func generateLogsTraffic(t *testing.T, tracer trace.Tracer, le exporter.Logs, numRequests int, wantError error) {
ld := testdata.GenerateLogs(1) ld := testdata.GenerateLogs(1)
ctx, span := tracer.Start(context.Background(), fakeLogsParentSpanName) ctx, span := tracer.Start(context.Background(), fakeLogsParentSpanName)
defer span.End() defer span.End()
@ -236,7 +237,7 @@ func generateLogsTraffic(t *testing.T, tracer trace.Tracer, le component.LogsExp
} }
} }
func checkWrapSpanForLogsExporter(t *testing.T, sr *tracetest.SpanRecorder, tracer trace.Tracer, le component.LogsExporter, wantError error, numLogRecords int64) { func checkWrapSpanForLogsExporter(t *testing.T, sr *tracetest.SpanRecorder, tracer trace.Tracer, le exporter.Logs, wantError error, numLogRecords int64) {
const numRequests = 5 const numRequests = 5
generateLogsTraffic(t, tracer, le, numRequests, wantError) generateLogsTraffic(t, tracer, le, numRequests, wantError)

View File

@ -21,6 +21,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal"
"go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/pmetric"
) )
@ -78,14 +79,14 @@ type metricsExporter struct {
consumer.Metrics consumer.Metrics
} }
// NewMetricsExporter creates a component.MetricsExporter that records observability metrics and wraps every request with a Span. // NewMetricsExporter creates a exporter.Metrics that records observability metrics and wraps every request with a Span.
func NewMetricsExporter( func NewMetricsExporter(
_ context.Context, _ context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
pusher consumer.ConsumeMetricsFunc, pusher consumer.ConsumeMetricsFunc,
options ...Option, options ...Option,
) (component.MetricsExporter, error) { ) (exporter.Metrics, error) {
if cfg == nil { if cfg == nil {
return nil, errNilConfig return nil, errNilConfig
} }

View File

@ -31,6 +31,7 @@ import (
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics" "go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics"
"go.opentelemetry.io/collector/internal/testdata" "go.opentelemetry.io/collector/internal/testdata"
"go.opentelemetry.io/collector/obsreport/obsreporttest" "go.opentelemetry.io/collector/obsreport/obsreporttest"
@ -64,7 +65,7 @@ func TestMetricsExporter_InvalidName(t *testing.T) {
} }
func TestMetricsExporter_NilLogger(t *testing.T) { func TestMetricsExporter_NilLogger(t *testing.T) {
me, err := NewMetricsExporter(context.Background(), component.ExporterCreateSettings{}, &fakeMetricsExporterConfig, newPushMetricsData(nil)) me, err := NewMetricsExporter(context.Background(), exporter.CreateSettings{}, &fakeMetricsExporterConfig, newPushMetricsData(nil))
require.Nil(t, me) require.Nil(t, me)
require.Equal(t, errNilLogger, err) require.Equal(t, errNilLogger, err)
} }
@ -213,7 +214,7 @@ func newPushMetricsData(retError error) consumer.ConsumeMetricsFunc {
} }
} }
func checkRecordedMetricsForMetricsExporter(t *testing.T, tt obsreporttest.TestTelemetry, me component.MetricsExporter, wantError error) { func checkRecordedMetricsForMetricsExporter(t *testing.T, tt obsreporttest.TestTelemetry, me exporter.Metrics, wantError error) {
md := testdata.GenerateMetrics(2) md := testdata.GenerateMetrics(2)
const numBatches = 7 const numBatches = 7
for i := 0; i < numBatches; i++ { for i := 0; i < numBatches; i++ {
@ -229,7 +230,7 @@ func checkRecordedMetricsForMetricsExporter(t *testing.T, tt obsreporttest.TestT
} }
} }
func generateMetricsTraffic(t *testing.T, tracer trace.Tracer, me component.MetricsExporter, numRequests int, wantError error) { func generateMetricsTraffic(t *testing.T, tracer trace.Tracer, me exporter.Metrics, numRequests int, wantError error) {
md := testdata.GenerateMetrics(1) md := testdata.GenerateMetrics(1)
ctx, span := tracer.Start(context.Background(), fakeMetricsParentSpanName) ctx, span := tracer.Start(context.Background(), fakeMetricsParentSpanName)
defer span.End() defer span.End()
@ -238,7 +239,7 @@ func generateMetricsTraffic(t *testing.T, tracer trace.Tracer, me component.Metr
} }
} }
func checkWrapSpanForMetricsExporter(t *testing.T, sr *tracetest.SpanRecorder, tracer trace.Tracer, me component.MetricsExporter, wantError error, numMetricPoints int64) { func checkWrapSpanForMetricsExporter(t *testing.T, sr *tracetest.SpanRecorder, tracer trace.Tracer, me exporter.Metrics, wantError error, numMetricPoints int64) {
const numRequests = 5 const numRequests = 5
generateMetricsTraffic(t, tracer, me, numRequests, wantError) generateMetricsTraffic(t, tracer, me, numRequests, wantError)

View File

@ -21,6 +21,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal"
"go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/pdata/ptrace"
) )
@ -78,14 +79,14 @@ type traceExporter struct {
consumer.Traces consumer.Traces
} }
// NewTracesExporter creates a component.TracesExporter that records observability metrics and wraps every request with a Span. // NewTracesExporter creates a exporter.Traces that records observability metrics and wraps every request with a Span.
func NewTracesExporter( func NewTracesExporter(
_ context.Context, _ context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
pusher consumer.ConsumeTracesFunc, pusher consumer.ConsumeTracesFunc,
options ...Option, options ...Option,
) (component.TracesExporter, error) { ) (exporter.Traces, error) {
if cfg == nil { if cfg == nil {
return nil, errNilConfig return nil, errNilConfig
} }

View File

@ -31,6 +31,7 @@ import (
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics" "go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics"
"go.opentelemetry.io/collector/internal/testdata" "go.opentelemetry.io/collector/internal/testdata"
"go.opentelemetry.io/collector/obsreport/obsreporttest" "go.opentelemetry.io/collector/obsreport/obsreporttest"
@ -60,7 +61,7 @@ func TestTracesExporter_InvalidName(t *testing.T) {
} }
func TestTracesExporter_NilLogger(t *testing.T) { func TestTracesExporter_NilLogger(t *testing.T) {
te, err := NewTracesExporter(context.Background(), component.ExporterCreateSettings{}, &fakeTracesExporterConfig, newTraceDataPusher(nil)) te, err := NewTracesExporter(context.Background(), exporter.CreateSettings{}, &fakeTracesExporterConfig, newTraceDataPusher(nil))
require.Nil(t, te) require.Nil(t, te)
require.Equal(t, errNilLogger, err) require.Equal(t, errNilLogger, err)
} }
@ -213,7 +214,7 @@ func newTraceDataPusher(retError error) consumer.ConsumeTracesFunc {
} }
} }
func checkRecordedMetricsForTracesExporter(t *testing.T, tt obsreporttest.TestTelemetry, te component.TracesExporter, wantError error) { func checkRecordedMetricsForTracesExporter(t *testing.T, tt obsreporttest.TestTelemetry, te exporter.Traces, wantError error) {
td := testdata.GenerateTraces(2) td := testdata.GenerateTraces(2)
const numBatches = 7 const numBatches = 7
for i := 0; i < numBatches; i++ { for i := 0; i < numBatches; i++ {
@ -228,7 +229,7 @@ func checkRecordedMetricsForTracesExporter(t *testing.T, tt obsreporttest.TestTe
} }
} }
func generateTraceTraffic(t *testing.T, tracer trace.Tracer, te component.TracesExporter, numRequests int, wantError error) { func generateTraceTraffic(t *testing.T, tracer trace.Tracer, te exporter.Traces, numRequests int, wantError error) {
td := ptrace.NewTraces() td := ptrace.NewTraces()
td.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty() td.ResourceSpans().AppendEmpty().ScopeSpans().AppendEmpty().Spans().AppendEmpty()
ctx, span := tracer.Start(context.Background(), fakeTraceParentSpanName) ctx, span := tracer.Start(context.Background(), fakeTraceParentSpanName)
@ -238,7 +239,7 @@ func generateTraceTraffic(t *testing.T, tracer trace.Tracer, te component.Traces
} }
} }
func checkWrapSpanForTracesExporter(t *testing.T, sr *tracetest.SpanRecorder, tracer trace.Tracer, te component.TracesExporter, wantError error, numSpans int64) { func checkWrapSpanForTracesExporter(t *testing.T, sr *tracetest.SpanRecorder, tracer trace.Tracer, te exporter.Traces, wantError error, numSpans int64) {
const numRequests = 5 const numRequests = 5
generateTraceTraffic(t, tracer, te, numRequests, wantError) generateTraceTraffic(t, tracer, te, numRequests, wantError)

View File

@ -0,0 +1,25 @@
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package exportertest // import "go.opentelemetry.io/collector/exporter/exportertest"
import (
"go.opentelemetry.io/collector/component/componenttest"
)
// NewNopCreateSettings returns a new nop settings for Create*Exporter functions.
var NewNopCreateSettings = componenttest.NewNopExporterCreateSettings
// NewNopFactory returns an exporter.Factory that constructs nop exporters.
var NewNopFactory = componenttest.NewNopExporterFactory

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package componenttest package exportertest
import ( import (
"context" "context"
@ -22,34 +22,34 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/pdata/ptrace"
) )
func TestNewNopExporterFactory(t *testing.T) { func TestNewNopFactory(t *testing.T) {
factory := NewNopExporterFactory() factory := NewNopFactory()
require.NotNil(t, factory) require.NotNil(t, factory)
assert.Equal(t, component.Type("nop"), factory.Type()) assert.Equal(t, component.Type("nop"), factory.Type())
cfg := factory.CreateDefaultConfig() cfg := factory.CreateDefaultConfig()
assert.Equal(t, &nopExporterConfig{ExporterSettings: config.NewExporterSettings(component.NewID("nop"))}, cfg) // assert.Equal(t, &nopExporterConfig{ExporterSettings: config.NewExporterSettings(component.NewID("nop"))}, cfg)
traces, err := factory.CreateTracesExporter(context.Background(), NewNopExporterCreateSettings(), cfg) traces, err := factory.CreateTracesExporter(context.Background(), componenttest.NewNopExporterCreateSettings(), cfg)
require.NoError(t, err) require.NoError(t, err)
assert.NoError(t, traces.Start(context.Background(), NewNopHost())) assert.NoError(t, traces.Start(context.Background(), componenttest.NewNopHost()))
assert.NoError(t, traces.ConsumeTraces(context.Background(), ptrace.NewTraces())) assert.NoError(t, traces.ConsumeTraces(context.Background(), ptrace.NewTraces()))
assert.NoError(t, traces.Shutdown(context.Background())) assert.NoError(t, traces.Shutdown(context.Background()))
metrics, err := factory.CreateMetricsExporter(context.Background(), NewNopExporterCreateSettings(), cfg) metrics, err := factory.CreateMetricsExporter(context.Background(), componenttest.NewNopExporterCreateSettings(), cfg)
require.NoError(t, err) require.NoError(t, err)
assert.NoError(t, metrics.Start(context.Background(), NewNopHost())) assert.NoError(t, metrics.Start(context.Background(), componenttest.NewNopHost()))
assert.NoError(t, metrics.ConsumeMetrics(context.Background(), pmetric.NewMetrics())) assert.NoError(t, metrics.ConsumeMetrics(context.Background(), pmetric.NewMetrics()))
assert.NoError(t, metrics.Shutdown(context.Background())) assert.NoError(t, metrics.Shutdown(context.Background()))
logs, err := factory.CreateLogsExporter(context.Background(), NewNopExporterCreateSettings(), cfg) logs, err := factory.CreateLogsExporter(context.Background(), componenttest.NewNopExporterCreateSettings(), cfg)
require.NoError(t, err) require.NoError(t, err)
assert.NoError(t, logs.Start(context.Background(), NewNopHost())) assert.NoError(t, logs.Start(context.Background(), componenttest.NewNopHost()))
assert.NoError(t, logs.ConsumeLogs(context.Background(), plog.NewLogs())) assert.NoError(t, logs.ConsumeLogs(context.Background(), plog.NewLogs()))
assert.NoError(t, logs.Shutdown(context.Background())) assert.NoError(t, logs.Shutdown(context.Background()))
} }

View File

@ -26,6 +26,7 @@ import (
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/exporter/exporterhelper"
) )
@ -39,13 +40,13 @@ const (
var onceWarnLogLevel sync.Once var onceWarnLogLevel sync.Once
// NewFactory creates a factory for Logging exporter // NewFactory creates a factory for Logging exporter
func NewFactory() component.ExporterFactory { func NewFactory() exporter.Factory {
return component.NewExporterFactory( return exporter.NewFactory(
typeStr, typeStr,
createDefaultConfig, createDefaultConfig,
component.WithTracesExporter(createTracesExporter, component.StabilityLevelDevelopment), exporter.WithTraces(createTracesExporter, component.StabilityLevelDevelopment),
component.WithMetricsExporter(createMetricsExporter, component.StabilityLevelDevelopment), exporter.WithMetrics(createMetricsExporter, component.StabilityLevelDevelopment),
component.WithLogsExporter(createLogsExporter, component.StabilityLevelDevelopment), exporter.WithLogs(createLogsExporter, component.StabilityLevelDevelopment),
) )
} }
@ -59,7 +60,7 @@ func createDefaultConfig() component.Config {
} }
} }
func createTracesExporter(ctx context.Context, set component.ExporterCreateSettings, config component.Config) (component.TracesExporter, error) { func createTracesExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Traces, error) {
cfg := config.(*Config) cfg := config.(*Config)
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger) exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
s := newLoggingExporter(exporterLogger, cfg.Verbosity) s := newLoggingExporter(exporterLogger, cfg.Verbosity)
@ -74,7 +75,7 @@ func createTracesExporter(ctx context.Context, set component.ExporterCreateSetti
) )
} }
func createMetricsExporter(ctx context.Context, set component.ExporterCreateSettings, config component.Config) (component.MetricsExporter, error) { func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Metrics, error) {
cfg := config.(*Config) cfg := config.(*Config)
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger) exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
s := newLoggingExporter(exporterLogger, cfg.Verbosity) s := newLoggingExporter(exporterLogger, cfg.Verbosity)
@ -89,7 +90,7 @@ func createMetricsExporter(ctx context.Context, set component.ExporterCreateSett
) )
} }
func createLogsExporter(ctx context.Context, set component.ExporterCreateSettings, config component.Config) (component.LogsExporter, error) { func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Logs, error) {
cfg := config.(*Config) cfg := config.(*Config)
exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger) exporterLogger := createLogger(cfg, set.TelemetrySettings.Logger)
s := newLoggingExporter(exporterLogger, cfg.Verbosity) s := newLoggingExporter(exporterLogger, cfg.Verbosity)

View File

@ -22,6 +22,7 @@ import (
"go.opentelemetry.io/collector/config/configcompression" "go.opentelemetry.io/collector/config/configcompression"
"go.opentelemetry.io/collector/config/configgrpc" "go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/exporter/exporterhelper"
) )
@ -31,13 +32,13 @@ const (
) )
// NewFactory creates a factory for OTLP exporter. // NewFactory creates a factory for OTLP exporter.
func NewFactory() component.ExporterFactory { func NewFactory() exporter.Factory {
return component.NewExporterFactory( return exporter.NewFactory(
typeStr, typeStr,
createDefaultConfig, createDefaultConfig,
component.WithTracesExporter(createTracesExporter, component.StabilityLevelStable), exporter.WithTraces(createTracesExporter, component.StabilityLevelStable),
component.WithMetricsExporter(createMetricsExporter, component.StabilityLevelStable), exporter.WithMetrics(createMetricsExporter, component.StabilityLevelStable),
component.WithLogsExporter(createLogsExporter, component.StabilityLevelBeta), exporter.WithLogs(createLogsExporter, component.StabilityLevelBeta),
) )
} }
@ -59,9 +60,9 @@ func createDefaultConfig() component.Config {
func createTracesExporter( func createTracesExporter(
ctx context.Context, ctx context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
) (component.TracesExporter, error) { ) (exporter.Traces, error) {
oce, err := newExporter(cfg, set) oce, err := newExporter(cfg, set)
if err != nil { if err != nil {
return nil, err return nil, err
@ -79,9 +80,9 @@ func createTracesExporter(
func createMetricsExporter( func createMetricsExporter(
ctx context.Context, ctx context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
) (component.MetricsExporter, error) { ) (exporter.Metrics, error) {
oce, err := newExporter(cfg, set) oce, err := newExporter(cfg, set)
if err != nil { if err != nil {
return nil, err return nil, err
@ -100,9 +101,9 @@ func createMetricsExporter(
func createLogsExporter( func createLogsExporter(
ctx context.Context, ctx context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
) (component.LogsExporter, error) { ) (exporter.Logs, error) {
oce, err := newExporter(cfg, set) oce, err := newExporter(cfg, set)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -29,6 +29,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/plog/plogotlp" "go.opentelemetry.io/collector/pdata/plog/plogotlp"
@ -38,7 +39,7 @@ import (
"go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp" "go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp"
) )
type exporter struct { type baseExporter struct {
// Input configuration. // Input configuration.
config *Config config *Config
@ -58,7 +59,7 @@ type exporter struct {
// Crete new exporter and start it. The exporter will begin connecting but // Crete new exporter and start it. The exporter will begin connecting but
// this function may return before the connection is established. // this function may return before the connection is established.
func newExporter(cfg component.Config, set component.ExporterCreateSettings) (*exporter, error) { func newExporter(cfg component.Config, set exporter.CreateSettings) (*baseExporter, error) {
oCfg := cfg.(*Config) oCfg := cfg.(*Config)
if oCfg.Endpoint == "" { if oCfg.Endpoint == "" {
@ -68,12 +69,12 @@ func newExporter(cfg component.Config, set component.ExporterCreateSettings) (*e
userAgent := fmt.Sprintf("%s/%s (%s/%s)", userAgent := fmt.Sprintf("%s/%s (%s/%s)",
set.BuildInfo.Description, set.BuildInfo.Version, runtime.GOOS, runtime.GOARCH) set.BuildInfo.Description, set.BuildInfo.Version, runtime.GOOS, runtime.GOARCH)
return &exporter{config: oCfg, settings: set.TelemetrySettings, userAgent: userAgent}, nil return &baseExporter{config: oCfg, settings: set.TelemetrySettings, userAgent: userAgent}, nil
} }
// start actually creates the gRPC connection. The client construction is deferred till this point as this // start actually creates the gRPC connection. The client construction is deferred till this point as this
// is the only place we get hold of Extensions which are required to construct auth round tripper. // is the only place we get hold of Extensions which are required to construct auth round tripper.
func (e *exporter) start(ctx context.Context, host component.Host) (err error) { func (e *baseExporter) start(ctx context.Context, host component.Host) (err error) {
if e.clientConn, err = e.config.GRPCClientSettings.ToClientConn(ctx, host, e.settings, grpc.WithUserAgent(e.userAgent)); err != nil { if e.clientConn, err = e.config.GRPCClientSettings.ToClientConn(ctx, host, e.settings, grpc.WithUserAgent(e.userAgent)); err != nil {
return err return err
} }
@ -88,32 +89,32 @@ func (e *exporter) start(ctx context.Context, host component.Host) (err error) {
return return
} }
func (e *exporter) shutdown(context.Context) error { func (e *baseExporter) shutdown(context.Context) error {
if e.clientConn != nil { if e.clientConn != nil {
return e.clientConn.Close() return e.clientConn.Close()
} }
return nil return nil
} }
func (e *exporter) pushTraces(ctx context.Context, td ptrace.Traces) error { func (e *baseExporter) pushTraces(ctx context.Context, td ptrace.Traces) error {
req := ptraceotlp.NewExportRequestFromTraces(td) req := ptraceotlp.NewExportRequestFromTraces(td)
_, err := e.traceExporter.Export(e.enhanceContext(ctx), req, e.callOptions...) _, err := e.traceExporter.Export(e.enhanceContext(ctx), req, e.callOptions...)
return processError(err) return processError(err)
} }
func (e *exporter) pushMetrics(ctx context.Context, md pmetric.Metrics) error { func (e *baseExporter) pushMetrics(ctx context.Context, md pmetric.Metrics) error {
req := pmetricotlp.NewExportRequestFromMetrics(md) req := pmetricotlp.NewExportRequestFromMetrics(md)
_, err := e.metricExporter.Export(e.enhanceContext(ctx), req, e.callOptions...) _, err := e.metricExporter.Export(e.enhanceContext(ctx), req, e.callOptions...)
return processError(err) return processError(err)
} }
func (e *exporter) pushLogs(ctx context.Context, ld plog.Logs) error { func (e *baseExporter) pushLogs(ctx context.Context, ld plog.Logs) error {
req := plogotlp.NewExportRequestFromLogs(ld) req := plogotlp.NewExportRequestFromLogs(ld)
_, err := e.logExporter.Export(e.enhanceContext(ctx), req, e.callOptions...) _, err := e.logExporter.Export(e.enhanceContext(ctx), req, e.callOptions...)
return processError(err) return processError(err)
} }
func (e *exporter) enhanceContext(ctx context.Context) context.Context { func (e *baseExporter) enhanceContext(ctx context.Context) context.Context {
if e.metadata.Len() > 0 { if e.metadata.Len() > 0 {
return metadata.NewOutgoingContext(ctx, e.metadata) return metadata.NewOutgoingContext(ctx, e.metadata)
} }

View File

@ -34,10 +34,10 @@ import (
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/durationpb" "google.golang.org/protobuf/types/known/durationpb"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/configgrpc" "go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/config/configtls" "go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/internal/testdata" "go.opentelemetry.io/collector/internal/testdata"
"go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/plog/plogotlp" "go.opentelemetry.io/collector/pdata/plog/plogotlp"
@ -586,7 +586,7 @@ func TestSendTracesOnResourceExhaustion(t *testing.T) {
}, 10*time.Second, 5*time.Millisecond, "Should retry if RetryInfo is included into status details by the server.") }, 10*time.Second, 5*time.Millisecond, "Should retry if RetryInfo is included into status details by the server.")
} }
func startServerAndMakeRequest(t *testing.T, exp component.TracesExporter, td ptrace.Traces, ln net.Listener) { func startServerAndMakeRequest(t *testing.T, exp exporter.Traces, td ptrace.Traces, ln net.Listener) {
rcv, _ := otlpTracesReceiverOnGRPCServer(ln, false) rcv, _ := otlpTracesReceiverOnGRPCServer(ln, false)
defer rcv.srv.GracefulStop() defer rcv.srv.GracefulStop()
// Ensure that initially there is no data in the receiver. // Ensure that initially there is no data in the receiver.

View File

@ -25,6 +25,7 @@ import (
"go.opentelemetry.io/collector/config/configcompression" "go.opentelemetry.io/collector/config/configcompression"
"go.opentelemetry.io/collector/config/confighttp" "go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/exporter/exporterhelper"
) )
@ -34,13 +35,13 @@ const (
) )
// NewFactory creates a factory for OTLP exporter. // NewFactory creates a factory for OTLP exporter.
func NewFactory() component.ExporterFactory { func NewFactory() exporter.Factory {
return component.NewExporterFactory( return exporter.NewFactory(
typeStr, typeStr,
createDefaultConfig, createDefaultConfig,
component.WithTracesExporter(createTracesExporter, component.StabilityLevelStable), exporter.WithTraces(createTracesExporter, component.StabilityLevelStable),
component.WithMetricsExporter(createMetricsExporter, component.StabilityLevelStable), exporter.WithMetrics(createMetricsExporter, component.StabilityLevelStable),
component.WithLogsExporter(createLogsExporter, component.StabilityLevelBeta), exporter.WithLogs(createLogsExporter, component.StabilityLevelBeta),
) )
} }
@ -78,9 +79,9 @@ func composeSignalURL(oCfg *Config, signalOverrideURL string, signalName string)
func createTracesExporter( func createTracesExporter(
ctx context.Context, ctx context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
) (component.TracesExporter, error) { ) (exporter.Traces, error) {
oce, err := newExporter(cfg, set) oce, err := newExporter(cfg, set)
if err != nil { if err != nil {
return nil, err return nil, err
@ -104,9 +105,9 @@ func createTracesExporter(
func createMetricsExporter( func createMetricsExporter(
ctx context.Context, ctx context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
) (component.MetricsExporter, error) { ) (exporter.Metrics, error) {
oce, err := newExporter(cfg, set) oce, err := newExporter(cfg, set)
if err != nil { if err != nil {
return nil, err return nil, err
@ -130,9 +131,9 @@ func createMetricsExporter(
func createLogsExporter( func createLogsExporter(
ctx context.Context, ctx context.Context,
set component.ExporterCreateSettings, set exporter.CreateSettings,
cfg component.Config, cfg component.Config,
) (component.LogsExporter, error) { ) (exporter.Logs, error) {
oce, err := newExporter(cfg, set) oce, err := newExporter(cfg, set)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -32,6 +32,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/plog/plogotlp" "go.opentelemetry.io/collector/pdata/plog/plogotlp"
@ -41,7 +42,7 @@ import (
"go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp" "go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp"
) )
type exporter struct { type baseExporter struct {
// Input configuration. // Input configuration.
config *Config config *Config
client *http.Client client *http.Client
@ -60,7 +61,7 @@ const (
) )
// Create new exporter. // Create new exporter.
func newExporter(cfg component.Config, set component.ExporterCreateSettings) (*exporter, error) { func newExporter(cfg component.Config, set exporter.CreateSettings) (*baseExporter, error) {
oCfg := cfg.(*Config) oCfg := cfg.(*Config)
if oCfg.Endpoint != "" { if oCfg.Endpoint != "" {
@ -74,7 +75,7 @@ func newExporter(cfg component.Config, set component.ExporterCreateSettings) (*e
set.BuildInfo.Description, set.BuildInfo.Version, runtime.GOOS, runtime.GOARCH) set.BuildInfo.Description, set.BuildInfo.Version, runtime.GOOS, runtime.GOARCH)
// client construction is deferred to start // client construction is deferred to start
return &exporter{ return &baseExporter{
config: oCfg, config: oCfg,
logger: set.Logger, logger: set.Logger,
userAgent: userAgent, userAgent: userAgent,
@ -84,7 +85,7 @@ func newExporter(cfg component.Config, set component.ExporterCreateSettings) (*e
// start actually creates the HTTP client. The client construction is deferred till this point as this // start actually creates the HTTP client. The client construction is deferred till this point as this
// is the only place we get hold of Extensions which are required to construct auth round tripper. // is the only place we get hold of Extensions which are required to construct auth round tripper.
func (e *exporter) start(_ context.Context, host component.Host) error { func (e *baseExporter) start(_ context.Context, host component.Host) error {
client, err := e.config.HTTPClientSettings.ToClient(host, e.settings) client, err := e.config.HTTPClientSettings.ToClient(host, e.settings)
if err != nil { if err != nil {
return err return err
@ -93,7 +94,7 @@ func (e *exporter) start(_ context.Context, host component.Host) error {
return nil return nil
} }
func (e *exporter) pushTraces(ctx context.Context, td ptrace.Traces) error { func (e *baseExporter) pushTraces(ctx context.Context, td ptrace.Traces) error {
tr := ptraceotlp.NewExportRequestFromTraces(td) tr := ptraceotlp.NewExportRequestFromTraces(td)
request, err := tr.MarshalProto() request, err := tr.MarshalProto()
if err != nil { if err != nil {
@ -103,7 +104,7 @@ func (e *exporter) pushTraces(ctx context.Context, td ptrace.Traces) error {
return e.export(ctx, e.tracesURL, request) return e.export(ctx, e.tracesURL, request)
} }
func (e *exporter) pushMetrics(ctx context.Context, md pmetric.Metrics) error { func (e *baseExporter) pushMetrics(ctx context.Context, md pmetric.Metrics) error {
tr := pmetricotlp.NewExportRequestFromMetrics(md) tr := pmetricotlp.NewExportRequestFromMetrics(md)
request, err := tr.MarshalProto() request, err := tr.MarshalProto()
if err != nil { if err != nil {
@ -112,7 +113,7 @@ func (e *exporter) pushMetrics(ctx context.Context, md pmetric.Metrics) error {
return e.export(ctx, e.metricsURL, request) return e.export(ctx, e.metricsURL, request)
} }
func (e *exporter) pushLogs(ctx context.Context, ld plog.Logs) error { func (e *baseExporter) pushLogs(ctx context.Context, ld plog.Logs) error {
tr := plogotlp.NewExportRequestFromLogs(ld) tr := plogotlp.NewExportRequestFromLogs(ld)
request, err := tr.MarshalProto() request, err := tr.MarshalProto()
if err != nil { if err != nil {
@ -122,7 +123,7 @@ func (e *exporter) pushLogs(ctx context.Context, ld plog.Logs) error {
return e.export(ctx, e.logsURL, request) return e.export(ctx, e.logsURL, request)
} }
func (e *exporter) export(ctx context.Context, url string, request []byte) error { func (e *baseExporter) export(ctx context.Context, url string, request []byte) error {
e.logger.Debug("Preparing to make HTTP request", zap.String("url", url)) e.logger.Debug("Preparing to make HTTP request", zap.String("url", url))
req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(request)) req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(request))
if err != nil { if err != nil {

View File

@ -42,6 +42,7 @@ import (
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumererror" "go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/consumer/consumertest"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/internal/testdata" "go.opentelemetry.io/collector/internal/testdata"
"go.opentelemetry.io/collector/internal/testutil" "go.opentelemetry.io/collector/internal/testutil"
@ -302,7 +303,7 @@ func TestIssue_4221(t *testing.T) {
assert.NoError(t, exp.ConsumeTraces(context.Background(), md)) assert.NoError(t, exp.ConsumeTraces(context.Background(), md))
} }
func startTracesExporter(t *testing.T, baseURL string, overrideURL string) component.TracesExporter { func startTracesExporter(t *testing.T, baseURL string, overrideURL string) exporter.Traces {
factory := NewFactory() factory := NewFactory()
cfg := createExporterConfig(baseURL, factory.CreateDefaultConfig()) cfg := createExporterConfig(baseURL, factory.CreateDefaultConfig())
cfg.TracesEndpoint = overrideURL cfg.TracesEndpoint = overrideURL
@ -312,7 +313,7 @@ func startTracesExporter(t *testing.T, baseURL string, overrideURL string) compo
return exp return exp
} }
func startMetricsExporter(t *testing.T, baseURL string, overrideURL string) component.MetricsExporter { func startMetricsExporter(t *testing.T, baseURL string, overrideURL string) exporter.Metrics {
factory := NewFactory() factory := NewFactory()
cfg := createExporterConfig(baseURL, factory.CreateDefaultConfig()) cfg := createExporterConfig(baseURL, factory.CreateDefaultConfig())
cfg.MetricsEndpoint = overrideURL cfg.MetricsEndpoint = overrideURL
@ -322,7 +323,7 @@ func startMetricsExporter(t *testing.T, baseURL string, overrideURL string) comp
return exp return exp
} }
func startLogsExporter(t *testing.T, baseURL string, overrideURL string) component.LogsExporter { func startLogsExporter(t *testing.T, baseURL string, overrideURL string) exporter.Logs {
factory := NewFactory() factory := NewFactory()
cfg := createExporterConfig(baseURL, factory.CreateDefaultConfig()) cfg := createExporterConfig(baseURL, factory.CreateDefaultConfig())
cfg.LogsEndpoint = overrideURL cfg.LogsEndpoint = overrideURL

View File

@ -29,6 +29,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/featuregate"
"go.opentelemetry.io/collector/internal/obsreportconfig" "go.opentelemetry.io/collector/internal/obsreportconfig"
"go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics" "go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics"
@ -61,7 +62,7 @@ type Exporter struct {
// ExporterSettings are settings for creating an Exporter. // ExporterSettings are settings for creating an Exporter.
type ExporterSettings struct { type ExporterSettings struct {
ExporterID component.ID ExporterID component.ID
ExporterCreateSettings component.ExporterCreateSettings ExporterCreateSettings exporter.CreateSettings
} }
// NewExporter creates a new Exporter. // NewExporter creates a new Exporter.

View File

@ -38,10 +38,10 @@ const (
) )
var ( var (
receiver = component.NewID("fakeReceiver") receiverID = component.NewID("fakeReceiver")
scraper = component.NewID("fakeScraper") scraperID = component.NewID("fakeScraper")
processor = component.NewID("fakeProcessor") processorID = component.NewID("fakeProcessor")
exporter = component.NewID("fakeExporter") exporterID = component.NewID("fakeExporter")
errFake = errors.New("errFake") errFake = errors.New("errFake")
partialErrFake = scrapererror.NewPartialScrapeError(errFake, 1) partialErrFake = scrapererror.NewPartialScrapeError(errFake, 1)
@ -75,7 +75,7 @@ func testTelemetry(t *testing.T, id component.ID, testFunc func(t *testing.T, tt
} }
func TestReceiveTraceDataOp(t *testing.T) { func TestReceiveTraceDataOp(t *testing.T) {
testTelemetry(t, receiver, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { testTelemetry(t, receiverID, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name()) parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End() defer parentSpan.End()
@ -85,7 +85,7 @@ func TestReceiveTraceDataOp(t *testing.T) {
} }
for i, param := range params { for i, param := range params {
rec, err := newReceiver(ReceiverSettings{ rec, err := newReceiver(ReceiverSettings{
ReceiverID: receiver, ReceiverID: receiverID,
Transport: transport, Transport: transport,
ReceiverCreateSettings: tt.ToReceiverCreateSettings(), ReceiverCreateSettings: tt.ToReceiverCreateSettings(),
}, registry) }, registry)
@ -100,7 +100,7 @@ func TestReceiveTraceDataOp(t *testing.T) {
var acceptedSpans, refusedSpans int var acceptedSpans, refusedSpans int
for i, span := range spans { for i, span := range spans {
assert.Equal(t, "receiver/"+receiver.String()+"/TraceDataReceived", span.Name()) assert.Equal(t, "receiver/"+receiverID.String()+"/TraceDataReceived", span.Name())
switch { switch {
case params[i].err == nil: case params[i].err == nil:
acceptedSpans += params[i].items acceptedSpans += params[i].items
@ -122,7 +122,7 @@ func TestReceiveTraceDataOp(t *testing.T) {
} }
func TestReceiveLogsOp(t *testing.T) { func TestReceiveLogsOp(t *testing.T) {
testTelemetry(t, receiver, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { testTelemetry(t, receiverID, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name()) parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End() defer parentSpan.End()
@ -132,7 +132,7 @@ func TestReceiveLogsOp(t *testing.T) {
} }
for i, param := range params { for i, param := range params {
rec, err := newReceiver(ReceiverSettings{ rec, err := newReceiver(ReceiverSettings{
ReceiverID: receiver, ReceiverID: receiverID,
Transport: transport, Transport: transport,
ReceiverCreateSettings: tt.ToReceiverCreateSettings(), ReceiverCreateSettings: tt.ToReceiverCreateSettings(),
}, registry) }, registry)
@ -148,7 +148,7 @@ func TestReceiveLogsOp(t *testing.T) {
var acceptedLogRecords, refusedLogRecords int var acceptedLogRecords, refusedLogRecords int
for i, span := range spans { for i, span := range spans {
assert.Equal(t, "receiver/"+receiver.String()+"/LogsReceived", span.Name()) assert.Equal(t, "receiver/"+receiverID.String()+"/LogsReceived", span.Name())
switch { switch {
case params[i].err == nil: case params[i].err == nil:
acceptedLogRecords += params[i].items acceptedLogRecords += params[i].items
@ -170,7 +170,7 @@ func TestReceiveLogsOp(t *testing.T) {
} }
func TestReceiveMetricsOp(t *testing.T) { func TestReceiveMetricsOp(t *testing.T) {
testTelemetry(t, receiver, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { testTelemetry(t, receiverID, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name()) parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End() defer parentSpan.End()
@ -180,7 +180,7 @@ func TestReceiveMetricsOp(t *testing.T) {
} }
for i, param := range params { for i, param := range params {
rec, err := newReceiver(ReceiverSettings{ rec, err := newReceiver(ReceiverSettings{
ReceiverID: receiver, ReceiverID: receiverID,
Transport: transport, Transport: transport,
ReceiverCreateSettings: tt.ToReceiverCreateSettings(), ReceiverCreateSettings: tt.ToReceiverCreateSettings(),
}, registry) }, registry)
@ -196,7 +196,7 @@ func TestReceiveMetricsOp(t *testing.T) {
var acceptedMetricPoints, refusedMetricPoints int var acceptedMetricPoints, refusedMetricPoints int
for i, span := range spans { for i, span := range spans {
assert.Equal(t, "receiver/"+receiver.String()+"/MetricsReceived", span.Name()) assert.Equal(t, "receiver/"+receiverID.String()+"/MetricsReceived", span.Name())
switch { switch {
case params[i].err == nil: case params[i].err == nil:
acceptedMetricPoints += params[i].items acceptedMetricPoints += params[i].items
@ -219,7 +219,7 @@ func TestReceiveMetricsOp(t *testing.T) {
} }
func TestScrapeMetricsDataOp(t *testing.T) { func TestScrapeMetricsDataOp(t *testing.T) {
testTelemetry(t, receiver, testScrapeMetricsDataOp) testTelemetry(t, receiverID, testScrapeMetricsDataOp)
} }
func testScrapeMetricsDataOp(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { func testScrapeMetricsDataOp(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
@ -233,8 +233,8 @@ func testScrapeMetricsDataOp(t *testing.T, tt obsreporttest.TestTelemetry, regis
} }
for i := range params { for i := range params {
scrp, err := newScraper(ScraperSettings{ scrp, err := newScraper(ScraperSettings{
ReceiverID: receiver, ReceiverID: receiverID,
Scraper: scraper, Scraper: scraperID,
ReceiverCreateSettings: tt.ToReceiverCreateSettings(), ReceiverCreateSettings: tt.ToReceiverCreateSettings(),
}, registry) }, registry)
require.NoError(t, err) require.NoError(t, err)
@ -248,7 +248,7 @@ func testScrapeMetricsDataOp(t *testing.T, tt obsreporttest.TestTelemetry, regis
var scrapedMetricPoints, erroredMetricPoints int var scrapedMetricPoints, erroredMetricPoints int
for i, span := range spans { for i, span := range spans {
assert.Equal(t, "scraper/"+receiver.String()+"/"+scraper.String()+"/MetricsScraped", span.Name()) assert.Equal(t, "scraper/"+receiverID.String()+"/"+scraperID.String()+"/MetricsScraped", span.Name())
switch { switch {
case params[i].err == nil: case params[i].err == nil:
scrapedMetricPoints += params[i].items scrapedMetricPoints += params[i].items
@ -274,16 +274,16 @@ func testScrapeMetricsDataOp(t *testing.T, tt obsreporttest.TestTelemetry, regis
} }
} }
require.NoError(t, obsreporttest.CheckScraperMetrics(tt, receiver, scraper, int64(scrapedMetricPoints), int64(erroredMetricPoints))) require.NoError(t, obsreporttest.CheckScraperMetrics(tt, receiverID, scraperID, int64(scrapedMetricPoints), int64(erroredMetricPoints)))
} }
func TestExportTraceDataOp(t *testing.T) { func TestExportTraceDataOp(t *testing.T) {
testTelemetry(t, exporter, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { testTelemetry(t, exporterID, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name()) parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End() defer parentSpan.End()
obsrep, err := newExporter(ExporterSettings{ obsrep, err := newExporter(ExporterSettings{
ExporterID: exporter, ExporterID: exporterID,
ExporterCreateSettings: tt.ToExporterCreateSettings(), ExporterCreateSettings: tt.ToExporterCreateSettings(),
}, registry) }, registry)
require.NoError(t, err) require.NoError(t, err)
@ -303,7 +303,7 @@ func TestExportTraceDataOp(t *testing.T) {
var sentSpans, failedToSendSpans int var sentSpans, failedToSendSpans int
for i, span := range spans { for i, span := range spans {
assert.Equal(t, "exporter/"+exporter.String()+"/traces", span.Name()) assert.Equal(t, "exporter/"+exporterID.String()+"/traces", span.Name())
switch { switch {
case params[i].err == nil: case params[i].err == nil:
sentSpans += params[i].items sentSpans += params[i].items
@ -327,12 +327,12 @@ func TestExportTraceDataOp(t *testing.T) {
} }
func TestExportMetricsOp(t *testing.T) { func TestExportMetricsOp(t *testing.T) {
testTelemetry(t, exporter, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { testTelemetry(t, exporterID, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name()) parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End() defer parentSpan.End()
obsrep, err := newExporter(ExporterSettings{ obsrep, err := newExporter(ExporterSettings{
ExporterID: exporter, ExporterID: exporterID,
ExporterCreateSettings: tt.ToExporterCreateSettings(), ExporterCreateSettings: tt.ToExporterCreateSettings(),
}, registry) }, registry)
require.NoError(t, err) require.NoError(t, err)
@ -353,7 +353,7 @@ func TestExportMetricsOp(t *testing.T) {
var sentMetricPoints, failedToSendMetricPoints int var sentMetricPoints, failedToSendMetricPoints int
for i, span := range spans { for i, span := range spans {
assert.Equal(t, "exporter/"+exporter.String()+"/metrics", span.Name()) assert.Equal(t, "exporter/"+exporterID.String()+"/metrics", span.Name())
switch { switch {
case params[i].err == nil: case params[i].err == nil:
sentMetricPoints += params[i].items sentMetricPoints += params[i].items
@ -376,12 +376,12 @@ func TestExportMetricsOp(t *testing.T) {
} }
func TestExportLogsOp(t *testing.T) { func TestExportLogsOp(t *testing.T) {
testTelemetry(t, exporter, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { testTelemetry(t, exporterID, func(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name()) parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End() defer parentSpan.End()
obsrep, err := newExporter(ExporterSettings{ obsrep, err := newExporter(ExporterSettings{
ExporterID: exporter, ExporterID: exporterID,
ExporterCreateSettings: tt.ToExporterCreateSettings(), ExporterCreateSettings: tt.ToExporterCreateSettings(),
}, registry) }, registry)
require.NoError(t, err) require.NoError(t, err)
@ -402,7 +402,7 @@ func TestExportLogsOp(t *testing.T) {
var sentLogRecords, failedToSendLogRecords int var sentLogRecords, failedToSendLogRecords int
for i, span := range spans { for i, span := range spans {
assert.Equal(t, "exporter/"+exporter.String()+"/logs", span.Name()) assert.Equal(t, "exporter/"+exporterID.String()+"/logs", span.Name())
switch { switch {
case params[i].err == nil: case params[i].err == nil:
sentLogRecords += params[i].items sentLogRecords += params[i].items
@ -425,7 +425,7 @@ func TestExportLogsOp(t *testing.T) {
} }
func TestReceiveWithLongLivedCtx(t *testing.T) { func TestReceiveWithLongLivedCtx(t *testing.T) {
tt, err := obsreporttest.SetupTelemetryWithID(receiver) tt, err := obsreporttest.SetupTelemetryWithID(receiverID)
require.NoError(t, err) require.NoError(t, err)
t.Cleanup(func() { require.NoError(t, tt.Shutdown(context.Background())) }) t.Cleanup(func() { require.NoError(t, tt.Shutdown(context.Background())) })
@ -440,7 +440,7 @@ func TestReceiveWithLongLivedCtx(t *testing.T) {
// Use a new context on each operation to simulate distinct operations // Use a new context on each operation to simulate distinct operations
// under the same long lived context. // under the same long lived context.
rec, rerr := NewReceiver(ReceiverSettings{ rec, rerr := NewReceiver(ReceiverSettings{
ReceiverID: receiver, ReceiverID: receiverID,
Transport: transport, Transport: transport,
LongLivedCtx: true, LongLivedCtx: true,
ReceiverCreateSettings: tt.ToReceiverCreateSettings(), ReceiverCreateSettings: tt.ToReceiverCreateSettings(),
@ -460,7 +460,7 @@ func TestReceiveWithLongLivedCtx(t *testing.T) {
link := span.Links()[0] link := span.Links()[0]
assert.Equal(t, parentSpan.SpanContext().TraceID(), link.SpanContext.TraceID()) assert.Equal(t, parentSpan.SpanContext().TraceID(), link.SpanContext.TraceID())
assert.Equal(t, parentSpan.SpanContext().SpanID(), link.SpanContext.SpanID()) assert.Equal(t, parentSpan.SpanContext().SpanID(), link.SpanContext.SpanID())
assert.Equal(t, "receiver/"+receiver.String()+"/TraceDataReceived", span.Name()) assert.Equal(t, "receiver/"+receiverID.String()+"/TraceDataReceived", span.Name())
require.Contains(t, span.Attributes(), attribute.KeyValue{Key: obsmetrics.TransportKey, Value: attribute.StringValue(transport)}) require.Contains(t, span.Attributes(), attribute.KeyValue{Key: obsmetrics.TransportKey, Value: attribute.StringValue(transport)})
switch { switch {
case params[i].err == nil: case params[i].err == nil:
@ -479,7 +479,7 @@ func TestReceiveWithLongLivedCtx(t *testing.T) {
} }
func TestProcessorTraceData(t *testing.T) { func TestProcessorTraceData(t *testing.T) {
testTelemetry(t, processor, testProcessorTraceData) testTelemetry(t, processorID, testProcessorTraceData)
} }
func testProcessorTraceData(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { func testProcessorTraceData(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
@ -487,7 +487,7 @@ func testProcessorTraceData(t *testing.T, tt obsreporttest.TestTelemetry, regist
const refusedSpans = 19 const refusedSpans = 19
const droppedSpans = 13 const droppedSpans = 13
obsrep, err := newProcessor(ProcessorSettings{ obsrep, err := newProcessor(ProcessorSettings{
ProcessorID: processor, ProcessorID: processorID,
ProcessorCreateSettings: tt.ToProcessorCreateSettings(), ProcessorCreateSettings: tt.ToProcessorCreateSettings(),
}, registry) }, registry)
require.NoError(t, err) require.NoError(t, err)
@ -499,7 +499,7 @@ func testProcessorTraceData(t *testing.T, tt obsreporttest.TestTelemetry, regist
} }
func TestProcessorMetricsData(t *testing.T) { func TestProcessorMetricsData(t *testing.T) {
testTelemetry(t, processor, testProcessorMetricsData) testTelemetry(t, processorID, testProcessorMetricsData)
} }
func testProcessorMetricsData(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { func testProcessorMetricsData(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
@ -508,7 +508,7 @@ func testProcessorMetricsData(t *testing.T, tt obsreporttest.TestTelemetry, regi
const droppedPoints = 17 const droppedPoints = 17
obsrep, err := newProcessor(ProcessorSettings{ obsrep, err := newProcessor(ProcessorSettings{
ProcessorID: processor, ProcessorID: processorID,
ProcessorCreateSettings: tt.ToProcessorCreateSettings(), ProcessorCreateSettings: tt.ToProcessorCreateSettings(),
}, registry) }, registry)
require.NoError(t, err) require.NoError(t, err)
@ -542,7 +542,7 @@ func TestBuildProcessorCustomMetricName(t *testing.T) {
} }
func TestProcessorLogRecords(t *testing.T) { func TestProcessorLogRecords(t *testing.T) {
testTelemetry(t, processor, testProcessorLogRecords) testTelemetry(t, processorID, testProcessorLogRecords)
} }
func testProcessorLogRecords(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) { func testProcessorLogRecords(t *testing.T, tt obsreporttest.TestTelemetry, registry *featuregate.Registry) {
@ -551,7 +551,7 @@ func testProcessorLogRecords(t *testing.T, tt obsreporttest.TestTelemetry, regis
const droppedRecords = 17 const droppedRecords = 17
obsrep, err := newProcessor(ProcessorSettings{ obsrep, err := newProcessor(ProcessorSettings{
ProcessorID: processor, ProcessorID: processorID,
ProcessorCreateSettings: tt.ToProcessorCreateSettings(), ProcessorCreateSettings: tt.ToProcessorCreateSettings(),
}, registry) }, registry)
require.NoError(t, err) require.NoError(t, err)

View File

@ -30,6 +30,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/internal/obsreportconfig" "go.opentelemetry.io/collector/internal/obsreportconfig"
) )
@ -59,7 +60,7 @@ type TestTelemetry struct {
} }
// ToExporterCreateSettings returns ExporterCreateSettings with configured TelemetrySettings // ToExporterCreateSettings returns ExporterCreateSettings with configured TelemetrySettings
func (tts *TestTelemetry) ToExporterCreateSettings() component.ExporterCreateSettings { func (tts *TestTelemetry) ToExporterCreateSettings() exporter.CreateSettings {
set := componenttest.NewNopExporterCreateSettings() set := componenttest.NewNopExporterCreateSettings()
set.TelemetrySettings = tts.TelemetrySettings set.TelemetrySettings = tts.TelemetrySettings
set.ID = tts.id set.ID = tts.id

View File

@ -19,6 +19,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/exporter"
) )
// exportersKeyName is the configuration key name for exporters section. // exportersKeyName is the configuration key name for exporters section.
@ -27,10 +28,10 @@ const exportersKeyName = "exporters"
type Exporters struct { type Exporters struct {
exps map[component.ID]component.Config exps map[component.ID]component.Config
factories map[component.Type]component.ExporterFactory factories map[component.Type]exporter.Factory
} }
func NewExporters(factories map[component.Type]component.ExporterFactory) *Exporters { func NewExporters(factories map[component.Type]exporter.Factory) *Exporters {
return &Exporters{factories: factories} return &Exporters{factories: factories}
} }

View File

@ -23,10 +23,11 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/exporter"
) )
func TestExportersUnmarshal(t *testing.T) { func TestExportersUnmarshal(t *testing.T) {
factories, err := component.MakeExporterFactoryMap(componenttest.NewNopExporterFactory()) factories, err := exporter.MakeFactoryMap(componenttest.NewNopExporterFactory())
require.NoError(t, err) require.NoError(t, err)
exps := NewExporters(factories) exps := NewExporters(factories)
@ -100,7 +101,7 @@ func TestExportersUnmarshalError(t *testing.T) {
}, },
} }
factories, err := component.MakeExporterFactoryMap(componenttest.NewNopExporterFactory()) factories, err := exporter.MakeFactoryMap(componenttest.NewNopExporterFactory())
assert.NoError(t, err) assert.NoError(t, err)
for _, tt := range testCases { for _, tt := range testCases {

View File

@ -20,6 +20,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/pdata/ptrace"
@ -36,12 +37,12 @@ type ExampleExporterConfig struct {
} }
// ExampleExporterFactory is factory for ExampleExporter. // ExampleExporterFactory is factory for ExampleExporter.
var ExampleExporterFactory = component.NewExporterFactory( var ExampleExporterFactory = exporter.NewFactory(
typeStr, typeStr,
createExporterDefaultConfig, createExporterDefaultConfig,
component.WithTracesExporter(createTracesExporter, stability), exporter.WithTraces(createTracesExporter, stability),
component.WithMetricsExporter(createMetricsExporter, stability), exporter.WithMetrics(createMetricsExporter, stability),
component.WithLogsExporter(createLogsExporter, stability), exporter.WithLogs(createLogsExporter, stability),
) )
func createExporterDefaultConfig() component.Config { func createExporterDefaultConfig() component.Config {
@ -50,15 +51,15 @@ func createExporterDefaultConfig() component.Config {
} }
} }
func createTracesExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.TracesExporter, error) { func createTracesExporter(context.Context, exporter.CreateSettings, component.Config) (exporter.Traces, error) {
return &ExampleExporter{}, nil return &ExampleExporter{}, nil
} }
func createMetricsExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.MetricsExporter, error) { func createMetricsExporter(context.Context, exporter.CreateSettings, component.Config) (exporter.Metrics, error) {
return &ExampleExporter{}, nil return &ExampleExporter{}, nil
} }
func createLogsExporter(context.Context, component.ExporterCreateSettings, component.Config) (component.LogsExporter, error) { func createLogsExporter(context.Context, exporter.CreateSettings, component.Config) (exporter.Logs, error) {
return &ExampleExporter{}, nil return &ExampleExporter{}, nil
} }

View File

@ -25,6 +25,7 @@ import (
"go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/service/internal/capabilityconsumer" "go.opentelemetry.io/collector/service/internal/capabilityconsumer"
"go.opentelemetry.io/collector/service/internal/components" "go.opentelemetry.io/collector/service/internal/components"
"go.opentelemetry.io/collector/service/internal/fanoutconsumer" "go.opentelemetry.io/collector/service/internal/fanoutconsumer"
@ -194,8 +195,8 @@ type pipelinesSettings struct {
// ProcessorConfigs is a map of component.ID to component.Config. // ProcessorConfigs is a map of component.ID to component.Config.
ProcessorConfigs map[component.ID]component.Config ProcessorConfigs map[component.ID]component.Config
// ExporterFactories maps exporter type names in the config to the respective component.ExporterFactory. // ExporterFactories maps exporter type names in the config to the respective exporter.Factory.
ExporterFactories map[component.Type]component.ExporterFactory ExporterFactories map[component.Type]exporter.Factory
// ExporterConfigs is a map of component.ID to component.Config. // ExporterConfigs is a map of component.ID to component.Config.
ExporterConfigs map[component.ID]component.Config ExporterConfigs map[component.ID]component.Config
@ -336,7 +337,7 @@ func buildExporter(
settings component.TelemetrySettings, settings component.TelemetrySettings,
buildInfo component.BuildInfo, buildInfo component.BuildInfo,
cfgs map[component.ID]component.Config, cfgs map[component.ID]component.Config,
factories map[component.Type]component.ExporterFactory, factories map[component.Type]exporter.Factory,
id component.ID, id component.ID,
pipelineID component.ID, pipelineID component.ID,
) (component.Component, error) { ) (component.Component, error) {
@ -350,7 +351,7 @@ func buildExporter(
return nil, fmt.Errorf("exporter factory not available for: %q", id) return nil, fmt.Errorf("exporter factory not available for: %q", id)
} }
set := component.ExporterCreateSettings{ set := exporter.CreateSettings{
ID: id, ID: id,
TelemetrySettings: settings, TelemetrySettings: settings,
BuildInfo: buildInfo, BuildInfo: buildInfo,
@ -366,7 +367,7 @@ func buildExporter(
return exp, nil return exp, nil
} }
func createExporter(ctx context.Context, set component.ExporterCreateSettings, cfg component.Config, id component.ID, pipelineID component.ID, factory component.ExporterFactory) (component.Component, error) { func createExporter(ctx context.Context, set exporter.CreateSettings, cfg component.Config, id component.ID, pipelineID component.ID, factory exporter.Factory) (component.Component, error) {
switch pipelineID.Type() { switch pipelineID.Type() {
case component.DataTypeTraces: case component.DataTypeTraces:
return factory.CreateTracesExporter(ctx, set, cfg) return factory.CreateTracesExporter(ctx, set, cfg)
@ -414,7 +415,7 @@ func exporterLogger(logger *zap.Logger, id component.ID, dt component.DataType)
zap.String(components.ZapNameKey, id.String())) zap.String(components.ZapNameKey, id.String()))
} }
func getExporterStabilityLevel(factory component.ExporterFactory, dt component.DataType) component.StabilityLevel { func getExporterStabilityLevel(factory exporter.Factory, dt component.DataType) component.StabilityLevel {
switch dt { switch dt {
case component.DataTypeTraces: case component.DataTypeTraces:
return factory.TracesExporterStability() return factory.TracesExporterStability()

View File

@ -27,6 +27,7 @@ import (
"go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/consumer/consumertest"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/internal/testdata" "go.opentelemetry.io/collector/internal/testdata"
"go.opentelemetry.io/collector/service/internal/testcomponents" "go.opentelemetry.io/collector/service/internal/testcomponents"
) )
@ -193,7 +194,7 @@ func TestBuildPipelines(t *testing.T) {
component.NewID("exampleprocessor"): testcomponents.ExampleProcessorFactory.CreateDefaultConfig(), component.NewID("exampleprocessor"): testcomponents.ExampleProcessorFactory.CreateDefaultConfig(),
component.NewIDWithName("exampleprocessor", "1"): testcomponents.ExampleProcessorFactory.CreateDefaultConfig(), component.NewIDWithName("exampleprocessor", "1"): testcomponents.ExampleProcessorFactory.CreateDefaultConfig(),
}, },
ExporterFactories: map[component.Type]component.ExporterFactory{ ExporterFactories: map[component.Type]exporter.Factory{
testcomponents.ExampleExporterFactory.Type(): testcomponents.ExampleExporterFactory, testcomponents.ExampleExporterFactory.Type(): testcomponents.ExampleExporterFactory,
}, },
ExporterConfigs: map[component.ID]component.Config{ ExporterConfigs: map[component.ID]component.Config{
@ -209,15 +210,15 @@ func TestBuildPipelines(t *testing.T) {
for dt, pipeline := range test.pipelineConfigs { for dt, pipeline := range test.pipelineConfigs {
// Verify exporters created, started and empty. // Verify exporters created, started and empty.
for _, expID := range pipeline.Exporters { for _, expID := range pipeline.Exporters {
exporter := pipelines.GetExporters()[dt.Type()][expID].(*testcomponents.ExampleExporter) exp := pipelines.GetExporters()[dt.Type()][expID].(*testcomponents.ExampleExporter)
assert.True(t, exporter.Started) assert.True(t, exp.Started)
switch dt.Type() { switch dt.Type() {
case component.DataTypeTraces: case component.DataTypeTraces:
assert.Len(t, exporter.Traces, 0) assert.Len(t, exp.Traces, 0)
case component.DataTypeMetrics: case component.DataTypeMetrics:
assert.Len(t, exporter.Metrics, 0) assert.Len(t, exp.Metrics, 0)
case component.DataTypeLogs: case component.DataTypeLogs:
assert.Len(t, exporter.Logs, 0) assert.Len(t, exp.Logs, 0)
} }
} }
@ -267,19 +268,19 @@ func TestBuildPipelines(t *testing.T) {
// Now verify that exporters received data, and are shutdown. // Now verify that exporters received data, and are shutdown.
for _, expID := range pipeline.Exporters { for _, expID := range pipeline.Exporters {
exporter := pipelines.GetExporters()[dt.Type()][expID].(*testcomponents.ExampleExporter) exp := pipelines.GetExporters()[dt.Type()][expID].(*testcomponents.ExampleExporter)
switch dt.Type() { switch dt.Type() {
case component.DataTypeTraces: case component.DataTypeTraces:
require.Len(t, exporter.Traces, test.expectedRequests) require.Len(t, exp.Traces, test.expectedRequests)
assert.EqualValues(t, testdata.GenerateTraces(1), exporter.Traces[0]) assert.EqualValues(t, testdata.GenerateTraces(1), exp.Traces[0])
case component.DataTypeMetrics: case component.DataTypeMetrics:
require.Len(t, exporter.Metrics, test.expectedRequests) require.Len(t, exp.Metrics, test.expectedRequests)
assert.EqualValues(t, testdata.GenerateMetrics(1), exporter.Metrics[0]) assert.EqualValues(t, testdata.GenerateMetrics(1), exp.Metrics[0])
case component.DataTypeLogs: case component.DataTypeLogs:
require.Len(t, exporter.Logs, test.expectedRequests) require.Len(t, exp.Logs, test.expectedRequests)
assert.EqualValues(t, testdata.GenerateLogs(1), exporter.Logs[0]) assert.EqualValues(t, testdata.GenerateLogs(1), exp.Logs[0])
} }
assert.True(t, exporter.Stopped) assert.True(t, exp.Stopped)
} }
} }
}) })
@ -588,7 +589,7 @@ func TestBuildErrors(t *testing.T) {
nopProcessorFactory.Type(): nopProcessorFactory, nopProcessorFactory.Type(): nopProcessorFactory,
badProcessorFactory.Type(): badProcessorFactory, badProcessorFactory.Type(): badProcessorFactory,
} }
set.ExporterFactories = map[component.Type]component.ExporterFactory{ set.ExporterFactories = map[component.Type]exporter.Factory{
nopExporterFactory.Type(): nopExporterFactory, nopExporterFactory.Type(): nopExporterFactory,
badExporterFactory.Type(): badExporterFactory, badExporterFactory.Type(): badExporterFactory,
} }
@ -626,7 +627,7 @@ func TestFailToStartAndShutdown(t *testing.T) {
component.NewID(nopProcessorFactory.Type()): nopProcessorFactory.CreateDefaultConfig(), component.NewID(nopProcessorFactory.Type()): nopProcessorFactory.CreateDefaultConfig(),
component.NewID(errProcessorFactory.Type()): errProcessorFactory.CreateDefaultConfig(), component.NewID(errProcessorFactory.Type()): errProcessorFactory.CreateDefaultConfig(),
}, },
ExporterFactories: map[component.Type]component.ExporterFactory{ ExporterFactories: map[component.Type]exporter.Factory{
nopExporterFactory.Type(): nopExporterFactory, nopExporterFactory.Type(): nopExporterFactory,
errExporterFactory.Type(): errExporterFactory, errExporterFactory.Type(): errExporterFactory,
}, },
@ -701,8 +702,8 @@ func newBadProcessorFactory() component.ProcessorFactory {
}) })
} }
func newBadExporterFactory() component.ExporterFactory { func newBadExporterFactory() exporter.Factory {
return component.NewExporterFactory("bf", func() component.Config { return exporter.NewFactory("bf", func() component.Config {
return &struct { return &struct {
config.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct config.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct
}{ }{
@ -751,21 +752,21 @@ func newErrProcessorFactory() component.ProcessorFactory {
) )
} }
func newErrExporterFactory() component.ExporterFactory { func newErrExporterFactory() exporter.Factory {
return component.NewExporterFactory("err", func() component.Config { return exporter.NewFactory("err", func() component.Config {
return &struct { return &struct {
config.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct config.ExporterSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct
}{ }{
ExporterSettings: config.NewExporterSettings(component.NewID("bf")), ExporterSettings: config.NewExporterSettings(component.NewID("bf")),
} }
}, },
component.WithTracesExporter(func(context.Context, component.ExporterCreateSettings, component.Config) (component.TracesExporter, error) { exporter.WithTraces(func(context.Context, exporter.CreateSettings, component.Config) (exporter.Traces, error) {
return &errComponent{}, nil return &errComponent{}, nil
}, component.StabilityLevelUndefined), }, component.StabilityLevelUndefined),
component.WithLogsExporter(func(context.Context, component.ExporterCreateSettings, component.Config) (component.LogsExporter, error) { exporter.WithLogs(func(context.Context, exporter.CreateSettings, component.Config) (exporter.Logs, error) {
return &errComponent{}, nil return &errComponent{}, nil
}, component.StabilityLevelUndefined), }, component.StabilityLevelUndefined),
component.WithMetricsExporter(func(context.Context, component.ExporterCreateSettings, component.Config) (component.MetricsExporter, error) { exporter.WithMetrics(func(context.Context, exporter.CreateSettings, component.Config) (exporter.Metrics, error) {
return &errComponent{}, nil return &errComponent{}, nil
}, component.StabilityLevelUndefined), }, component.StabilityLevelUndefined),
) )