Skip to content

Commit

Permalink
Update metrics transform processor to use processorhelper (#766)
Browse files Browse the repository at this point in the history
  • Loading branch information
james-bebbington authored Aug 19, 2020
1 parent bbb4f9f commit 0a07047
Show file tree
Hide file tree
Showing 7 changed files with 299 additions and 150 deletions.
2 changes: 1 addition & 1 deletion cmd/otelcontribcol/components.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func components() (component.Factories, error) {
processors := []component.ProcessorFactoryBase{
k8sprocessor.NewFactory(),
resourcedetectionprocessor.NewFactory(),
&metricstransformprocessor.Factory{},
metricstransformprocessor.NewFactory(),
}
for _, pr := range factories.Processors {
processors = append(processors, pr)
Expand Down
2 changes: 1 addition & 1 deletion processor/metricstransformprocessor/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ func TestLoadingFullConfig(t *testing.T) {
factories, err := componenttest.ExampleComponents()
assert.NoError(t, err)

factory := &Factory{}
factory := NewFactory()
factories.Processors[configmodels.Type(typeStr)] = factory
config, err := configtest.LoadConfigFile(t, path.Join(".", "testdata", "config_full.yaml"), factories)

Expand Down
43 changes: 19 additions & 24 deletions processor/metricstransformprocessor/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,27 @@ import (
"fmt"

"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configerror"
"go.opentelemetry.io/collector/config/configmodels"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/processor/processorhelper"
)

const (
// The value of "type" key in configuration.
typeStr = "metricstransform"
)

// Factory is the factory for metrics transform processor.
type Factory struct{}
var processorCapabilities = component.ProcessorCapabilities{MutatesConsumedData: true}

// Type gets the type of the Option config created by this factory.
func (f *Factory) Type() configmodels.Type {
return typeStr
// NewFactory returns a new factory for the Metrics Transform processor.
func NewFactory() component.ProcessorFactory {
return processorhelper.NewFactory(
typeStr,
createDefaultConfig,
processorhelper.WithMetrics(createMetricsProcessor))
}

// CreateDefaultConfig creates the default configuration for processor.
func (f *Factory) CreateDefaultConfig() configmodels.Processor {
func createDefaultConfig() configmodels.Processor {
return &Config{
ProcessorSettings: configmodels.ProcessorSettings{
TypeVal: typeStr,
Expand All @@ -47,30 +48,24 @@ func (f *Factory) CreateDefaultConfig() configmodels.Processor {
}
}

// CreateTraceProcessor creates a trace processor based on this config.
func (f *Factory) CreateTraceProcessor(
func createMetricsProcessor(
ctx context.Context,
params component.ProcessorCreateParams,
nextConsumer consumer.TraceConsumer,
cfg configmodels.Processor,
) (component.TraceProcessor, error) {
return nil, configerror.ErrDataTypeIsNotSupported
}

// CreateMetricsProcessor creates a metrics processor based on this config.
func (f *Factory) CreateMetricsProcessor(
ctx context.Context,
params component.ProcessorCreateParams,
nextConsumer consumer.MetricsConsumer,
c configmodels.Processor,
) (component.MetricsProcessor, error) {
oCfg := c.(*Config)
err := validateConfiguration(oCfg)
if err != nil {
oCfg := cfg.(*Config)
if err := validateConfiguration(oCfg); err != nil {
return nil, err
}
return newMetricsTransformProcessor(nextConsumer, params.Logger, buildHelperConfig(oCfg)), nil

metricsProcessor := newMetricsTransformProcessor(params.Logger, buildHelperConfig(oCfg))

return processorhelper.NewMetricsProcessor(
cfg,
nextConsumer,
metricsProcessor,
processorhelper.WithCapabilities(processorCapabilities))
}

// validateConfiguration validates the input configuration has all of the required fields for the processor
Expand Down
15 changes: 7 additions & 8 deletions processor/metricstransformprocessor/factory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,18 @@ import (
"go.opentelemetry.io/collector/config/configcheck"
"go.opentelemetry.io/collector/config/configmodels"
"go.opentelemetry.io/collector/config/configtest"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.uber.org/zap"
)

func TestType(t *testing.T) {
factory := Factory{}
factory := NewFactory()
pType := factory.Type()
assert.Equal(t, pType, configmodels.Type("metricstransform"))
}

func TestCreateDefaultConfig(t *testing.T) {
factory := Factory{}
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
assert.Equal(t, cfg, &Config{
ProcessorSettings: configmodels.ProcessorSettings{
Expand Down Expand Up @@ -80,19 +81,17 @@ func TestCreateProcessors(t *testing.T) {
factories, err := componenttest.ExampleComponents()
assert.NoError(t, err)

factory := &Factory{}
factory := NewFactory()
factories.Processors[typeStr] = factory
config, err := configtest.LoadConfigFile(t, path.Join(".", "testdata", test.configName), factories)
assert.NoError(t, err)

for name, cfg := range config.Processors {
t.Run(fmt.Sprintf("%s/%s", test.configName, name), func(t *testing.T) {
factory := &Factory{}

tp, tErr := factory.CreateTraceProcessor(
context.Background(),
component.ProcessorCreateParams{Logger: zap.NewNop()},
nil,
exportertest.NewNopTraceExporter(),
cfg)
// Not implemented error
assert.Error(t, tErr)
Expand All @@ -101,7 +100,7 @@ func TestCreateProcessors(t *testing.T) {
mp, mErr := factory.CreateMetricsProcessor(
context.Background(),
component.ProcessorCreateParams{Logger: zap.NewNop()},
nil,
exportertest.NewNopMetricsExporter(),
cfg)
if test.succeed {
assert.NotNil(t, mp)
Expand Down Expand Up @@ -152,7 +151,7 @@ func TestFactory_validateConfiguration(t *testing.T) {
}

func TestCreateProcessorsFilledData(t *testing.T) {
factory := Factory{}
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
oCfg := cfg.(*Config)

Expand Down
Loading

0 comments on commit 0a07047

Please sign in to comment.