1
1
package server
2
2
3
3
import (
4
- "fmt"
5
4
"io"
6
- "os"
7
- "strconv"
8
- "strings"
9
- "time"
10
5
11
6
opentracing "github.com/opentracing/opentracing-go"
12
7
jaeger "github.com/uber/jaeger-client-go"
13
8
jaegercfg "github.com/uber/jaeger-client-go/config"
14
9
"github.com/uber/jaeger-lib/metrics"
15
- errors "gopkg.in/src-d/go-errors.v1"
16
10
"gopkg.in/src-d/go-vitess.v0/mysql"
17
11
)
18
12
19
13
const (
20
- // environment variable names
21
- envServiceName = "JAEGER_SERVICE_NAME"
22
- envDisabled = "JAEGER_DISABLED"
23
- envRPCMetrics = "JAEGER_RPC_METRICS"
24
- envTags = "JAEGER_TAGS"
25
- envSamplerType = "JAEGER_SAMPLER_TYPE"
26
- envSamplerParam = "JAEGER_SAMPLER_PARAM"
27
- envSamplerManagerHostPort = "JAEGER_SAMPLER_MANAGER_HOST_PORT"
28
- envSamplerMaxOperations = "JAEGER_SAMPLER_MAX_OPERATIONS"
29
- envSamplerRefreshInterval = "JAEGER_SAMPLER_REFRESH_INTERVAL"
30
- envReporterMaxQueueSize = "JAEGER_REPORTER_MAX_QUEUE_SIZE"
31
- envReporterFlushInterval = "JAEGER_REPORTER_FLUSH_INTERVAL"
32
- envReporterLogSpans = "JAEGER_REPORTER_LOG_SPANS"
33
- envAgentHost = "JAEGER_AGENT_HOST"
34
- envAgentPort = "JAEGER_AGENT_PORT"
35
-
36
- jaegerDefaultUDPSpanServerHost = "localhost"
37
- jaegerDefaultUDPSpanServerPort = 6831
14
+ jaegerDefaultServiceName = "go-mysql-server"
38
15
)
39
16
40
17
// Config for the mysql server.
@@ -50,173 +27,17 @@ type Config struct {
50
27
// Tracer creates a new tracer for the current configuration. It also returns
51
28
// an io.Closer to close the tracer and an error, if any.
52
29
func (c Config ) Tracer () (opentracing.Tracer , io.Closer , error ) {
53
- cfg := & jaegercfg.Configuration {}
54
-
55
- serviceName := "go-mysql-server"
56
- if e := os .Getenv (envServiceName ); e != "" {
57
- serviceName = e
58
- }
59
-
60
- if e := os .Getenv (envRPCMetrics ); e != "" {
61
- if value , err := strconv .ParseBool (e ); err == nil {
62
- cfg .RPCMetrics = value
63
- } else {
64
- return nil , nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envRPCMetrics , e )
65
- }
66
- }
67
-
68
- if e := os .Getenv (envDisabled ); e != "" {
69
- if value , err := strconv .ParseBool (e ); err == nil {
70
- cfg .Disabled = value
71
- } else {
72
- return nil , nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envDisabled , e )
73
- }
74
- }
75
-
76
- if sampler , err := samplerConfigFromEnv (); err == nil {
77
- cfg .Sampler = sampler
78
- } else {
79
- return nil , nil , errors .NewKind ("cannot obtain sampler config from env" ).Wrap (err )
80
- }
81
-
82
- if reporter , err := reporterConfigFromEnv (); err == nil {
83
- cfg .Reporter = reporter
84
- } else {
85
- return nil , nil , errors .NewKind ("cannot obtain reporter config from env" ).Wrap (err )
86
- }
87
-
88
- var opts = []jaegercfg.Option {
89
- jaegercfg .Metrics (metrics .NullFactory ),
90
- jaegercfg .Logger (jaeger .StdLogger ),
91
- }
92
- if e := os .Getenv (envTags ); e != "" {
93
- tags := parseTags (e )
94
- for _ , tag := range tags {
95
- opts = append (opts , jaegercfg .Tag (tag .Key , tag .Value ))
96
- }
97
- }
98
-
99
- tracer , closer , err := cfg .New (serviceName , opts ... )
30
+ cfg , err := jaegercfg .FromEnv ()
100
31
if err != nil {
101
- return nil , nil , errors .NewKind ("Could not initialize jaeger tracer" ).Wrap (err )
102
- }
103
- opentracing .SetGlobalTracer (tracer )
104
-
105
- return tracer , closer , err
106
- }
107
-
108
- // samplerConfigFromEnv creates a new SamplerConfig based on the environment variables
109
- func samplerConfigFromEnv () (* jaegercfg.SamplerConfig , error ) {
110
- sc := & jaegercfg.SamplerConfig {}
111
-
112
- if e := os .Getenv (envSamplerType ); e != "" {
113
- sc .Type = e
114
- }
115
-
116
- if e := os .Getenv (envSamplerParam ); e != "" {
117
- if value , err := strconv .ParseFloat (e , 64 ); err == nil {
118
- sc .Param = value
119
- } else {
120
- return nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envSamplerParam , e )
121
- }
122
- }
123
-
124
- if e := os .Getenv (envSamplerManagerHostPort ); e != "" {
125
- sc .SamplingServerURL = e
126
- }
127
-
128
- if e := os .Getenv (envSamplerMaxOperations ); e != "" {
129
- if value , err := strconv .ParseInt (e , 10 , 0 ); err == nil {
130
- sc .MaxOperations = int (value )
131
- } else {
132
- return nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envSamplerMaxOperations , e )
133
- }
32
+ return nil , nil , err
134
33
}
135
34
136
- if e := os .Getenv (envSamplerRefreshInterval ); e != "" {
137
- if value , err := time .ParseDuration (e ); err == nil {
138
- sc .SamplingRefreshInterval = value
139
- } else {
140
- return nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envSamplerRefreshInterval , e )
141
- }
35
+ if cfg .ServiceName == "" {
36
+ cfg .ServiceName = jaegerDefaultServiceName
142
37
}
143
38
144
- return sc , nil
145
- }
146
-
147
- // reporterConfigFromEnv creates a new ReporterConfig based on the environment variables
148
- func reporterConfigFromEnv () (* jaegercfg.ReporterConfig , error ) {
149
- rc := & jaegercfg.ReporterConfig {}
150
-
151
- if e := os .Getenv (envReporterMaxQueueSize ); e != "" {
152
- if value , err := strconv .ParseInt (e , 10 , 0 ); err == nil {
153
- rc .QueueSize = int (value )
154
- } else {
155
- return nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envReporterMaxQueueSize , e )
156
- }
157
- }
158
-
159
- if e := os .Getenv (envReporterFlushInterval ); e != "" {
160
- if value , err := time .ParseDuration (e ); err == nil {
161
- rc .BufferFlushInterval = value
162
- } else {
163
- return nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envReporterFlushInterval , e )
164
- }
165
- }
166
-
167
- if e := os .Getenv (envReporterLogSpans ); e != "" {
168
- if value , err := strconv .ParseBool (e ); err == nil {
169
- rc .LogSpans = value
170
- } else {
171
- return nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envReporterLogSpans , e )
172
- }
173
- }
174
-
175
- host := jaegerDefaultUDPSpanServerHost
176
- if e := os .Getenv (envAgentHost ); e != "" {
177
- host = e
178
- }
179
-
180
- port := jaegerDefaultUDPSpanServerPort
181
- if e := os .Getenv (envAgentPort ); e != "" {
182
- if value , err := strconv .ParseInt (e , 10 , 0 ); err == nil {
183
- port = int (value )
184
- } else {
185
- return nil , errors .NewKind ("cannot parse env var %s=%s" ).Wrap (err , envAgentPort , e )
186
- }
187
- }
188
-
189
- // the side effect of this is that we are building the default value, even if none of the env vars
190
- // were not explicitly passed
191
- rc .LocalAgentHostPort = fmt .Sprintf ("%s:%d" , host , port )
192
-
193
- return rc , nil
194
- }
195
-
196
- // parseTags parses the given string into a collection of Tags.
197
- // Spec for this value:
198
- // - comma separated list of key=value
199
- // - value can be specified using the notation ${envVar:defaultValue}, where `envVar`
200
- // is an environment variable and `defaultValue` is the value to use in case the env var is not set
201
- func parseTags (sTags string ) []opentracing.Tag {
202
- pairs := strings .Split (sTags , "," )
203
- tags := make ([]opentracing.Tag , 0 )
204
- for _ , p := range pairs {
205
- kv := strings .SplitN (p , "=" , 2 )
206
- k , v := strings .TrimSpace (kv [0 ]), strings .TrimSpace (kv [1 ])
207
-
208
- if strings .HasPrefix (v , "${" ) && strings .HasSuffix (v , "}" ) {
209
- ed := strings .SplitN (v [2 :len (v )- 1 ], ":" , 2 )
210
- e , d := ed [0 ], ed [1 ]
211
- v = os .Getenv (e )
212
- if v == "" && d != "" {
213
- v = d
214
- }
215
- }
216
-
217
- tag := opentracing.Tag {Key : k , Value : v }
218
- tags = append (tags , tag )
219
- }
220
-
221
- return tags
39
+ return cfg .NewTracer (
40
+ jaegercfg .Logger (jaeger .StdLogger ),
41
+ jaegercfg .Metrics (metrics .NullFactory ),
42
+ )
222
43
}
0 commit comments