registry.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package metrics
  2. type Registry interface{
  3. Counters() map[string]Counter
  4. Gauges() map[string]Gauge
  5. Healthchecks() map[string]Healthcheck
  6. Histograms() map[string]Histogram
  7. Meters() map[string]Meter
  8. Timers() map[string]Timer
  9. RunHealthchecks()
  10. GetCounter(string) (Counter, bool)
  11. GetGauge(string) (Gauge, bool)
  12. GetHealthcheck(string) (Healthcheck, bool)
  13. GetHistogram(string) (Histogram, bool)
  14. GetMeter(string) (Meter, bool)
  15. GetTimer(string) (Timer, bool)
  16. RegisterCounter(string, Counter)
  17. RegisterGauge(string, Gauge)
  18. RegisterHealthcheck(string, Healthcheck)
  19. RegisterHistogram(string, Histogram)
  20. RegisterMeter(string, Meter)
  21. RegisterTimer(string, Timer)
  22. UnregisterCounter(string)
  23. UnregisterGauge(string)
  24. UnregisterHealthcheck(string)
  25. UnregisterHistogram(string)
  26. UnregisterMeter(string)
  27. UnregisterTimer(string)
  28. }
  29. type registry struct {
  30. counters map[string]Counter
  31. gauges map[string]Gauge
  32. healthchecks map[string]Healthcheck
  33. histograms map[string]Histogram
  34. meters map[string]Meter
  35. timers map[string]Timer
  36. }
  37. func NewRegistry() Registry {
  38. return &registry {
  39. make(map[string]Counter),
  40. make(map[string]Gauge),
  41. make(map[string]Healthcheck),
  42. make(map[string]Histogram),
  43. make(map[string]Meter),
  44. make(map[string]Timer),
  45. }
  46. }
  47. func (r *registry) Counters() map[string]Counter {
  48. return r.counters
  49. }
  50. func (r *registry) Gauges() map[string]Gauge {
  51. return r.gauges
  52. }
  53. func (r *registry) Healthchecks() map[string]Healthcheck {
  54. return r.healthchecks
  55. }
  56. func (r *registry) Histograms() map[string]Histogram {
  57. return r.histograms
  58. }
  59. func (r *registry) Meters() map[string]Meter {
  60. return r.meters
  61. }
  62. func (r *registry) Timers() map[string]Timer {
  63. return r.timers
  64. }
  65. func (r *registry) RunHealthchecks() {
  66. for _, h := range r.healthchecks { h.Check() }
  67. }
  68. func (r *registry) GetCounter(name string) (Counter, bool) {
  69. c, ok := r.counters[name]
  70. return c, ok
  71. }
  72. func (r *registry) GetGauge(name string) (Gauge, bool) {
  73. g, ok := r.gauges[name]
  74. return g, ok
  75. }
  76. func (r *registry) GetHealthcheck(name string) (Healthcheck, bool) {
  77. h, ok := r.healthchecks[name]
  78. return h, ok
  79. }
  80. func (r *registry) GetHistogram(name string) (Histogram, bool) {
  81. h, ok := r.histograms[name]
  82. return h, ok
  83. }
  84. func (r *registry) GetMeter(name string) (Meter, bool) {
  85. m, ok := r.meters[name]
  86. return m, ok
  87. }
  88. func (r *registry) GetTimer(name string) (Timer, bool) {
  89. t, ok := r.timers[name]
  90. return t, ok
  91. }
  92. func (r *registry) RegisterCounter(name string, c Counter) {
  93. r.counters[name] = c
  94. }
  95. func (r *registry) RegisterGauge(name string, g Gauge) {
  96. r.gauges[name] = g
  97. }
  98. func (r *registry) RegisterHealthcheck(name string, h Healthcheck) {
  99. r.healthchecks[name] = h
  100. }
  101. func (r *registry) RegisterHistogram(name string, h Histogram) {
  102. r.histograms[name] = h
  103. }
  104. func (r *registry) RegisterMeter(name string, m Meter) {
  105. r.meters[name] = m
  106. }
  107. func (r *registry) RegisterTimer(name string, t Timer) {
  108. r.timers[name] = t
  109. }
  110. func (r *registry) UnregisterCounter(name string) {
  111. r.counters[name] = nil, false
  112. }
  113. func (r *registry) UnregisterGauge(name string) {
  114. r.gauges[name] = nil, false
  115. }
  116. func (r *registry) UnregisterHealthcheck(name string) {
  117. r.healthchecks[name] = nil, false
  118. }
  119. func (r *registry) UnregisterHistogram(name string) {
  120. r.histograms[name] = nil, false
  121. }
  122. func (r *registry) UnregisterMeter(name string) {
  123. r.meters[name] = nil, false
  124. }
  125. func (r *registry) UnregisterTimer(name string) {
  126. r.timers[name] = nil, false
  127. }