syslog.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package metrics
  2. import (
  3. "fmt"
  4. "syslog"
  5. "time"
  6. )
  7. func Syslog(r Registry, interval int, w *syslog.Writer) {
  8. for {
  9. for name, c := range r.Counters() {
  10. w.Info(fmt.Sprintf("counter %s: count: %d", name, c.Count()))
  11. }
  12. for name, g := range r.Gauges() {
  13. w.Info(fmt.Sprintf("gauge %s: value: %d", name, g.Value()))
  14. }
  15. r.RunHealthchecks()
  16. for name, h := range r.Healthchecks() {
  17. w.Info(fmt.Sprintf("healthcheck %s: error: %v", name, h.Error()))
  18. }
  19. for name, h := range r.Histograms() {
  20. ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  21. w.Info(fmt.Sprintf(
  22. "histogram %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f",
  23. name,
  24. h.Count(),
  25. h.Min(),
  26. h.Max(),
  27. h.Mean(),
  28. h.StdDev(),
  29. ps[0],
  30. ps[1],
  31. ps[2],
  32. ps[3],
  33. ps[4],
  34. ))
  35. }
  36. for name, m := range r.Meters() {
  37. w.Info(fmt.Sprintf(
  38. "meter %s: count: %d 1-min: %.2f 5-min: %.2f 15-min: %.2f mean: %.2f",
  39. name,
  40. m.Count(),
  41. m.Rate1(),
  42. m.Rate5(),
  43. m.Rate15(),
  44. m.RateMean(),
  45. ))
  46. }
  47. for name, t := range r.Timers() {
  48. ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  49. w.Info(fmt.Sprintf(
  50. "timer %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f 1-min: %.2f 5-min: %.2f 15-min: %.2f mean: %.2f",
  51. name,
  52. t.Count(),
  53. t.Min(),
  54. t.Max(),
  55. t.Mean(),
  56. t.StdDev(),
  57. ps[0],
  58. ps[1],
  59. ps[2],
  60. ps[3],
  61. ps[4],
  62. t.Rate1(),
  63. t.Rate5(),
  64. t.Rate15(),
  65. t.RateMean(),
  66. ))
  67. }
  68. time.Sleep(int64(1e9) * int64(interval))
  69. }
  70. }