Przeglądaj źródła

Propagate statsd to config

tags/0.10
9seconds 7 lat temu
rodzic
commit
c64f97082c
4 zmienionych plików z 79 dodań i 3 usunięć
  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 Wyświetl plik

@@ -100,9 +100,15 @@
100 100
   revision = "947dcec5ba9c011838740e680966fd7087a71d0d"
101 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 109
 [solve-meta]
104 110
   analyzer-name = "dep"
105 111
   analyzer-version = 1
106
-  inputs-digest = "f828340a30ea13c563829f9a37d0ff62974d4578411c9be02e61125dbdf98692"
112
+  inputs-digest = "7fad0f62feb7737b064d85cc4333a1a3e9298faec2afd864b4404f515fc7f17c"
107 113
   solver-name = "gps-cdcl"
108 114
   solver-version = 1

+ 4
- 0
Gopkg.toml Wyświetl plik

@@ -52,3 +52,7 @@
52 52
 [[constraint]]
53 53
   name = "github.com/beevik/ntp"
54 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 Wyświetl plik

@@ -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
 }

+ 25
- 1
main.go Wyświetl plik

@@ -61,7 +61,7 @@ var (
61 61
 			Envar("MTG_IPV6_PORT").
62 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 65
 		Short('t').
66 66
 		Envar("MTG_STATS_IP").
67 67
 		Default("127.0.0.1").
@@ -72,6 +72,28 @@ var (
72 72
 			Default("3129").
73 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 97
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
76 98
 	adtag  = app.Arg("adtag", "ADTag of the proxy.").String()
77 99
 )
@@ -96,6 +118,8 @@ func main() {
96 118
 		*publicIPv6, *publicIPv6Port,
97 119
 		*statsIP, *statsPort,
98 120
 		*secret, *adtag,
121
+		*statsdIP, *statsdPort, *statsdNetwork, *statsdPrefix,
122
+		*statsdTagsFormat, *statsdTags,
99 123
 	)
100 124
 	if err != nil {
101 125
 		usage(err.Error())

Ładowanie…
Anuluj
Zapisz