Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

statsd.go 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package stats
  2. import (
  3. "time"
  4. "github.com/juju/errors"
  5. statsd "gopkg.in/alexcesaro/statsd.v2"
  6. "github.com/9seconds/mtg/config"
  7. )
  8. const (
  9. statsdConnectionsAbridgedV4 = "connections.abridged.ipv4"
  10. statsdConnectionsAbridgedV6 = "connections.abridged.ipv6"
  11. statsdConnectionsIntermediateV4 = "connections.intermediate.ipv4"
  12. statsdConnectionsIntermediateV6 = "connections.intermediate.ipv6"
  13. statsdConnectionsSecureV4 = "connections.secure.ipv4"
  14. statsdConnectionsSecureV6 = "connections.secure.ipv6"
  15. statsdTrafficIngress = "traffic.ingress"
  16. statsdTrafficEgress = "traffic.egress"
  17. statsdSpeedIngress = "speed.ingress"
  18. statsdSpeedEgress = "speed.egress"
  19. statsdCrashes = "crashes"
  20. )
  21. const statsdPollTime = time.Second
  22. type statsdExporter struct {
  23. client *statsd.Client
  24. }
  25. func (s *statsdExporter) run() {
  26. for range time.Tick(statsdPollTime) {
  27. instance := GetStats()
  28. s.client.Gauge(statsdConnectionsAbridgedV4, instance.Connections.Abridged.IPv4)
  29. s.client.Gauge(statsdConnectionsAbridgedV6, instance.Connections.Abridged.IPv6)
  30. s.client.Gauge(statsdConnectionsIntermediateV4, instance.Connections.Intermediate.IPv4)
  31. s.client.Gauge(statsdConnectionsIntermediateV6, instance.Connections.Intermediate.IPv6)
  32. s.client.Gauge(statsdConnectionsSecureV4, instance.Connections.Secure.IPv4)
  33. s.client.Gauge(statsdConnectionsSecureV6, instance.Connections.Secure.IPv6)
  34. s.client.Gauge(statsdTrafficIngress, instance.Traffic.ingress)
  35. s.client.Gauge(statsdTrafficEgress, instance.Traffic.egress)
  36. s.client.Gauge(statsdSpeedIngress, instance.Speed.ingress)
  37. s.client.Gauge(statsdSpeedEgress, instance.Speed.egress)
  38. s.client.Gauge(statsdCrashes, instance.Crashes)
  39. }
  40. }
  41. func newStatsd(conf *config.Config) (*statsdExporter, error) {
  42. options := []statsd.Option{
  43. statsd.Network(conf.StatsD.Addr.Network()),
  44. statsd.Address(conf.StatsD.Addr.String()),
  45. statsd.Prefix(conf.StatsD.Prefix),
  46. }
  47. if conf.StatsD.TagsFormat > 0 {
  48. options = append(options, statsd.TagsFormat(conf.StatsD.TagsFormat))
  49. tags := make([]string, len(conf.StatsD.Tags)*2)
  50. for k, v := range conf.StatsD.Tags {
  51. tags = append(tags, k, v)
  52. }
  53. options = append(options, statsd.Tags(tags...))
  54. }
  55. client, err := statsd.New(options...)
  56. if err != nil {
  57. return nil, errors.Annotate(err, "Cannot create statsd client")
  58. }
  59. return &statsdExporter{client: client}, nil
  60. }