Class: Whoosh::Metrics
- Inherits:
-
Object
- Object
- Whoosh::Metrics
- Defined in:
- lib/whoosh/metrics.rb
Instance Method Summary collapse
- #gauge(name, value, labels: {}) ⇒ Object
- #increment(name, labels: {}, by: 1) ⇒ Object
-
#initialize ⇒ Metrics
constructor
A new instance of Metrics.
- #observe(name, value, labels: {}) ⇒ Object
- #to_prometheus ⇒ Object
Constructor Details
#initialize ⇒ Metrics
Returns a new instance of Metrics.
6 7 8 9 10 11 |
# File 'lib/whoosh/metrics.rb', line 6 def initialize @counters = {} @gauges = {} @summaries = {} @mutex = Mutex.new end |
Instance Method Details
#gauge(name, value, labels: {}) ⇒ Object
18 19 20 21 |
# File 'lib/whoosh/metrics.rb', line 18 def gauge(name, value, labels: {}) key = metric_key(name, labels) @mutex.synchronize { @gauges[key] = value } end |
#increment(name, labels: {}, by: 1) ⇒ Object
13 14 15 16 |
# File 'lib/whoosh/metrics.rb', line 13 def increment(name, labels: {}, by: 1) key = metric_key(name, labels) @mutex.synchronize { @counters[key] = (@counters[key] || 0) + by } end |
#observe(name, value, labels: {}) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/whoosh/metrics.rb', line 23 def observe(name, value, labels: {}) key = metric_key(name, labels) @mutex.synchronize do @summaries[key] ||= { sum: 0.0, count: 0 } @summaries[key][:sum] += value @summaries[key][:count] += 1 end end |
#to_prometheus ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/whoosh/metrics.rb', line 32 def to_prometheus lines = [] @mutex.synchronize do @counters.each do |key, value| name, labels = parse_key(key) lines << "# TYPE #{name} counter" unless lines.any? { |l| l.include?("TYPE #{name}") } lines << "#{name}#{format_labels(labels)} #{value}" end @gauges.each do |key, value| name, labels = parse_key(key) lines << "# TYPE #{name} gauge" unless lines.any? { |l| l.include?("TYPE #{name}") } lines << "#{name}#{format_labels(labels)} #{value}" end @summaries.each do |key, data| name, labels = parse_key(key) unless lines.any? { |l| l.include?("TYPE #{name}") } lines << "# TYPE #{name} summary" end lines << "#{name}_sum#{format_labels(labels)} #{data[:sum]}" lines << "#{name}_count#{format_labels(labels)} #{data[:count]}" end end lines.join("\n") + "\n" end |