Class: Pigeon::Metrics::Collector
- Inherits:
-
Object
- Object
- Pigeon::Metrics::Collector
- Defined in:
- lib/pigeon/metrics/collector.rb
Overview
Metrics collector for Pigeon
Instance Method Summary collapse
-
#all_metrics ⇒ Hash
Get all metrics.
-
#format_counters ⇒ Array<Hash>
Format counters for monitoring.
-
#format_gauges ⇒ Array<Hash>
Format gauges for monitoring.
-
#format_histograms ⇒ Array<Hash>
Format histograms for monitoring.
-
#gauge(name, value, tags = {}) ⇒ Numeric
Set a gauge value.
-
#get_counter(name, tags = {}) ⇒ Integer
Get the current value of a counter.
-
#get_gauge(name, tags = {}) ⇒ Numeric?
Get the current value of a gauge.
-
#get_histogram(name, tags = {}) ⇒ Array
Get all recorded values for a histogram.
-
#histogram(name, value, tags = {}) ⇒ Array
Record a histogram value.
-
#increment(name, value = 1, tags = {}) ⇒ Integer
Increment a counter.
-
#initialize(adapter = nil) ⇒ Collector
constructor
Initialize a new metrics collector.
-
#metrics_for_monitoring ⇒ Hash
Get metrics in a format suitable for monitoring systems.
-
#reset ⇒ void
Reset all metrics.
Constructor Details
#initialize(adapter = nil) ⇒ Collector
Initialize a new metrics collector
9 10 11 12 13 14 |
# File 'lib/pigeon/metrics/collector.rb', line 9 def initialize(adapter = nil) @adapter = adapter @counters = {} @gauges = {} @histograms = {} end |
Instance Method Details
#all_metrics ⇒ Hash
Get all metrics
89 90 91 92 93 94 95 |
# File 'lib/pigeon/metrics/collector.rb', line 89 def all_metrics { counters: @counters, gauges: @gauges, histograms: @histograms } end |
#format_counters ⇒ Array<Hash>
Format counters for monitoring
117 118 119 120 121 122 123 124 125 126 |
# File 'lib/pigeon/metrics/collector.rb', line 117 def format_counters @counters.map do |key, value| name, = parse_metric_key(key) { name: name, value: value, tags: } end end |
#format_gauges ⇒ Array<Hash>
Format gauges for monitoring
130 131 132 133 134 135 136 137 138 139 |
# File 'lib/pigeon/metrics/collector.rb', line 130 def format_gauges @gauges.map do |key, value| name, = parse_metric_key(key) { name: name, value: value, tags: } end end |
#format_histograms ⇒ Array<Hash>
Format histograms for monitoring
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/pigeon/metrics/collector.rb', line 143 def format_histograms @histograms.map do |key, values| next if values.empty? name, = parse_metric_key(key) sorted = values.sort { name: name, count: values.size, min: sorted.first, max: sorted.last, mean: values.sum / values.size.to_f, median: sorted[values.size / 2], p95: sorted[(values.size * 0.95).floor], p99: sorted[(values.size * 0.99).floor], tags: } end.compact end |
#gauge(name, value, tags = {}) ⇒ Numeric
Set a gauge value
37 38 39 40 41 42 43 44 45 |
# File 'lib/pigeon/metrics/collector.rb', line 37 def gauge(name, value, = {}) gauge_key = metric_key(name, ) @gauges[gauge_key] = value # If an adapter is provided, delegate to it @adapter&.gauge(name, value, ) if @adapter.respond_to?(:gauge) value end |
#get_counter(name, tags = {}) ⇒ Integer
Get the current value of a counter
67 68 69 |
# File 'lib/pigeon/metrics/collector.rb', line 67 def get_counter(name, = {}) @counters[metric_key(name, )] || 0 end |
#get_gauge(name, tags = {}) ⇒ Numeric?
Get the current value of a gauge
75 76 77 |
# File 'lib/pigeon/metrics/collector.rb', line 75 def get_gauge(name, = {}) @gauges[metric_key(name, )] end |
#get_histogram(name, tags = {}) ⇒ Array
Get all recorded values for a histogram
83 84 85 |
# File 'lib/pigeon/metrics/collector.rb', line 83 def get_histogram(name, = {}) @histograms[metric_key(name, )] || [] end |
#histogram(name, value, tags = {}) ⇒ Array
Record a histogram value
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/pigeon/metrics/collector.rb', line 52 def histogram(name, value, = {}) histogram_key = metric_key(name, ) @histograms[histogram_key] ||= [] @histograms[histogram_key] << value # If an adapter is provided, delegate to it @adapter&.histogram(name, value, ) if @adapter.respond_to?(:histogram) @histograms[histogram_key] end |
#increment(name, value = 1, tags = {}) ⇒ Integer
Increment a counter
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/pigeon/metrics/collector.rb', line 21 def increment(name, value = 1, = {}) counter_key = metric_key(name, ) @counters[counter_key] ||= 0 @counters[counter_key] += value # If an adapter is provided, delegate to it @adapter&.increment(name, value, ) if @adapter.respond_to?(:increment) @counters[counter_key] end |
#metrics_for_monitoring ⇒ Hash
Get metrics in a format suitable for monitoring systems
107 108 109 110 111 112 113 |
# File 'lib/pigeon/metrics/collector.rb', line 107 def metrics_for_monitoring { counters: format_counters, gauges: format_gauges, histograms: format_histograms } end |
#reset ⇒ void
This method returns an undefined value.
Reset all metrics
99 100 101 102 103 |
# File 'lib/pigeon/metrics/collector.rb', line 99 def reset @counters = {} @gauges = {} @histograms = {} end |