| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package stats
-
- import (
- "time"
-
- "github.com/juju/errors"
- statsd "gopkg.in/alexcesaro/statsd.v2"
-
- "github.com/9seconds/mtg/config"
- )
-
- const (
- statsdConnectionsAbridgedV4 = "connections.abridged.ipv4"
- statsdConnectionsAbridgedV6 = "connections.abridged.ipv6"
-
- statsdConnectionsIntermediateV4 = "connections.intermediate.ipv4"
- statsdConnectionsIntermediateV6 = "connections.intermediate.ipv6"
-
- statsdConnectionsSecureV4 = "connections.secure.ipv4"
- statsdConnectionsSecureV6 = "connections.secure.ipv6"
-
- statsdTrafficIngress = "traffic.ingress"
- statsdTrafficEgress = "traffic.egress"
-
- statsdSpeedIngress = "speed.ingress"
- statsdSpeedEgress = "speed.egress"
-
- statsdCrashes = "crashes"
- )
-
- const statsdPollTime = time.Second
-
- type statsdExporter struct {
- client *statsd.Client
- }
-
- func (s *statsdExporter) run() {
- for range time.Tick(statsdPollTime) {
- instance := GetStats()
-
- s.client.Gauge(statsdConnectionsAbridgedV4, instance.Connections.Abridged.IPv4)
- s.client.Gauge(statsdConnectionsAbridgedV6, instance.Connections.Abridged.IPv6)
- s.client.Gauge(statsdConnectionsIntermediateV4, instance.Connections.Intermediate.IPv4)
- s.client.Gauge(statsdConnectionsIntermediateV6, instance.Connections.Intermediate.IPv6)
- s.client.Gauge(statsdConnectionsSecureV4, instance.Connections.Secure.IPv4)
- s.client.Gauge(statsdConnectionsSecureV6, instance.Connections.Secure.IPv6)
- s.client.Gauge(statsdTrafficIngress, instance.Traffic.ingress)
- s.client.Gauge(statsdTrafficEgress, instance.Traffic.egress)
- s.client.Gauge(statsdSpeedIngress, instance.Speed.ingress)
- s.client.Gauge(statsdSpeedEgress, instance.Speed.egress)
- s.client.Gauge(statsdCrashes, instance.Crashes)
- }
- }
-
- func newStatsd(conf *config.Config) (*statsdExporter, error) {
- options := []statsd.Option{
- statsd.Network(conf.StatsD.Addr.Network()),
- statsd.Address(conf.StatsD.Addr.String()),
- statsd.Prefix(conf.StatsD.Prefix),
- }
-
- if conf.StatsD.TagsFormat > 0 {
- options = append(options, statsd.TagsFormat(conf.StatsD.TagsFormat))
- tags := make([]string, len(conf.StatsD.Tags)*2)
- for k, v := range conf.StatsD.Tags {
- tags = append(tags, k, v)
- }
- options = append(options, statsd.Tags(tags...))
- }
-
- client, err := statsd.New(options...)
- if err != nil {
- return nil, errors.Annotate(err, "Cannot create statsd client")
- }
-
- return &statsdExporter{client: client}, nil
- }
|