add stability level to component factory (#5580)
* add stability level to component factory * update docstring * use a map instead of a single stability level * apply review feedback * add tests * fix impi, add changelog * add processors, receivers * fix inconsistency * set noop to stable * update calls in deprecated func
This commit is contained in:
parent
16aa10d582
commit
9f0d97ca57
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -11,6 +11,21 @@
|
|||
### 🚩 Deprecations 🚩
|
||||
|
||||
- Deprecate `service.ConfigServiceTelemetry`, `service.ConfigServiceTelemetryLogs`, and `service.ConfigServiceTelemetryMetrics` (#5565)
|
||||
- Deprecate the following component functions to ensure a stability level is set (#5580):
|
||||
- `component.WithTracesExporter` -> `component.WithTracesExporterAndStabilityLevel`
|
||||
- `component.WithMetricsExporter` -> `component.WithMetricsExporterAndStabilityLevel`
|
||||
- `component.WithLogsExporter` -> `component.WithLogsExporterAndStabilityLevel`
|
||||
- `component.WithTracesReceiver` -> `component.WithTracesReceiverAndStabilityLevel`
|
||||
- `component.WithMetricsReceiver` -> `component.WithMetricsReceiverAndStabilityLevel`
|
||||
- `component.WithLogsReceiver` -> `component.WithLogsReceiverAndStabilityLevel`
|
||||
- `component.WithTracesProcessor` -> `component.WithTracesProcessorAndStabilityLevel`
|
||||
- `component.WithMetricsProcessor` -> `component.WithMetricsProcessorAndStabilityLevel`
|
||||
- `component.WithLogsProcessor` -> `component.WithLogsProcessorAndStabilityLevel`
|
||||
|
||||
### 💡 Enhancements 💡
|
||||
|
||||
- Components stability levels are now logged. By default components which haven't defined their stability levels, or which are
|
||||
unmaintained, deprecated or in development will log a message. (#5580)
|
||||
|
||||
### 💡 Enhancements 💡
|
||||
|
||||
|
|
|
@ -104,6 +104,40 @@ const (
|
|||
KindExtension
|
||||
)
|
||||
|
||||
// StabilityLevel represents the stability level of the component created by the factory.
|
||||
// The stability level is used to determine if the component should be used in production
|
||||
// or not. For more details see:
|
||||
// https://github.com/open-telemetry/opentelemetry-collector#stability-levels
|
||||
type StabilityLevel int
|
||||
|
||||
const (
|
||||
StabilityLevelUndefined = iota // skip 0, start types from 1.
|
||||
StabilityLevelUnmaintained
|
||||
StabilityLevelDeprecated
|
||||
StabilityLevelInDevelopment
|
||||
StabilityLevelAlpha
|
||||
StabilityLevelBeta
|
||||
StabilityLevelStable
|
||||
)
|
||||
|
||||
func (sl StabilityLevel) String() string {
|
||||
switch sl {
|
||||
case StabilityLevelUnmaintained:
|
||||
return "unmaintained"
|
||||
case StabilityLevelDeprecated:
|
||||
return "deprecated"
|
||||
case StabilityLevelInDevelopment:
|
||||
return "in development"
|
||||
case StabilityLevelAlpha:
|
||||
return "alpha"
|
||||
case StabilityLevelBeta:
|
||||
return "beta"
|
||||
case StabilityLevelStable:
|
||||
return "stable"
|
||||
}
|
||||
return "undefined"
|
||||
}
|
||||
|
||||
// Factory is implemented by all component factories.
|
||||
//
|
||||
// This interface cannot be directly implemented. Implementations must
|
||||
|
@ -112,11 +146,15 @@ type Factory interface {
|
|||
// Type gets the type of the component created by this factory.
|
||||
Type() config.Type
|
||||
|
||||
// StabilityLevel gets the stability level of the component.
|
||||
StabilityLevel(config.DataType) StabilityLevel
|
||||
|
||||
unexportedFactoryFunc()
|
||||
}
|
||||
|
||||
type baseFactory struct {
|
||||
cfgType config.Type
|
||||
cfgType config.Type
|
||||
stability map[config.Type]StabilityLevel
|
||||
}
|
||||
|
||||
func (baseFactory) unexportedFactoryFunc() {}
|
||||
|
@ -124,3 +162,10 @@ func (baseFactory) unexportedFactoryFunc() {}
|
|||
func (bf baseFactory) Type() config.Type {
|
||||
return bf.cfgType
|
||||
}
|
||||
|
||||
func (bf baseFactory) StabilityLevel(dt config.DataType) StabilityLevel {
|
||||
if val, ok := bf.stability[dt]; ok {
|
||||
return val
|
||||
}
|
||||
return StabilityLevelUndefined
|
||||
}
|
||||
|
|
|
@ -43,9 +43,10 @@ func NewNopExporterFactory() component.ExporterFactory {
|
|||
ExporterSettings: config.NewExporterSettings(config.NewComponentID("nop")),
|
||||
}
|
||||
},
|
||||
component.WithTracesExporter(createTracesExporter),
|
||||
component.WithMetricsExporter(createMetricsExporter),
|
||||
component.WithLogsExporter(createLogsExporter))
|
||||
component.WithTracesExporterAndStabilityLevel(createTracesExporter, component.StabilityLevelStable),
|
||||
component.WithMetricsExporterAndStabilityLevel(createMetricsExporter, component.StabilityLevelStable),
|
||||
component.WithLogsExporterAndStabilityLevel(createLogsExporter, component.StabilityLevelStable),
|
||||
)
|
||||
}
|
||||
|
||||
func createTracesExporter(context.Context, component.ExporterCreateSettings, config.Exporter) (component.TracesExporter, error) {
|
||||
|
|
|
@ -44,9 +44,9 @@ func NewNopProcessorFactory() component.ProcessorFactory {
|
|||
ProcessorSettings: config.NewProcessorSettings(config.NewComponentID("nop")),
|
||||
}
|
||||
},
|
||||
component.WithTracesProcessor(createTracesProcessor),
|
||||
component.WithMetricsProcessor(createMetricsProcessor),
|
||||
component.WithLogsProcessor(createLogsProcessor),
|
||||
component.WithTracesProcessorAndStabilityLevel(createTracesProcessor, component.StabilityLevelStable),
|
||||
component.WithMetricsProcessorAndStabilityLevel(createMetricsProcessor, component.StabilityLevelStable),
|
||||
component.WithLogsProcessorAndStabilityLevel(createLogsProcessor, component.StabilityLevelStable),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -43,9 +43,9 @@ func NewNopReceiverFactory() component.ReceiverFactory {
|
|||
ReceiverSettings: config.NewReceiverSettings(config.NewComponentID("nop")),
|
||||
}
|
||||
},
|
||||
component.WithTracesReceiver(createTracesReceiver),
|
||||
component.WithMetricsReceiver(createMetricsReceiver),
|
||||
component.WithLogsReceiver(createLogsReceiver))
|
||||
component.WithTracesReceiverAndStabilityLevel(createTracesReceiver, component.StabilityLevelStable),
|
||||
component.WithMetricsReceiverAndStabilityLevel(createMetricsReceiver, component.StabilityLevelStable),
|
||||
component.WithLogsReceiverAndStabilityLevel(createLogsReceiver, component.StabilityLevelStable))
|
||||
}
|
||||
|
||||
func createTracesReceiver(context.Context, component.ReceiverCreateSettings, config.Receiver, consumer.Traces) (component.TracesReceiver, error) {
|
||||
|
|
|
@ -149,22 +149,43 @@ type exporterFactory struct {
|
|||
}
|
||||
|
||||
// WithTracesExporter overrides the default "error not supported" implementation for CreateTracesExporter.
|
||||
// Deprecated: [v0.55.0] Use WithTracesExporterAndStabilityLevel instead.
|
||||
func WithTracesExporter(createTracesExporter CreateTracesExporterFunc) ExporterFactoryOption {
|
||||
return WithTracesExporterAndStabilityLevel(createTracesExporter, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithTracesExporterAndStabilityLevel overrides the default "error not supported" implementation for CreateTracesExporter and the default "undefined" stability level.
|
||||
func WithTracesExporterAndStabilityLevel(createTracesExporter CreateTracesExporterFunc, sl StabilityLevel) ExporterFactoryOption {
|
||||
return exporterFactoryOptionFunc(func(o *exporterFactory) {
|
||||
o.stability[config.TracesDataType] = sl
|
||||
o.CreateTracesExporterFunc = createTracesExporter
|
||||
})
|
||||
}
|
||||
|
||||
// WithMetricsExporter overrides the default "error not supported" implementation for CreateMetricsExporter.
|
||||
// Deprecated: [v0.55.0] Use WithMetricsExporterAndStabilityLevel instead.
|
||||
func WithMetricsExporter(createMetricsExporter CreateMetricsExporterFunc) ExporterFactoryOption {
|
||||
return WithMetricsExporterAndStabilityLevel(createMetricsExporter, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithMetricsExporterAndStabilityLevel overrides the default "error not supported" implementation for CreateMetricsExporter and the default "undefined" stability level.
|
||||
func WithMetricsExporterAndStabilityLevel(createMetricsExporter CreateMetricsExporterFunc, sl StabilityLevel) ExporterFactoryOption {
|
||||
return exporterFactoryOptionFunc(func(o *exporterFactory) {
|
||||
o.stability[config.MetricsDataType] = sl
|
||||
o.CreateMetricsExporterFunc = createMetricsExporter
|
||||
})
|
||||
}
|
||||
|
||||
// WithLogsExporter overrides the default "error not supported" implementation for CreateLogsExporter.
|
||||
// Deprecated: [v0.55.0] Use WithLogsExporterAndStabilityLevel instead.
|
||||
func WithLogsExporter(createLogsExporter CreateLogsExporterFunc) ExporterFactoryOption {
|
||||
return WithLogsExporterAndStabilityLevel(createLogsExporter, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithLogsExporterAndStabilityLevel overrides the default "error not supported" implementation for CreateLogsExporter and the default "undefined" stability level.
|
||||
func WithLogsExporterAndStabilityLevel(createLogsExporter CreateLogsExporterFunc, sl StabilityLevel) ExporterFactoryOption {
|
||||
return exporterFactoryOptionFunc(func(o *exporterFactory) {
|
||||
o.stability[config.LogsDataType] = sl
|
||||
o.CreateLogsExporterFunc = createLogsExporter
|
||||
})
|
||||
}
|
||||
|
@ -172,7 +193,7 @@ func WithLogsExporter(createLogsExporter CreateLogsExporterFunc) ExporterFactory
|
|||
// NewExporterFactory returns a ExporterFactory.
|
||||
func NewExporterFactory(cfgType config.Type, createDefaultConfig ExporterCreateDefaultConfigFunc, options ...ExporterFactoryOption) ExporterFactory {
|
||||
f := &exporterFactory{
|
||||
baseFactory: baseFactory{cfgType: cfgType},
|
||||
baseFactory: baseFactory{cfgType: cfgType, stability: make(map[config.DataType]StabilityLevel)},
|
||||
ExporterCreateDefaultConfigFunc: createDefaultConfig,
|
||||
}
|
||||
for _, opt := range options {
|
||||
|
|
|
@ -61,6 +61,32 @@ func TestNewExporterFactory_WithOptions(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestNewExporterFactory_WithStabilityLevel(t *testing.T) {
|
||||
const typeStr = "test"
|
||||
defaultCfg := config.NewExporterSettings(config.NewComponentID(typeStr))
|
||||
factory := NewExporterFactory(
|
||||
typeStr,
|
||||
func() config.Exporter { return &defaultCfg },
|
||||
WithTracesExporterAndStabilityLevel(createTracesExporter, StabilityLevelInDevelopment),
|
||||
WithMetricsExporterAndStabilityLevel(createMetricsExporter, StabilityLevelAlpha),
|
||||
WithLogsExporterAndStabilityLevel(createLogsExporter, StabilityLevelDeprecated))
|
||||
|
||||
assert.EqualValues(t, typeStr, factory.Type())
|
||||
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
|
||||
|
||||
assert.EqualValues(t, StabilityLevelInDevelopment, factory.StabilityLevel(config.TracesDataType))
|
||||
_, err := factory.CreateTracesExporter(context.Background(), ExporterCreateSettings{}, &defaultCfg)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, StabilityLevelAlpha, factory.StabilityLevel(config.MetricsDataType))
|
||||
_, err = factory.CreateMetricsExporter(context.Background(), ExporterCreateSettings{}, &defaultCfg)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, StabilityLevelDeprecated, factory.StabilityLevel(config.LogsDataType))
|
||||
_, err = factory.CreateLogsExporter(context.Background(), ExporterCreateSettings{}, &defaultCfg)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func createTracesExporter(context.Context, ExporterCreateSettings, config.Exporter) (TracesExporter, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
|
|
@ -179,22 +179,43 @@ type processorFactory struct {
|
|||
}
|
||||
|
||||
// WithTracesProcessor overrides the default "error not supported" implementation for CreateTracesProcessor.
|
||||
// Deprecated: [v0.55.0] Use WithTracesProcessorAndStabilityLevel instead.
|
||||
func WithTracesProcessor(createTracesProcessor CreateTracesProcessorFunc) ProcessorFactoryOption {
|
||||
return WithTracesProcessorAndStabilityLevel(createTracesProcessor, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithTracesProcessorAndStabilityLevel overrides the default "error not supported" implementation for CreateTracesProcessor and the default "undefined" stability level.
|
||||
func WithTracesProcessorAndStabilityLevel(createTracesProcessor CreateTracesProcessorFunc, sl StabilityLevel) ProcessorFactoryOption {
|
||||
return processorFactoryOptionFunc(func(o *processorFactory) {
|
||||
o.stability[config.TracesDataType] = sl
|
||||
o.CreateTracesProcessorFunc = createTracesProcessor
|
||||
})
|
||||
}
|
||||
|
||||
// WithMetricsProcessor overrides the default "error not supported" implementation for CreateMetricsProcessor.
|
||||
// Deprecated: [v0.55.0] Use WithMetricsProcessorAndStabilityLevel instead.
|
||||
func WithMetricsProcessor(createMetricsProcessor CreateMetricsProcessorFunc) ProcessorFactoryOption {
|
||||
return WithMetricsProcessorAndStabilityLevel(createMetricsProcessor, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithMetricsProcessorAndStabilityLevel overrides the default "error not supported" implementation for CreateMetricsProcessor and the default "undefined" stability level.
|
||||
func WithMetricsProcessorAndStabilityLevel(createMetricsProcessor CreateMetricsProcessorFunc, sl StabilityLevel) ProcessorFactoryOption {
|
||||
return processorFactoryOptionFunc(func(o *processorFactory) {
|
||||
o.stability[config.MetricsDataType] = sl
|
||||
o.CreateMetricsProcessorFunc = createMetricsProcessor
|
||||
})
|
||||
}
|
||||
|
||||
// WithLogsProcessor overrides the default "error not supported" implementation for CreateLogsProcessor.
|
||||
// Deprecated: [v0.55.0] Use WithLogsProcessorAndStabilityLevel instead.
|
||||
func WithLogsProcessor(createLogsProcessor CreateLogsProcessorFunc) ProcessorFactoryOption {
|
||||
return WithLogsProcessorAndStabilityLevel(createLogsProcessor, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithLogsProcessorAndStabilityLevel overrides the default "error not supported" implementation for CreateLogsProcessor and the default "undefined" stability level.
|
||||
func WithLogsProcessorAndStabilityLevel(createLogsProcessor CreateLogsProcessorFunc, sl StabilityLevel) ProcessorFactoryOption {
|
||||
return processorFactoryOptionFunc(func(o *processorFactory) {
|
||||
o.stability[config.LogsDataType] = sl
|
||||
o.CreateLogsProcessorFunc = createLogsProcessor
|
||||
})
|
||||
}
|
||||
|
@ -202,7 +223,7 @@ func WithLogsProcessor(createLogsProcessor CreateLogsProcessorFunc) ProcessorFac
|
|||
// NewProcessorFactory returns a ProcessorFactory.
|
||||
func NewProcessorFactory(cfgType config.Type, createDefaultConfig ProcessorCreateDefaultConfigFunc, options ...ProcessorFactoryOption) ProcessorFactory {
|
||||
f := &processorFactory{
|
||||
baseFactory: baseFactory{cfgType: cfgType},
|
||||
baseFactory: baseFactory{cfgType: cfgType, stability: make(map[config.DataType]StabilityLevel)},
|
||||
ProcessorCreateDefaultConfigFunc: createDefaultConfig,
|
||||
}
|
||||
for _, opt := range options {
|
||||
|
|
|
@ -62,6 +62,31 @@ func TestNewProcessorFactory_WithOptions(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestNewProcessorFactory_WithStabilityLevel(t *testing.T) {
|
||||
const typeStr = "test"
|
||||
defaultCfg := config.NewProcessorSettings(config.NewComponentID(typeStr))
|
||||
factory := NewProcessorFactory(
|
||||
typeStr,
|
||||
func() config.Processor { return &defaultCfg },
|
||||
WithTracesProcessorAndStabilityLevel(createTracesProcessor, StabilityLevelAlpha),
|
||||
WithMetricsProcessorAndStabilityLevel(createMetricsProcessor, StabilityLevelBeta),
|
||||
WithLogsProcessorAndStabilityLevel(createLogsProcessor, StabilityLevelUnmaintained))
|
||||
assert.EqualValues(t, typeStr, factory.Type())
|
||||
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
|
||||
|
||||
assert.EqualValues(t, StabilityLevelAlpha, factory.StabilityLevel(config.TracesDataType))
|
||||
_, err := factory.CreateTracesProcessor(context.Background(), ProcessorCreateSettings{}, &defaultCfg, nil)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, StabilityLevelBeta, factory.StabilityLevel(config.MetricsDataType))
|
||||
_, err = factory.CreateMetricsProcessor(context.Background(), ProcessorCreateSettings{}, &defaultCfg, nil)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, StabilityLevelUnmaintained, factory.StabilityLevel(config.LogsDataType))
|
||||
_, err = factory.CreateLogsProcessor(context.Background(), ProcessorCreateSettings{}, &defaultCfg, nil)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func createTracesProcessor(context.Context, ProcessorCreateSettings, config.Processor, consumer.Traces) (TracesProcessor, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
|
|
@ -211,22 +211,43 @@ type receiverFactory struct {
|
|||
}
|
||||
|
||||
// WithTracesReceiver overrides the default "error not supported" implementation for CreateTracesReceiver.
|
||||
// Deprecated: [v0.55.0] Use WithTracesReceiverAndStabilityLevel instead.
|
||||
func WithTracesReceiver(createTracesReceiver CreateTracesReceiverFunc) ReceiverFactoryOption {
|
||||
return WithTracesReceiverAndStabilityLevel(createTracesReceiver, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithTracesReceiverAndStabilityLevel overrides the default "error not supported" implementation for CreateTracesReceiver and the default "undefined" stability level.
|
||||
func WithTracesReceiverAndStabilityLevel(createTracesReceiver CreateTracesReceiverFunc, sl StabilityLevel) ReceiverFactoryOption {
|
||||
return receiverFactoryOptionFunc(func(o *receiverFactory) {
|
||||
o.stability[config.TracesDataType] = sl
|
||||
o.CreateTracesReceiverFunc = createTracesReceiver
|
||||
})
|
||||
}
|
||||
|
||||
// WithMetricsReceiver overrides the default "error not supported" implementation for CreateMetricsReceiver.
|
||||
// Deprecated: [v0.55.0] Use WithMetricsReceiverAndStabilityLevel instead.
|
||||
func WithMetricsReceiver(createMetricsReceiver CreateMetricsReceiverFunc) ReceiverFactoryOption {
|
||||
return WithMetricsReceiverAndStabilityLevel(createMetricsReceiver, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithMetricsReceiverAndStabilityLevel overrides the default "error not supported" implementation for CreateMetricsReceiver and the default "undefined" stability level.
|
||||
func WithMetricsReceiverAndStabilityLevel(createMetricsReceiver CreateMetricsReceiverFunc, sl StabilityLevel) ReceiverFactoryOption {
|
||||
return receiverFactoryOptionFunc(func(o *receiverFactory) {
|
||||
o.stability[config.MetricsDataType] = sl
|
||||
o.CreateMetricsReceiverFunc = createMetricsReceiver
|
||||
})
|
||||
}
|
||||
|
||||
// WithLogsReceiver overrides the default "error not supported" implementation for CreateLogsReceiver.
|
||||
// Deprecated: [v0.55.0] Use WithLogsReceiverAndStabilityLevel instead.
|
||||
func WithLogsReceiver(createLogsReceiver CreateLogsReceiverFunc) ReceiverFactoryOption {
|
||||
return WithLogsReceiverAndStabilityLevel(createLogsReceiver, StabilityLevelUndefined)
|
||||
}
|
||||
|
||||
// WithLogsReceiverAndStabilityLevel overrides the default "error not supported" implementation for CreateLogsReceiver and the default "undefined" stability level.
|
||||
func WithLogsReceiverAndStabilityLevel(createLogsReceiver CreateLogsReceiverFunc, sl StabilityLevel) ReceiverFactoryOption {
|
||||
return receiverFactoryOptionFunc(func(o *receiverFactory) {
|
||||
o.stability[config.LogsDataType] = sl
|
||||
o.CreateLogsReceiverFunc = createLogsReceiver
|
||||
})
|
||||
}
|
||||
|
@ -234,7 +255,7 @@ func WithLogsReceiver(createLogsReceiver CreateLogsReceiverFunc) ReceiverFactory
|
|||
// NewReceiverFactory returns a ReceiverFactory.
|
||||
func NewReceiverFactory(cfgType config.Type, createDefaultConfig ReceiverCreateDefaultConfigFunc, options ...ReceiverFactoryOption) ReceiverFactory {
|
||||
f := &receiverFactory{
|
||||
baseFactory: baseFactory{cfgType: cfgType},
|
||||
baseFactory: baseFactory{cfgType: cfgType, stability: make(map[config.DataType]StabilityLevel)},
|
||||
ReceiverCreateDefaultConfigFunc: createDefaultConfig,
|
||||
}
|
||||
for _, opt := range options {
|
||||
|
|
|
@ -62,6 +62,31 @@ func TestNewReceiverFactory_WithOptions(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestNewReceiverFactory_WithStabilityLevels(t *testing.T) {
|
||||
const typeStr = "test"
|
||||
defaultCfg := config.NewReceiverSettings(config.NewComponentID(typeStr))
|
||||
factory := NewReceiverFactory(
|
||||
typeStr,
|
||||
func() config.Receiver { return &defaultCfg },
|
||||
WithTracesReceiverAndStabilityLevel(createTracesReceiver, StabilityLevelDeprecated),
|
||||
WithMetricsReceiverAndStabilityLevel(createMetricsReceiver, StabilityLevelAlpha),
|
||||
WithLogsReceiverAndStabilityLevel(createLogsReceiver, StabilityLevelStable))
|
||||
assert.EqualValues(t, typeStr, factory.Type())
|
||||
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
|
||||
|
||||
assert.EqualValues(t, StabilityLevelDeprecated, factory.StabilityLevel(config.TracesDataType))
|
||||
_, err := factory.CreateTracesReceiver(context.Background(), ReceiverCreateSettings{}, &defaultCfg, nil)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, StabilityLevelAlpha, factory.StabilityLevel(config.MetricsDataType))
|
||||
_, err = factory.CreateMetricsReceiver(context.Background(), ReceiverCreateSettings{}, &defaultCfg, nil)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, StabilityLevelStable, factory.StabilityLevel(config.LogsDataType))
|
||||
_, err = factory.CreateLogsReceiver(context.Background(), ReceiverCreateSettings{}, &defaultCfg, nil)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func createTracesReceiver(context.Context, ReceiverCreateSettings, config.Receiver, consumer.Traces) (TracesReceiver, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
|
|
@ -36,9 +36,10 @@ func NewFactory() component.ExporterFactory {
|
|||
return component.NewExporterFactory(
|
||||
typeStr,
|
||||
createDefaultConfig,
|
||||
component.WithTracesExporter(createTracesExporter),
|
||||
component.WithMetricsExporter(createMetricsExporter),
|
||||
component.WithLogsExporter(createLogsExporter))
|
||||
component.WithTracesExporterAndStabilityLevel(createTracesExporter, component.StabilityLevelInDevelopment),
|
||||
component.WithMetricsExporterAndStabilityLevel(createMetricsExporter, component.StabilityLevelInDevelopment),
|
||||
component.WithLogsExporterAndStabilityLevel(createLogsExporter, component.StabilityLevelInDevelopment),
|
||||
)
|
||||
}
|
||||
|
||||
func createDefaultConfig() config.Exporter {
|
||||
|
|
|
@ -35,9 +35,10 @@ func NewFactory() component.ExporterFactory {
|
|||
return component.NewExporterFactory(
|
||||
typeStr,
|
||||
createDefaultConfig,
|
||||
component.WithTracesExporter(createTracesExporter),
|
||||
component.WithMetricsExporter(createMetricsExporter),
|
||||
component.WithLogsExporter(createLogsExporter))
|
||||
component.WithTracesExporterAndStabilityLevel(createTracesExporter, component.StabilityLevelStable),
|
||||
component.WithMetricsExporterAndStabilityLevel(createMetricsExporter, component.StabilityLevelStable),
|
||||
component.WithLogsExporterAndStabilityLevel(createLogsExporter, component.StabilityLevelBeta),
|
||||
)
|
||||
}
|
||||
|
||||
func createDefaultConfig() config.Exporter {
|
||||
|
|
|
@ -38,9 +38,10 @@ func NewFactory() component.ExporterFactory {
|
|||
return component.NewExporterFactory(
|
||||
typeStr,
|
||||
createDefaultConfig,
|
||||
component.WithTracesExporter(createTracesExporter),
|
||||
component.WithMetricsExporter(createMetricsExporter),
|
||||
component.WithLogsExporter(createLogsExporter))
|
||||
component.WithTracesExporterAndStabilityLevel(createTracesExporter, component.StabilityLevelStable),
|
||||
component.WithMetricsExporterAndStabilityLevel(createMetricsExporter, component.StabilityLevelStable),
|
||||
component.WithLogsExporterAndStabilityLevel(createLogsExporter, component.StabilityLevelBeta),
|
||||
)
|
||||
}
|
||||
|
||||
func createDefaultConfig() config.Exporter {
|
||||
|
|
|
@ -25,7 +25,10 @@ import (
|
|||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
)
|
||||
|
||||
const expType = "exampleexporter"
|
||||
const (
|
||||
typeStr = "exampleexporter"
|
||||
stability = component.StabilityLevelInDevelopment
|
||||
)
|
||||
|
||||
// ExampleExporterConfig config for ExampleExporter.
|
||||
type ExampleExporterConfig struct {
|
||||
|
@ -34,15 +37,16 @@ type ExampleExporterConfig struct {
|
|||
|
||||
// ExampleExporterFactory is factory for ExampleExporter.
|
||||
var ExampleExporterFactory = component.NewExporterFactory(
|
||||
expType,
|
||||
typeStr,
|
||||
createExporterDefaultConfig,
|
||||
component.WithTracesExporter(createTracesExporter),
|
||||
component.WithMetricsExporter(createMetricsExporter),
|
||||
component.WithLogsExporter(createLogsExporter))
|
||||
component.WithTracesExporterAndStabilityLevel(createTracesExporter, stability),
|
||||
component.WithMetricsExporterAndStabilityLevel(createMetricsExporter, stability),
|
||||
component.WithLogsExporterAndStabilityLevel(createLogsExporter, stability),
|
||||
)
|
||||
|
||||
func createExporterDefaultConfig() config.Exporter {
|
||||
return &ExampleExporterConfig{
|
||||
ExporterSettings: config.NewExporterSettings(config.NewComponentID(expType)),
|
||||
ExporterSettings: config.NewExporterSettings(config.NewComponentID(typeStr)),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,9 +33,9 @@ type ExampleProcessorConfig struct {
|
|||
var ExampleProcessorFactory = component.NewProcessorFactory(
|
||||
procType,
|
||||
createDefaultConfig,
|
||||
component.WithTracesProcessor(createTracesProcessor),
|
||||
component.WithMetricsProcessor(createMetricsProcessor),
|
||||
component.WithLogsProcessor(createLogsProcessor))
|
||||
component.WithTracesProcessorAndStabilityLevel(createTracesProcessor, component.StabilityLevelInDevelopment),
|
||||
component.WithMetricsProcessorAndStabilityLevel(createMetricsProcessor, component.StabilityLevelInDevelopment),
|
||||
component.WithLogsProcessorAndStabilityLevel(createLogsProcessor, component.StabilityLevelInDevelopment))
|
||||
|
||||
// CreateDefaultConfig creates the default configuration for the Processor.
|
||||
func createDefaultConfig() config.Processor {
|
||||
|
|
|
@ -33,9 +33,9 @@ type ExampleReceiverConfig struct {
|
|||
var ExampleReceiverFactory = component.NewReceiverFactory(
|
||||
receiverType,
|
||||
createReceiverDefaultConfig,
|
||||
component.WithTracesReceiver(createTracesReceiver),
|
||||
component.WithMetricsReceiver(createMetricsReceiver),
|
||||
component.WithLogsReceiver(createLogsReceiver))
|
||||
component.WithTracesReceiverAndStabilityLevel(createTracesReceiver, component.StabilityLevelInDevelopment),
|
||||
component.WithMetricsReceiverAndStabilityLevel(createMetricsReceiver, component.StabilityLevelInDevelopment),
|
||||
component.WithLogsReceiverAndStabilityLevel(createLogsReceiver, component.StabilityLevelInDevelopment))
|
||||
|
||||
func createReceiverDefaultConfig() config.Receiver {
|
||||
return &ExampleReceiverConfig{
|
||||
|
|
|
@ -36,9 +36,9 @@ func NewFactory() component.ProcessorFactory {
|
|||
return component.NewProcessorFactory(
|
||||
typeStr,
|
||||
createDefaultConfig,
|
||||
component.WithTracesProcessor(createTracesProcessor),
|
||||
component.WithMetricsProcessor(createMetricsProcessor),
|
||||
component.WithLogsProcessor(createLogsProcessor))
|
||||
component.WithTracesProcessorAndStabilityLevel(createTracesProcessor, component.StabilityLevelStable),
|
||||
component.WithMetricsProcessorAndStabilityLevel(createMetricsProcessor, component.StabilityLevelStable),
|
||||
component.WithLogsProcessorAndStabilityLevel(createLogsProcessor, component.StabilityLevelStable))
|
||||
}
|
||||
|
||||
func createDefaultConfig() config.Processor {
|
||||
|
|
|
@ -46,9 +46,9 @@ func NewFactory() component.ProcessorFactory {
|
|||
return component.NewProcessorFactory(
|
||||
typeStr,
|
||||
createDefaultConfig,
|
||||
component.WithTracesProcessor(f.createTracesProcessor),
|
||||
component.WithMetricsProcessor(f.createMetricsProcessor),
|
||||
component.WithLogsProcessor(f.createLogsProcessor))
|
||||
component.WithTracesProcessorAndStabilityLevel(f.createTracesProcessor, component.StabilityLevelBeta),
|
||||
component.WithMetricsProcessorAndStabilityLevel(f.createMetricsProcessor, component.StabilityLevelBeta),
|
||||
component.WithLogsProcessorAndStabilityLevel(f.createLogsProcessor, component.StabilityLevelBeta))
|
||||
}
|
||||
|
||||
// CreateDefaultConfig creates the default configuration for processor. Notice
|
||||
|
|
|
@ -38,9 +38,9 @@ func NewFactory() component.ReceiverFactory {
|
|||
return component.NewReceiverFactory(
|
||||
typeStr,
|
||||
createDefaultConfig,
|
||||
component.WithTracesReceiver(createTracesReceiver),
|
||||
component.WithMetricsReceiver(createMetricsReceiver),
|
||||
component.WithLogsReceiver(createLogReceiver))
|
||||
component.WithTracesReceiverAndStabilityLevel(createTracesReceiver, component.StabilityLevelStable),
|
||||
component.WithMetricsReceiverAndStabilityLevel(createMetricsReceiver, component.StabilityLevelStable),
|
||||
component.WithLogsReceiverAndStabilityLevel(createLogReceiver, component.StabilityLevelBeta))
|
||||
}
|
||||
|
||||
// createDefaultConfig creates the default configuration for receiver.
|
||||
|
|
|
@ -23,4 +23,5 @@ const (
|
|||
ZapKindPipeline = "pipeline"
|
||||
ZapNameKey = "name"
|
||||
ZapDataTypeKey = "data_type"
|
||||
ZapStabilityKey = "stability"
|
||||
)
|
||||
|
|
|
@ -331,6 +331,21 @@ func Build(ctx context.Context, set Settings) (*Pipelines, error) {
|
|||
return exps, nil
|
||||
}
|
||||
|
||||
func logStabilityMessage(logger *zap.Logger, sl component.StabilityLevel) {
|
||||
switch sl {
|
||||
case component.StabilityLevelDeprecated:
|
||||
logger.Info("Component has been deprecated and will be removed in future releases.", zap.String(components.ZapStabilityKey, sl.String()))
|
||||
case component.StabilityLevelUnmaintained:
|
||||
logger.Info("Component is unmaintained and actively looking for contributors. This component will become deprecated after 6 months of remaining unmaintained", zap.String(components.ZapStabilityKey, sl.String()))
|
||||
case component.StabilityLevelInDevelopment:
|
||||
logger.Info("Component is under development.", zap.String(components.ZapStabilityKey, sl.String()))
|
||||
case component.StabilityLevelAlpha, component.StabilityLevelBeta, component.StabilityLevelStable:
|
||||
logger.Debug("Stability level", zap.String(components.ZapStabilityKey, sl.String()))
|
||||
default:
|
||||
logger.Info("Stability level of component undefined", zap.String(components.ZapStabilityKey, sl.String()))
|
||||
}
|
||||
}
|
||||
|
||||
func buildExporter(
|
||||
ctx context.Context,
|
||||
settings component.TelemetrySettings,
|
||||
|
@ -355,6 +370,7 @@ func buildExporter(
|
|||
BuildInfo: buildInfo,
|
||||
}
|
||||
set.TelemetrySettings.Logger = exporterLogger(settings.Logger, id, pipelineID.Type())
|
||||
logStabilityMessage(set.TelemetrySettings.Logger, factory.StabilityLevel(pipelineID.Type()))
|
||||
|
||||
exp, err := createExporter(ctx, set, cfg, id, pipelineID, factory)
|
||||
if err != nil {
|
||||
|
@ -436,6 +452,7 @@ func buildProcessor(ctx context.Context,
|
|||
BuildInfo: buildInfo,
|
||||
}
|
||||
set.TelemetrySettings.Logger = processorLogger(settings.Logger, id, pipelineID)
|
||||
logStabilityMessage(set.TelemetrySettings.Logger, factory.StabilityLevel(pipelineID.Type()))
|
||||
|
||||
proc, err := createProcessor(ctx, set, procCfg, id, pipelineID, next, factory)
|
||||
if err != nil {
|
||||
|
@ -489,6 +506,7 @@ func buildReceiver(ctx context.Context,
|
|||
BuildInfo: buildInfo,
|
||||
}
|
||||
set.TelemetrySettings.Logger = receiverLogger(settings.Logger, id, pipelineID.Type())
|
||||
logStabilityMessage(set.TelemetrySettings.Logger, factory.StabilityLevel(pipelineID.Type()))
|
||||
|
||||
recv, err := createReceiver(ctx, set, cfg, id, pipelineID, nexts, factory)
|
||||
if err != nil {
|
||||
|
|
|
@ -22,6 +22,9 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"go.uber.org/zap/zaptest/observer"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/component/componenttest"
|
||||
|
@ -345,6 +348,36 @@ func TestFailToStartAndShutdown(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestLogStabilityLevle(t *testing.T) {
|
||||
tests := []struct {
|
||||
level zapcore.Level
|
||||
expectedLogs int
|
||||
}{
|
||||
{
|
||||
level: zapcore.DebugLevel,
|
||||
expectedLogs: 7,
|
||||
},
|
||||
{
|
||||
level: zapcore.InfoLevel,
|
||||
expectedLogs: 4,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
observed, logs := observer.New(tt.level)
|
||||
logger := zap.New(observed)
|
||||
// ensure log levels are set correctly for each stability level
|
||||
logStabilityMessage(logger, component.StabilityLevelUndefined)
|
||||
logStabilityMessage(logger, component.StabilityLevelUnmaintained)
|
||||
logStabilityMessage(logger, component.StabilityLevelDeprecated)
|
||||
logStabilityMessage(logger, component.StabilityLevelInDevelopment)
|
||||
logStabilityMessage(logger, component.StabilityLevelAlpha)
|
||||
logStabilityMessage(logger, component.StabilityLevelBeta)
|
||||
logStabilityMessage(logger, component.StabilityLevelStable)
|
||||
require.Equal(t, tt.expectedLogs, logs.Len())
|
||||
}
|
||||
}
|
||||
|
||||
func newBadReceiverFactory() component.ReceiverFactory {
|
||||
return component.NewReceiverFactory("bf", func() config.Receiver {
|
||||
return &struct {
|
||||
|
|
Loading…
Reference in New Issue