Skip to content

Commit

Permalink
WIP exchangeable value types
Browse files Browse the repository at this point in the history
  • Loading branch information
juliusv committed Feb 3, 2017
1 parent 5e16541 commit d3e9ec0
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 16 deletions.
23 changes: 23 additions & 0 deletions example.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
$LOAD_PATH.unshift("./lib")

require 'prometheus/client'

prometheus = Prometheus::Client.registry

counter = Prometheus::Client::Counter.new(:counter, 'Example counter')
gauge = Prometheus::Client::Gauge.new(:gauge, 'Example gauge')
histogram = Prometheus::Client::Histogram.new(:histogram, 'Example histogram', [0, 1, 2])
prometheus.register(counter)
prometheus.register(gauge)
prometheus.register(histogram)

http_requests.increment(2)
gauge.set(3)
histogram.observe(0.5)
histogram.observe(0.5)
histogram.observe(1.5)
histogram.observe(2)

puts "counter", counter.get
puts "gauge", gauge.get
puts "histogram", histogram.get
5 changes: 3 additions & 2 deletions lib/prometheus/client/counter.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# encoding: UTF-8

require 'prometheus/client/metric'
require 'prometheus/client/valuetype'

module Prometheus
module Client
Expand All @@ -14,13 +15,13 @@ def increment(labels = {}, by = 1)
raise ArgumentError, 'increment must be a non-negative number' if by < 0

label_set = label_set_for(labels)
synchronize { @values[label_set] += by }
synchronize { @values[label_set].increment(by) }
end

private

def default
0
Prometheus::Client::ValueType.new(0)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/prometheus/client/gauge.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def type

# Sets the value for the given label set
def set(labels, value)
@values[label_set_for(labels)] = value
@values[label_set_for(labels)].set(value)
end
end
end
Expand Down
18 changes: 10 additions & 8 deletions lib/prometheus/client/histogram.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,22 @@ class Histogram < Metric
class Value < Hash
attr_accessor :sum, :total

def initialize(buckets)
@sum = 0.0
@total = 0
def initialize(name, labelnames, labelvalues, buckets)
@sum = ValueType.new(name, name + '_sum', labelnames, labelvalues)
# TODO: get rid of total and use +Inf bucket instead.
@total = ValueType.new(name, name + '_count', labelnames, labelvalues)

buckets.each do |bucket|
self[bucket] = 0
self[bucket] = ValueType.new(name, name + '_count', labelnames, labelvalues)
end
end

def observe(value)
@sum += value
@total += 1
@sum.increment(value)
@total.increment()

each_key do |bucket|
self[bucket] += 1 if value <= bucket
self[bucket].increment() if value <= bucket
end
end
end
Expand Down Expand Up @@ -62,7 +63,8 @@ def observe(labels, value)
private

def default
Value.new(@buckets)
# TODO: default function needs to know key of hash info (label names and values)
Value.new(@name, @labelnames, @labelvalues, @buckets)
end

def sorted?(bucket)
Expand Down
4 changes: 2 additions & 2 deletions lib/prometheus/client/metric.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def initialize(name, docstring, base_labels = {})
def get(labels = {})
@validator.valid?(labels)

@values[labels]
@values[labels].get
end

# Returns all label sets with their values
Expand All @@ -42,7 +42,7 @@ def values
private

def default
nil
ValueType.new(nil)
end

def validate_name(name)
Expand Down
6 changes: 3 additions & 3 deletions lib/prometheus/client/summary.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ class Value < Hash
attr_accessor :sum, :total

def initialize(estimator)
@sum = estimator.sum
@total = estimator.observations
@sum = ValueType.new(estimator.sum)
@total = ValueType.new(estimator.observations)

estimator.invariants.each do |invariant|
self[invariant.quantile] = estimator.query(invariant.quantile)
self[invariant.quantile] = ValueType.new(estimator.query(invariant.quantile))
end
end
end
Expand Down
25 changes: 25 additions & 0 deletions lib/prometheus/client/valuetype.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# encoding: UTF-8

module Prometheus
module Client
class SimpleValue
def initialize(value)
@value = value
end

def set(value)
@value = value
end

def increment(by = 1)
@value += by
end

def get()
@value
end
end

ValueType = SimpleValue
end
end

0 comments on commit d3e9ec0

Please sign in to comment.