metrics-example.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package main
  2. import (
  3. "errors"
  4. "github.com/rcrowley/go-metrics"
  5. "log"
  6. "math/rand"
  7. "os"
  8. // "syslog"
  9. "time"
  10. )
  11. const fanout = 10
  12. func main() {
  13. r := metrics.NewRegistry()
  14. c := metrics.NewCounter()
  15. r.Register("foo", c)
  16. for i := 0; i < fanout; i++ {
  17. go func() {
  18. for {
  19. c.Dec(19)
  20. time.Sleep(300e6)
  21. }
  22. }()
  23. go func() {
  24. for {
  25. c.Inc(47)
  26. time.Sleep(400e6)
  27. }
  28. }()
  29. }
  30. g := metrics.NewGauge()
  31. r.Register("bar", g)
  32. for i := 0; i < fanout; i++ {
  33. go func() {
  34. for {
  35. g.Update(19)
  36. time.Sleep(300e6)
  37. }
  38. }()
  39. go func() {
  40. for {
  41. g.Update(47)
  42. time.Sleep(400e6)
  43. }
  44. }()
  45. }
  46. hc := metrics.NewHealthcheck(func(h metrics.Healthcheck) {
  47. if 0 < rand.Intn(2) {
  48. h.Healthy()
  49. } else {
  50. h.Unhealthy(errors.New("baz"))
  51. }
  52. })
  53. r.Register("baz", hc)
  54. s := metrics.NewExpDecaySample(1028, 0.015)
  55. //s := metrics.NewUniformSample(1028)
  56. h := metrics.NewHistogram(s)
  57. r.Register("bang", h)
  58. for i := 0; i < fanout; i++ {
  59. go func() {
  60. for {
  61. h.Update(19)
  62. time.Sleep(300e6)
  63. }
  64. }()
  65. go func() {
  66. for {
  67. h.Update(47)
  68. time.Sleep(400e6)
  69. }
  70. }()
  71. }
  72. m := metrics.NewMeter()
  73. r.Register("quux", m)
  74. for i := 0; i < fanout; i++ {
  75. go func() {
  76. for {
  77. m.Mark(19)
  78. time.Sleep(300e6)
  79. }
  80. }()
  81. go func() {
  82. for {
  83. m.Mark(47)
  84. time.Sleep(400e6)
  85. }
  86. }()
  87. }
  88. t := metrics.NewTimer()
  89. r.Register("hooah", t)
  90. for i := 0; i < fanout; i++ {
  91. go func() {
  92. for {
  93. t.Time(func() { time.Sleep(300e6) })
  94. }
  95. }()
  96. go func() {
  97. for {
  98. t.Time(func() { time.Sleep(400e6) })
  99. }
  100. }()
  101. }
  102. metrics.RegisterDebugGCStats(r)
  103. go metrics.CaptureDebugGCStats(r, 5e9)
  104. metrics.RegisterRuntimeMemStats(r)
  105. go metrics.CaptureRuntimeMemStats(r, 5e9)
  106. metrics.Log(r, 60e9, log.New(os.Stderr, "metrics: ", log.Lmicroseconds))
  107. /*
  108. w, err := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics")
  109. if nil != err { log.Fatalln(err) }
  110. metrics.Syslog(r, 60e9, w)
  111. */
  112. }