forked from TykTechnologies/tyk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopentracing_custom_env_loader.go
149 lines (140 loc) · 4.32 KB
/
opentracing_custom_env_loader.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package config
import (
"encoding/json"
"github.com/kelseyhightower/envconfig"
jaeger "github.com/uber/jaeger-client-go/config"
"gopkg.in/yaml.v3"
)
// ZipkinConfig configuration options used to initialize openzipkin opentracing
// client.
type ZipkinConfig struct {
Reporter Reporter `json:"reporter"`
Sampler Sampler `json:"sampler"`
}
type Reporter struct {
// URL connection url to the zipkin server
URL string `json:"url"`
BatchSize int `json:"batch_size"`
MaxBacklog int `json:"max_backlog"`
}
type Sampler struct {
//Name is the name of the sampler to use. Options are
//
// "boundary"
// is appropriate for high-traffic instrumentation who
// provision random trace ids, and make the sampling decision only once.
// It defends against nodes in the cluster selecting exactly the same ids.
//
// "count"
// is appropriate for low-traffic instrumentation or
// those who do not provision random trace ids. It is not appropriate for
// collectors as the sampling decision isn't idempotent (consistent based
// on trace id).
//
// "mod"
// provides a generic type Sampler
Name string `json:"name"`
//Rate is used by both "boundary" and "count" samplers
Rate float64 `json:"rate"`
//Salt is used by "boundary" sampler
Salt int64 `json:"salt"`
// Mod is only used when sampler is mod
Mod uint64 `json:"mod"`
}
// DecodeJSON marshals src to json and tries to unmarshal the result into
// dest.
func DecodeJSON(dest, src interface{}) error {
b, err := json.Marshal(src)
if err != nil {
return err
}
return json.Unmarshal(b, dest)
}
func DecodeYAML(dest, src interface{}) error {
b, err := yaml.Marshal(src)
if err != nil {
return err
}
return yaml.Unmarshal(b, dest)
}
// loadZipkin tries to lad zipkin configuration from environment variables.
//
// list of zipkin configuration env variables
//
// TYK_GW_TRACER_OPTIONS_REPORTER_URL
// TYK_GW_TRACER_OPTIONS_REPORTER_BATCHSIZE
// TYK_GW_TRACER_OPTIONS_REPORTER_MAXBACKLOG
// TYK_GW_TRACER_OPTIONS_SAMPLER_NAME
// TYK_GW_TRACER_OPTIONS_SAMPLER_RATE
// TYK_GW_TRACER_OPTIONS_SAMPLER_SALT
// TYK_GW_TRACER_OPTIONS_SAMPLER_MOD
func loadZipkin(prefix string, c *Config) error {
if c.Tracer.Name != "zipkin" {
return nil
}
var zip ZipkinConfig
if err := DecodeJSON(&zip, c.Tracer.Options); err != nil {
return err
}
qualifyPrefix := prefix + "_TRACER_OPTIONS"
err := envconfig.Process(qualifyPrefix, &zip)
if err != nil {
return err
}
o := make(map[string]interface{})
if err := DecodeJSON(&o, zip); err != nil {
return err
}
c.Tracer.Options = o
return nil
}
// loads jaeger configuration from environment variables.
//
// List of jaeger configuration env vars
//
// TYK_GW_TRACER_OPTIONS_SERVICENAME
// TYK_GW_TRACER_OPTIONS_DISABLED
// TYK_GW_TRACER_OPTIONS_RPCMETRICS
// TYK_GW_TRACER_OPTIONS_TAGS
// TYK_GW_TRACER_OPTIONS_SAMPLER_TYPE
// TYK_GW_TRACER_OPTIONS_SAMPLER_PARAM
// TYK_GW_TRACER_OPTIONS_SAMPLER_SAMPLINGSERVERURL
// TYK_GW_TRACER_OPTIONS_SAMPLER_MAXOPERATIONS
// TYK_GW_TRACER_OPTIONS_SAMPLER_SAMPLINGREFRESHINTERVAL
// TYK_GW_TRACER_OPTIONS_REPORTER_QUEUESIZE
// TYK_GW_TRACER_OPTIONS_REPORTER_BUFFERFLUSHINTERVAL
// TYK_GW_TRACER_OPTIONS_REPORTER_LOGSPANS
// TYK_GW_TRACER_OPTIONS_REPORTER_LOCALAGENTHOSTPORT
// TYK_GW_TRACER_OPTIONS_REPORTER_COLLECTORENDPOINT
// TYK_GW_TRACER_OPTIONS_REPORTER_USER
// TYK_GW_TRACER_OPTIONS_REPORTER_PASSWORD
// TYK_GW_TRACER_OPTIONS_HEADERS_JAEGERDEBUGHEADER
// TYK_GW_TRACER_OPTIONS_HEADERS_JAEGERBAGGAGEHEADER
// TYK_GW_TRACER_OPTIONS_HEADERS_TRACECONTEXTHEADERNAME
// TYK_GW_TRACER_OPTIONS_HEADERS_TRACEBAGGAGEHEADERPREFIX
// TYK_GW_TRACER_OPTIONS_BAGGAGERESTRICTIONS_DENYBAGGAGEONINITIALIZATIONFAILURE
// TYK_GW_TRACER_OPTIONS_BAGGAGERESTRICTIONS_HOSTPORT
// TYK_GW_TRACER_OPTIONS_BAGGAGERESTRICTIONS_REFRESHINTERVAL
// TYK_GW_TRACER_OPTIONS_THROTTLER_HOSTPORT
// TYK_GW_TRACER_OPTIONS_THROTTLER_REFRESHINTERVAL
// TYK_GW_TRACER_OPTIONS_THROTTLER_SYNCHRONOUSINITIALIZATION
func loadJaeger(prefix string, c *Config) error {
if c.Tracer.Name != "jaeger" {
return nil
}
var j jaeger.Configuration
if err := DecodeYAML(&j, c.Tracer.Options); err != nil {
return err
}
qualifyPrefix := prefix + "_TRACER_OPTIONS"
err := envconfig.Process(qualifyPrefix, &j)
if err != nil {
return err
}
o := make(map[string]interface{})
if err := DecodeYAML(&o, j); err != nil {
return err
}
c.Tracer.Options = o
return nil
}