metrics-example.go 1.8 KB

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