metrics.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package server
  2. import (
  3. log "code.google.com/p/log4go"
  4. "encoding/json"
  5. gometrics "github.com/rcrowley/go-metrics"
  6. "time"
  7. )
  8. var reportInterval = 30 * time.Second
  9. var metrics struct {
  10. windowsCounter gometrics.Counter
  11. linuxCounter gometrics.Counter
  12. osxCounter gometrics.Counter
  13. otherCounter gometrics.Counter
  14. /*
  15. bytesInCount gometrics.Counter
  16. bytesOutCount gometrics.Counter
  17. */
  18. /*
  19. tunnelGauge gometrics.Gauge
  20. tcpTunnelGauge gometrics.Gauge
  21. requestGauge gometrics.Gauge
  22. */
  23. tunnelMeter gometrics.Meter
  24. tcpTunnelMeter gometrics.Meter
  25. requestMeter gometrics.Meter
  26. lostHeartbeatMeter gometrics.Meter
  27. requestTimer gometrics.Timer
  28. }
  29. func init() {
  30. metrics.windowsCounter = gometrics.NewCounter()
  31. metrics.linuxCounter = gometrics.NewCounter()
  32. metrics.osxCounter = gometrics.NewCounter()
  33. metrics.otherCounter = gometrics.NewCounter()
  34. /*
  35. metrics.bytesInCount = gometrics.NewCounter()
  36. metrics.bytesOutCount = gometrics.NewCounter()
  37. */
  38. /*
  39. metrics.tunnelGauge = gometrics.NewGauge()
  40. metrics.tcpTunnelGauge = gometrics.NewGauge()
  41. metrics.requestGauge = gometrics.NewGauge()
  42. */
  43. metrics.tunnelMeter = gometrics.NewMeter()
  44. metrics.tcpTunnelMeter = gometrics.NewMeter()
  45. metrics.requestMeter = gometrics.NewMeter()
  46. metrics.lostHeartbeatMeter = gometrics.NewMeter()
  47. metrics.requestTimer = gometrics.NewTimer()
  48. go func() {
  49. time.Sleep(reportInterval)
  50. log.Info("Server metrics: %s", MetricsJson())
  51. }()
  52. }
  53. func MetricsJson() []byte {
  54. buffer, _ := json.Marshal(map[string]interface{}{
  55. "windows": metrics.windowsCounter.Count(),
  56. "linux": metrics.linuxCounter.Count(),
  57. "osx": metrics.osxCounter.Count(),
  58. "other": metrics.otherCounter.Count(),
  59. "tunnelMeter.count": metrics.tunnelMeter.Count(),
  60. "tunnelMeter.m1": metrics.tunnelMeter.Rate1(),
  61. "requestMeter.count": metrics.requestMeter.Count(),
  62. "requestMeter.m1": metrics.requestMeter.Rate1(),
  63. })
  64. return buffer
  65. }