receiver/jaegerreceiver/factory.go (68 lines of code) (raw):
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package jaegerreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver"
// This file implements factory for Jaeger receiver.
import (
"context"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/confignet"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/featuregate"
"go.opentelemetry.io/collector/receiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver/internal/metadata"
)
const (
// Protocol values.
protoGRPC = "grpc"
protoThriftHTTP = "thrift_http"
protoThriftBinary = "thrift_binary"
protoThriftCompact = "thrift_compact"
// Default endpoints to bind to.
defaultGRPCEndpoint = "localhost:14250"
defaultHTTPEndpoint = "localhost:14268"
defaultThriftCompactEndpoint = "localhost:6831"
defaultThriftBinaryEndpoint = "localhost:6832"
)
var disableJaegerReceiverRemoteSampling = featuregate.GlobalRegistry().MustRegister(
"receiver.jaeger.DisableRemoteSampling",
featuregate.StageBeta,
featuregate.WithRegisterDescription("When enabled, the Jaeger Receiver will fail to start when it is configured with remote_sampling config. When disabled, the receiver will start and the remote_sampling config will be no-op."),
)
// NewFactory creates a new Jaeger receiver factory.
func NewFactory() receiver.Factory {
return receiver.NewFactory(
metadata.Type,
createDefaultConfig,
receiver.WithTraces(createTracesReceiver, metadata.TracesStability))
}
// CreateDefaultConfig creates the default configuration for Jaeger receiver.
func createDefaultConfig() component.Config {
return &Config{
Protocols: Protocols{
GRPC: &configgrpc.ServerConfig{
NetAddr: confignet.AddrConfig{
Endpoint: defaultGRPCEndpoint,
Transport: confignet.TransportTypeTCP,
},
},
ThriftHTTP: &confighttp.ServerConfig{
Endpoint: defaultHTTPEndpoint,
},
ThriftBinaryUDP: &ProtocolUDP{
Endpoint: defaultThriftBinaryEndpoint,
ServerConfigUDP: defaultServerConfigUDP(),
},
ThriftCompactUDP: &ProtocolUDP{
Endpoint: defaultThriftCompactEndpoint,
ServerConfigUDP: defaultServerConfigUDP(),
},
},
}
}
// createTracesReceiver creates a trace receiver based on provided config.
func createTracesReceiver(
_ context.Context,
set receiver.Settings,
cfg component.Config,
nextConsumer consumer.Traces,
) (receiver.Traces, error) {
// Convert settings in the source config to configuration struct
// that Jaeger receiver understands.
// Error handling for the conversion is done in the Validate function from the Config object itself.
rCfg := cfg.(*Config)
if rCfg.RemoteSampling != nil {
set.Logger.Warn("You are using a deprecated no-op `remote_sampling` option which will be removed soon; use a `jaegerremotesampling` extension instead")
}
// Create the receiver.
return newJaegerReceiver(set.ID, rCfg.Protocols, nextConsumer, set)
}