Просмотр исходного кода

Propagate statsd to config

tags/0.10
9seconds 7 лет назад
Родитель
Сommit
c64f97082c
4 измененных файлов: 79 добавлений и 3 удалений
  1. 7
    1
      Gopkg.lock
  2. 4
    0
      Gopkg.toml
  3. 43
    1
      config/config.go
  4. 25
    1
      main.go

+ 7
- 1
Gopkg.lock Просмотреть файл

100
   revision = "947dcec5ba9c011838740e680966fd7087a71d0d"
100
   revision = "947dcec5ba9c011838740e680966fd7087a71d0d"
101
   version = "v2.2.6"
101
   version = "v2.2.6"
102
 
102
 
103
+[[projects]]
104
+  name = "gopkg.in/alexcesaro/statsd.v2"
105
+  packages = ["."]
106
+  revision = "7fea3f0d2fab1ad973e641e51dba45443a311a90"
107
+  version = "v2.0.0"
108
+
103
 [solve-meta]
109
 [solve-meta]
104
   analyzer-name = "dep"
110
   analyzer-name = "dep"
105
   analyzer-version = 1
111
   analyzer-version = 1
106
-  inputs-digest = "f828340a30ea13c563829f9a37d0ff62974d4578411c9be02e61125dbdf98692"
112
+  inputs-digest = "7fad0f62feb7737b064d85cc4333a1a3e9298faec2afd864b4404f515fc7f17c"
107
   solver-name = "gps-cdcl"
113
   solver-name = "gps-cdcl"
108
   solver-version = 1
114
   solver-version = 1

+ 4
- 0
Gopkg.toml Просмотреть файл

52
 [[constraint]]
52
 [[constraint]]
53
   name = "github.com/beevik/ntp"
53
   name = "github.com/beevik/ntp"
54
   version = "0.2.0"
54
   version = "0.2.0"
55
+
56
+[[constraint]]
57
+  name = "gopkg.in/alexcesaro/statsd.v2"
58
+  version = "2.0.0"

+ 43
- 1
config/config.go Просмотреть файл

8
 	"strings"
8
 	"strings"
9
 
9
 
10
 	"github.com/juju/errors"
10
 	"github.com/juju/errors"
11
+	statsd "gopkg.in/alexcesaro/statsd.v2"
11
 )
12
 )
12
 
13
 
13
 // Buffer sizes define internal socket buffer sizes.
14
 // Buffer sizes define internal socket buffer sizes.
32
 	PublicIPv6 net.IP
33
 	PublicIPv6 net.IP
33
 	StatsIP    net.IP
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
 	Secret []byte
44
 	Secret []byte
36
 	AdTag  []byte
45
 	AdTag  []byte
37
 }
46
 }
109
 	publicIPv4 net.IP, PublicIPv4Port uint16,
118
 	publicIPv4 net.IP, PublicIPv4Port uint16,
110
 	publicIPv6 net.IP, publicIPv6Port uint16,
119
 	publicIPv6 net.IP, publicIPv6Port uint16,
111
 	statsIP net.IP, statsPort uint16,
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
 	secureMode := false
124
 	secureMode := false
114
 	if strings.HasPrefix(secret, "dd") && len(secret) == 34 {
125
 	if strings.HasPrefix(secret, "dd") && len(secret) == 34 {
115
 		secureMode = true
126
 		secureMode = true
174
 		SecureMode:     secureMode,
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
 	return conf, nil
219
 	return conf, nil
178
 }
220
 }

+ 25
- 1
main.go Просмотреть файл

61
 			Envar("MTG_IPV6_PORT").
61
 			Envar("MTG_IPV6_PORT").
62
 			Uint16()
62
 			Uint16()
63
 
63
 
64
-	statsIP = app.Flag("stats-ip", "Which IP bind stats server to").
64
+	statsIP = app.Flag("stats-ip", "Which IP bind stats server to.").
65
 		Short('t').
65
 		Short('t').
66
 		Envar("MTG_STATS_IP").
66
 		Envar("MTG_STATS_IP").
67
 		Default("127.0.0.1").
67
 		Default("127.0.0.1").
72
 			Default("3129").
72
 			Default("3129").
73
 			Uint16()
73
 			Uint16()
74
 
74
 
75
+	statsdIP = app.Flag("statsd-ip", "Which IP should we use for working with statsd.").
76
+			Envar("MTG_STATSD_IP").
77
+			String()
78
+	statsdPort = app.Flag("statsd-port", "Which port should we use for working with statsd.").
79
+			Envar("MTG_STATSD_PORT").
80
+			Default("8125").
81
+			Uint16()
82
+	statsdNetwork = app.Flag("statsd-network", "Which network is used to work with statsd. Only 'tcp' and 'udp' are supported.").
83
+			Envar("MTG_STATSD_NETWORK").
84
+			Default("udp").
85
+			String()
86
+	statsdPrefix = app.Flag("statsd-prefix", "Which bucket prefix should we use for sending stats to statsd.").
87
+			Envar("MTG_STATSD_PREFIX").
88
+			Default("mtg").
89
+			String()
90
+	statsdTagsFormat = app.Flag("statsd-tags-format", "Which tag format should we use to send stats metrics. Valid options are 'datadog' and 'influxdb'.").
91
+				Envar("MTG_STATSD_TAGS_FORMAT").
92
+				String()
93
+	statsdTags = app.Flag("statsd-tags", "Tags to use for working with statsd (specified as 'key=value').").
94
+			Envar("MTG_STATSD_TAGS").
95
+			StringMap()
96
+
75
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
97
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
76
 	adtag  = app.Arg("adtag", "ADTag of the proxy.").String()
98
 	adtag  = app.Arg("adtag", "ADTag of the proxy.").String()
77
 )
99
 )
96
 		*publicIPv6, *publicIPv6Port,
118
 		*publicIPv6, *publicIPv6Port,
97
 		*statsIP, *statsPort,
119
 		*statsIP, *statsPort,
98
 		*secret, *adtag,
120
 		*secret, *adtag,
121
+		*statsdIP, *statsdPort, *statsdNetwork, *statsdPrefix,
122
+		*statsdTagsFormat, *statsdTags,
99
 	)
123
 	)
100
 	if err != nil {
124
 	if err != nil {
101
 		usage(err.Error())
125
 		usage(err.Error())

Загрузка…
Отмена
Сохранить