Files
Andrew WilkinsandGitHub 99a842c7ea otelcol: remove default telemetry factory (#14062)
#### Description

Remove the default telemetry factory, and require callers to specify
one, to keep things maintainable.

#### Link to tracking issue

Fixes #14003

#### Testing

<!--Describe the documentation added.-->
#### Documentation

N/A
2025-11-07 11:40:00 +00:00

52 lines
2.1 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package otelcol // import "go.opentelemetry.io/collector/otelcol"
import (
"errors"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/extension"
"go.opentelemetry.io/collector/otelcol/internal/configunmarshaler"
"go.opentelemetry.io/collector/processor"
"go.opentelemetry.io/collector/receiver"
"go.opentelemetry.io/collector/service"
)
var errNilTelemetryFactory = errors.New("otelcol.Factories.Telemetry must not be nil. For example, you can use otelconftelemetry.NewFactory to build a telemetry factory")
type configSettings struct {
Receivers *configunmarshaler.Configs[receiver.Factory] `mapstructure:"receivers"`
Processors *configunmarshaler.Configs[processor.Factory] `mapstructure:"processors"`
Exporters *configunmarshaler.Configs[exporter.Factory] `mapstructure:"exporters"`
Connectors *configunmarshaler.Configs[connector.Factory] `mapstructure:"connectors"`
Extensions *configunmarshaler.Configs[extension.Factory] `mapstructure:"extensions"`
Service service.Config `mapstructure:"service"`
}
// unmarshal the configSettings from a confmap.Conf.
// After the config is unmarshalled, `Validate()` must be called to validate.
func unmarshal(v *confmap.Conf, factories Factories) (*configSettings, error) {
if factories.Telemetry == nil {
return nil, errNilTelemetryFactory
}
// Unmarshal top level sections and validate.
cfg := &configSettings{
Receivers: configunmarshaler.NewConfigs(factories.Receivers),
Processors: configunmarshaler.NewConfigs(factories.Processors),
Exporters: configunmarshaler.NewConfigs(factories.Exporters),
Connectors: configunmarshaler.NewConfigs(factories.Connectors),
Extensions: configunmarshaler.NewConfigs(factories.Extensions),
// TODO: Add a component.ServiceFactory to allow this to be defined by the Service.
Service: service.Config{
Telemetry: factories.Telemetry.CreateDefaultConfig(),
},
}
err := v.Unmarshal(&cfg)
return cfg, err
}