Path: blob/main/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go
4096 views
package jaeger_remote_sampling12import (3"fmt"4"time"56"github.com/grafana/agent/component"7"github.com/grafana/agent/component/otelcol"8"github.com/grafana/agent/component/otelcol/extension"9"github.com/grafana/agent/component/otelcol/extension/jaeger_remote_sampling/internal/jaegerremotesampling"10"github.com/grafana/agent/pkg/river"11otelcomponent "go.opentelemetry.io/collector/component"12otelconfig "go.opentelemetry.io/collector/config"13)1415func init() {16component.Register(component.Registration{17Name: "otelcol.extension.jaeger_remote_sampling",18Args: Arguments{},1920Build: func(opts component.Options, args component.Arguments) (component.Component, error) {21fact := jaegerremotesampling.NewFactory()2223return extension.New(opts, fact, args.(Arguments))24},25})26}2728type (29// GRPCServerArguments is used to configure otelcol.extension.jaeger_remote_sampling with30// component-specific defaults.31GRPCServerArguments otelcol.GRPCServerArguments3233// HTTPServerArguments is used to configure otelcol.extension.jaeger_remote_sampling with34// component-specific defaults.35HTTPServerArguments otelcol.HTTPServerArguments36)3738var (39_ river.Unmarshaler = (*GRPCServerArguments)(nil)40_ river.Unmarshaler = (*HTTPServerArguments)(nil)41)4243// Default server settings.44var (45DefaultGRPCServerArguments = GRPCServerArguments{46Endpoint: "0.0.0.0:14250",47Transport: "tcp",48}4950DefaultHTTPServerArguments = HTTPServerArguments{51Endpoint: "0.0.0.0:5778",52}53)5455// Arguments configures the otelcol.extension.jaegerremotesampling component.56type Arguments struct {57GRPC *GRPCServerArguments `river:"grpc,block,optional"`58HTTP *HTTPServerArguments `river:"http,block,optional"`5960Source ArgumentsSource `river:"source,block"`61}6263type ArgumentsSource struct {64Content string `river:"content,attr,optional"`65Remote *otelcol.GRPCClientArguments `river:"remote,block,optional"`66File string `river:"file,attr,optional"`67ReloadInterval time.Duration `river:"reload_interval,attr,optional"`68}6970var (71_ extension.Arguments = Arguments{}72_ river.Unmarshaler = (*Arguments)(nil)73)7475// Convert implements extension.Arguments.76func (args Arguments) Convert() (otelconfig.Extension, error) {77return &jaegerremotesampling.Config{78HTTPServerSettings: (*otelcol.HTTPServerArguments)(args.HTTP).Convert(),79GRPCServerSettings: (*otelcol.GRPCServerArguments)(args.GRPC).Convert(),80Source: jaegerremotesampling.Source{81Remote: args.Source.Remote.Convert(),82File: args.Source.File,83ReloadInterval: args.Source.ReloadInterval,84Contents: args.Source.Content,85},86}, nil87}8889// Extensions implements extension.Arguments.90func (args Arguments) Extensions() map[otelconfig.ComponentID]otelcomponent.Extension {91return nil92}9394// Exporters implements extension.Arguments.95func (args Arguments) Exporters() map[otelconfig.DataType]map[otelconfig.ComponentID]otelcomponent.Exporter {96return nil97}9899// UnmarshalRiver applies defaults to args before unmarshaling.100func (a *Arguments) UnmarshalRiver(f func(interface{}) error) error {101type args Arguments102err := f((*args)(a))103if err != nil {104return err105}106107if a.GRPC == nil && a.HTTP == nil {108return fmt.Errorf("http or grpc must be configured to serve the sampling document")109}110111return nil112}113114func (a *ArgumentsSource) UnmarshalRiver(f func(interface{}) error) error {115type args ArgumentsSource116err := f((*args)(a))117if err != nil {118return err119}120121// remote config, local file and contents are all mutually exclusive122sourcesSet := 0123if a.Content != "" {124sourcesSet++125}126if a.File != "" {127sourcesSet++128}129if a.Remote != nil {130sourcesSet++131}132133if sourcesSet == 0 {134return fmt.Errorf("one of contents, file or remote must be configured")135}136if sourcesSet > 1 {137return fmt.Errorf("only one of contents, file or remote can be configured")138}139140return nil141}142143// UnmarshalRiver implements river.Unmarshaler and supplies defaults.144func (args *GRPCServerArguments) UnmarshalRiver(f func(interface{}) error) error {145*args = DefaultGRPCServerArguments146type arguments GRPCServerArguments147return f((*arguments)(args))148}149150// UnmarshalRiver implements river.Unmarshaler and supplies defaults.151func (args *HTTPServerArguments) UnmarshalRiver(f func(interface{}) error) error {152*args = DefaultHTTPServerArguments153type arguments HTTPServerArguments154return f((*arguments)(args))155}156157158