|
|
@@ -8,6 +8,7 @@ import (
|
|
8
|
8
|
"strings"
|
|
9
|
9
|
|
|
10
|
10
|
"github.com/juju/errors"
|
|
|
11
|
+ statsd "gopkg.in/alexcesaro/statsd.v2"
|
|
11
|
12
|
)
|
|
12
|
13
|
|
|
13
|
14
|
// Buffer sizes define internal socket buffer sizes.
|
|
|
@@ -32,6 +33,14 @@ type Config struct {
|
|
32
|
33
|
PublicIPv6 net.IP
|
|
33
|
34
|
StatsIP net.IP
|
|
34
|
35
|
|
|
|
36
|
+ StatsD struct {
|
|
|
37
|
+ Addr net.Addr
|
|
|
38
|
+ Prefix string
|
|
|
39
|
+ Tags map[string]string
|
|
|
40
|
+ TagsFormat statsd.TagFormat
|
|
|
41
|
+ Enabled bool
|
|
|
42
|
+ }
|
|
|
43
|
+
|
|
35
|
44
|
Secret []byte
|
|
36
|
45
|
AdTag []byte
|
|
37
|
46
|
}
|
|
|
@@ -109,7 +118,9 @@ func NewConfig(debug, verbose bool, // nolint: gocyclo
|
|
109
|
118
|
publicIPv4 net.IP, PublicIPv4Port uint16,
|
|
110
|
119
|
publicIPv6 net.IP, publicIPv6Port uint16,
|
|
111
|
120
|
statsIP net.IP, statsPort uint16,
|
|
112
|
|
- secret, adtag string) (*Config, error) {
|
|
|
121
|
+ secret, adtag string,
|
|
|
122
|
+ statsdIP string, statsdPort uint16, statsdNetwork string, statsdPrefix string,
|
|
|
123
|
+ statsdTagsFormat string, statsdTags map[string]string) (*Config, error) {
|
|
113
|
124
|
secureMode := false
|
|
114
|
125
|
if strings.HasPrefix(secret, "dd") && len(secret) == 34 {
|
|
115
|
126
|
secureMode = true
|
|
|
@@ -174,5 +185,36 @@ func NewConfig(debug, verbose bool, // nolint: gocyclo
|
|
174
|
185
|
SecureMode: secureMode,
|
|
175
|
186
|
}
|
|
176
|
187
|
|
|
|
188
|
+ if statsdIP != "" {
|
|
|
189
|
+ conf.StatsD.Enabled = true
|
|
|
190
|
+ conf.StatsD.Prefix = statsdPrefix
|
|
|
191
|
+ conf.StatsD.Tags = statsdTags
|
|
|
192
|
+
|
|
|
193
|
+ var addr net.Addr
|
|
|
194
|
+ hostPort := net.JoinHostPort(statsdIP, strconv.Itoa(int(statsdPort)))
|
|
|
195
|
+ switch statsdNetwork {
|
|
|
196
|
+ case "tcp":
|
|
|
197
|
+ addr, err = net.ResolveTCPAddr("tcp", hostPort)
|
|
|
198
|
+ case "udp":
|
|
|
199
|
+ addr, err = net.ResolveUDPAddr("udp", hostPort)
|
|
|
200
|
+ default:
|
|
|
201
|
+ err = errors.Errorf("Unknown network %s", statsdNetwork)
|
|
|
202
|
+ }
|
|
|
203
|
+ if err != nil {
|
|
|
204
|
+ return nil, errors.Annotate(err, "Cannot resolve statsd address")
|
|
|
205
|
+ }
|
|
|
206
|
+ conf.StatsD.Addr = addr
|
|
|
207
|
+
|
|
|
208
|
+ switch statsdTagsFormat {
|
|
|
209
|
+ case "datadog":
|
|
|
210
|
+ conf.StatsD.TagsFormat = statsd.Datadog
|
|
|
211
|
+ case "influxdb":
|
|
|
212
|
+ conf.StatsD.TagsFormat = statsd.InfluxDB
|
|
|
213
|
+ case "":
|
|
|
214
|
+ default:
|
|
|
215
|
+ return nil, errors.Errorf("Unknown tags format %s", statsdTagsFormat)
|
|
|
216
|
+ }
|
|
|
217
|
+ }
|
|
|
218
|
+
|
|
177
|
219
|
return conf, nil
|
|
178
|
220
|
}
|