| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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.mutex.Lock()
-
- 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, uint64(instance.Traffic.Ingress))
- s.client.Gauge(statsdTrafficEgress, uint64(instance.Traffic.Egress))
- s.client.Gauge(statsdSpeedIngress, uint64(instance.Speed.Ingress))
- s.client.Gauge(statsdSpeedEgress, uint64(instance.Speed.Egress))
- s.client.Gauge(statsdCrashes, instance.Crashes)
-
- instance.mutex.Unlock()
- }
- }
-
- 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
- }
|