metrics-example.go 2.4 KB

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