65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package xprocessorhelper // import "go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper"
|
|
|
|
import (
|
|
"go.opentelemetry.io/collector/component"
|
|
"go.opentelemetry.io/collector/consumer"
|
|
)
|
|
|
|
// Option apply changes to internalOptions.
|
|
type Option interface {
|
|
apply(*baseSettings)
|
|
}
|
|
|
|
type optionFunc func(*baseSettings)
|
|
|
|
func (of optionFunc) apply(e *baseSettings) {
|
|
of(e)
|
|
}
|
|
|
|
// WithStart overrides the default Start function for an processor.
|
|
// The default shutdown function does nothing and always returns nil.
|
|
func WithStart(start component.StartFunc) Option {
|
|
return optionFunc(func(o *baseSettings) {
|
|
o.StartFunc = start
|
|
})
|
|
}
|
|
|
|
// WithShutdown overrides the default Shutdown function for an processor.
|
|
// The default shutdown function does nothing and always returns nil.
|
|
func WithShutdown(shutdown component.ShutdownFunc) Option {
|
|
return optionFunc(func(o *baseSettings) {
|
|
o.ShutdownFunc = shutdown
|
|
})
|
|
}
|
|
|
|
// WithCapabilities overrides the default GetCapabilities function for an processor.
|
|
// The default GetCapabilities function returns mutable capabilities.
|
|
func WithCapabilities(capabilities consumer.Capabilities) Option {
|
|
return optionFunc(func(o *baseSettings) {
|
|
o.consumerOptions = append(o.consumerOptions, consumer.WithCapabilities(capabilities))
|
|
})
|
|
}
|
|
|
|
type baseSettings struct {
|
|
component.StartFunc
|
|
component.ShutdownFunc
|
|
consumerOptions []consumer.Option
|
|
}
|
|
|
|
// fromOptions returns the internal settings starting from the default and applying all options.
|
|
func fromOptions(options []Option) *baseSettings {
|
|
// Start from the default options:
|
|
opts := &baseSettings{
|
|
consumerOptions: []consumer.Option{consumer.WithCapabilities(consumer.Capabilities{MutatesData: true})},
|
|
}
|
|
|
|
for _, op := range options {
|
|
op.apply(opts)
|
|
}
|
|
|
|
return opts
|
|
}
|