Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/otelcol/extension/jaeger_remote_sampling/jaeger_remote_sampling.go
4096 views
1
package jaeger_remote_sampling
2
3
import (
4
"fmt"
5
"time"
6
7
"github.com/grafana/agent/component"
8
"github.com/grafana/agent/component/otelcol"
9
"github.com/grafana/agent/component/otelcol/extension"
10
"github.com/grafana/agent/component/otelcol/extension/jaeger_remote_sampling/internal/jaegerremotesampling"
11
"github.com/grafana/agent/pkg/river"
12
otelcomponent "go.opentelemetry.io/collector/component"
13
otelconfig "go.opentelemetry.io/collector/config"
14
)
15
16
func init() {
17
component.Register(component.Registration{
18
Name: "otelcol.extension.jaeger_remote_sampling",
19
Args: Arguments{},
20
21
Build: func(opts component.Options, args component.Arguments) (component.Component, error) {
22
fact := jaegerremotesampling.NewFactory()
23
24
return extension.New(opts, fact, args.(Arguments))
25
},
26
})
27
}
28
29
type (
30
// GRPCServerArguments is used to configure otelcol.extension.jaeger_remote_sampling with
31
// component-specific defaults.
32
GRPCServerArguments otelcol.GRPCServerArguments
33
34
// HTTPServerArguments is used to configure otelcol.extension.jaeger_remote_sampling with
35
// component-specific defaults.
36
HTTPServerArguments otelcol.HTTPServerArguments
37
)
38
39
var (
40
_ river.Unmarshaler = (*GRPCServerArguments)(nil)
41
_ river.Unmarshaler = (*HTTPServerArguments)(nil)
42
)
43
44
// Default server settings.
45
var (
46
DefaultGRPCServerArguments = GRPCServerArguments{
47
Endpoint: "0.0.0.0:14250",
48
Transport: "tcp",
49
}
50
51
DefaultHTTPServerArguments = HTTPServerArguments{
52
Endpoint: "0.0.0.0:5778",
53
}
54
)
55
56
// Arguments configures the otelcol.extension.jaegerremotesampling component.
57
type Arguments struct {
58
GRPC *GRPCServerArguments `river:"grpc,block,optional"`
59
HTTP *HTTPServerArguments `river:"http,block,optional"`
60
61
Source ArgumentsSource `river:"source,block"`
62
}
63
64
type ArgumentsSource struct {
65
Content string `river:"content,attr,optional"`
66
Remote *otelcol.GRPCClientArguments `river:"remote,block,optional"`
67
File string `river:"file,attr,optional"`
68
ReloadInterval time.Duration `river:"reload_interval,attr,optional"`
69
}
70
71
var (
72
_ extension.Arguments = Arguments{}
73
_ river.Unmarshaler = (*Arguments)(nil)
74
)
75
76
// Convert implements extension.Arguments.
77
func (args Arguments) Convert() (otelconfig.Extension, error) {
78
return &jaegerremotesampling.Config{
79
HTTPServerSettings: (*otelcol.HTTPServerArguments)(args.HTTP).Convert(),
80
GRPCServerSettings: (*otelcol.GRPCServerArguments)(args.GRPC).Convert(),
81
Source: jaegerremotesampling.Source{
82
Remote: args.Source.Remote.Convert(),
83
File: args.Source.File,
84
ReloadInterval: args.Source.ReloadInterval,
85
Contents: args.Source.Content,
86
},
87
}, nil
88
}
89
90
// Extensions implements extension.Arguments.
91
func (args Arguments) Extensions() map[otelconfig.ComponentID]otelcomponent.Extension {
92
return nil
93
}
94
95
// Exporters implements extension.Arguments.
96
func (args Arguments) Exporters() map[otelconfig.DataType]map[otelconfig.ComponentID]otelcomponent.Exporter {
97
return nil
98
}
99
100
// UnmarshalRiver applies defaults to args before unmarshaling.
101
func (a *Arguments) UnmarshalRiver(f func(interface{}) error) error {
102
type args Arguments
103
err := f((*args)(a))
104
if err != nil {
105
return err
106
}
107
108
if a.GRPC == nil && a.HTTP == nil {
109
return fmt.Errorf("http or grpc must be configured to serve the sampling document")
110
}
111
112
return nil
113
}
114
115
func (a *ArgumentsSource) UnmarshalRiver(f func(interface{}) error) error {
116
type args ArgumentsSource
117
err := f((*args)(a))
118
if err != nil {
119
return err
120
}
121
122
// remote config, local file and contents are all mutually exclusive
123
sourcesSet := 0
124
if a.Content != "" {
125
sourcesSet++
126
}
127
if a.File != "" {
128
sourcesSet++
129
}
130
if a.Remote != nil {
131
sourcesSet++
132
}
133
134
if sourcesSet == 0 {
135
return fmt.Errorf("one of contents, file or remote must be configured")
136
}
137
if sourcesSet > 1 {
138
return fmt.Errorf("only one of contents, file or remote can be configured")
139
}
140
141
return nil
142
}
143
144
// UnmarshalRiver implements river.Unmarshaler and supplies defaults.
145
func (args *GRPCServerArguments) UnmarshalRiver(f func(interface{}) error) error {
146
*args = DefaultGRPCServerArguments
147
type arguments GRPCServerArguments
148
return f((*arguments)(args))
149
}
150
151
// UnmarshalRiver implements river.Unmarshaler and supplies defaults.
152
func (args *HTTPServerArguments) UnmarshalRiver(f func(interface{}) error) error {
153
*args = DefaultHTTPServerArguments
154
type arguments HTTPServerArguments
155
return f((*arguments)(args))
156
}
157
158