Skip to content

Commit 08a86f0

Browse files
committed
use cactus as statsd client
1 parent 4686fcd commit 08a86f0

File tree

4 files changed

+82
-1
lines changed

4 files changed

+82
-1
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ go 1.12
44

55
require (
66
github.com/GoMetric/go-statsd-client v1.0.2
7+
github.com/cactus/go-statsd-client/v5 v5.0.0
78
github.com/dgrijalva/jwt-go v3.2.0+incompatible
9+
github.com/golang/protobuf v1.5.2
810
github.com/gorilla/mux v1.7.3
911
github.com/julienschmidt/httprouter v1.3.0
1012
github.com/stretchr/testify v1.4.0

go.sum

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,21 @@ github.com/GoMetric/go-statsd-client v0.0.0-20191006202127-dc032ac6197b/go.mod h
33
github.com/GoMetric/go-statsd-client v1.0.0/go.mod h1:D1uEs99MnXBDuAkJMdegj5SxBsBzOctG06Wfxyjr8jE=
44
github.com/GoMetric/go-statsd-client v1.0.2 h1:HgAeuEAbzVlQGLNqjuGzczqbYwpStPcTjiO0v71ModE=
55
github.com/GoMetric/go-statsd-client v1.0.2/go.mod h1:B44qfLbrIFTm9+Xhqhep07th+soi+/t8g9HKwUvDlAk=
6+
github.com/cactus/go-statsd-client v1.0.1 h1:R58kYEe8CS4Dg7zNgGi8J0nFhYIGaBvIC7SHJ1l08is=
7+
github.com/cactus/go-statsd-client v3.2.1+incompatible h1:hSd8ARQzCrnKQUWKdOBbwhU1nGR/al1oiT1AeBzoaTY=
8+
github.com/cactus/go-statsd-client/v5 v5.0.0 h1:KqvIQtc9qt34uq+nu4nd1PwingWfBt/IISgtUQ2nSJk=
9+
github.com/cactus/go-statsd-client/v5 v5.0.0/go.mod h1:COEvJ1E+/E2L4q6QE5CkjWPi4eeDw9maJBMIuMPBZbY=
610
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
711
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
812
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
913
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
14+
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
15+
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
16+
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
17+
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
1018
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
1119
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
20+
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
1221
github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
1322
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
1423
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -17,6 +26,10 @@ github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
1726
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
1827
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
1928
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
29+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
30+
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
31+
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
32+
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
2033
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
2134
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
2235
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

proxy/server.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,17 @@ func NewServer(
5555
logger := log.New(logOutput, "", log.LstdFlags)
5656

5757
// create StatsD Client
58-
statsdClient := statsdclient.NewGoMetricClient(statsdHost, statsdPort)
58+
statsdClientName := "Cactus"
59+
60+
var statsdClient statsdclient.StatsdClientInterface
61+
switch statsdClientName {
62+
case "GoMetric":
63+
statsdClient = statsdclient.NewGoMetricClient(statsdHost, statsdPort)
64+
case "Cactus":
65+
statsdClient = statsdclient.NewCactusClient(statsdHost, statsdPort)
66+
default:
67+
panic("Passed statsd client not supported")
68+
}
5969

6070
// build route handler
6171
routeHandler := routehandler.NewRouteHandler(

proxy/statsdclient/cactus.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package statsdclient
2+
3+
import (
4+
"strconv"
5+
"time"
6+
7+
cactus "github.com/cactus/go-statsd-client/v5/statsd"
8+
)
9+
10+
type CactusStatsdClientAdapter struct {
11+
cactusClient cactus.Statter
12+
}
13+
14+
func (a *CactusStatsdClientAdapter) Open() {
15+
16+
}
17+
18+
func (a *CactusStatsdClientAdapter) Close() {
19+
a.cactusClient.Close()
20+
}
21+
22+
func (a *CactusStatsdClientAdapter) Count(key string, value int, sampleRate float32) {
23+
a.cactusClient.Inc(key, int64(value), sampleRate)
24+
}
25+
26+
func (a *CactusStatsdClientAdapter) Timing(key string, time int64, sampleRate float32) {
27+
a.cactusClient.Timing(key, time, sampleRate)
28+
}
29+
30+
func (a *CactusStatsdClientAdapter) Gauge(key string, value int) {
31+
a.cactusClient.Gauge(key, int64(value), 1)
32+
}
33+
34+
func (a *CactusStatsdClientAdapter) GaugeShift(key string, value int) {
35+
a.cactusClient.GaugeDelta(key, int64(value), 1)
36+
}
37+
38+
func (a *CactusStatsdClientAdapter) Set(key string, value int) {
39+
a.cactusClient.SetInt(key, int64(value), 1)
40+
}
41+
42+
func NewCactusClient(
43+
statsdHost string,
44+
statsdPort int,
45+
) StatsdClientInterface {
46+
cactusClient, _ := cactus.NewBufferedClient(
47+
statsdHost+":"+strconv.Itoa(statsdPort),
48+
"",
49+
100*time.Microsecond,
50+
1432,
51+
)
52+
53+
return &CactusStatsdClientAdapter{
54+
cactusClient: cactusClient,
55+
}
56+
}

0 commit comments

Comments
 (0)