prometheus-client-mmap 0.7.0.beta2 → 0.7.0.beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82b0822293d2669014f8790678dc824da3281383
4
- data.tar.gz: 7b9d4e382530810a0db3ea9074afd23cd806d0d2
3
+ metadata.gz: cbf674d68c795209cafac2fd8084b48243ce83bf
4
+ data.tar.gz: 57ce2be5c369876f6f0783cbb33b5a0b8f6f1ebd
5
5
  SHA512:
6
- metadata.gz: e100f0a72eadec532716e375bca0c7899484cb62f7fca463730e7cdcdf09fb90517de079642e66dbceef8b0e1013d845b165a5c5a9a0d5f91897ee81ac78f8e5
7
- data.tar.gz: 36379031c3797f6a88e2a2376e4341de1f0dbc057322c25b8881ec4679117bcd5b56a7aef010ea18e727d7e1fb42d04f43b946c77af543f25615397d8e33c08d
6
+ metadata.gz: 41b21a3ccbcf1ba6b7e96d9c3d83f66e214f4818f06a6ba4b7ffebb057a81a6204156e37e0aac45607e593c41fe87d30564fce30362877c54241f916ad4f7a0c
7
+ data.tar.gz: dfe1456e7b4d279a981efb28080e4616e473700a5fc5e44f4bc51325bc580785b196cc1bfb89ea66e1142c2d7eadd08f57a263cbbdeefc2662e82f5d85e89373
@@ -85,38 +85,13 @@ module Prometheus
85
85
  else # all/liveall
86
86
  samples[[name, labels]] = value
87
87
  end
88
- when :histogram
89
- bucket = labels.select{|l| l[0] == 'le' }.map {|k, v| v.to_f}.first
90
- if bucket
91
- without_le = labels.select{ |l| l[0] != 'le' }
92
- b = buckets.fetch(without_le, {})
93
- v = b.fetch(bucket, 0.0) + value
94
- if !buckets.has_key?(without_le)
95
- buckets[without_le] = {}
96
- end
97
- buckets[without_le][bucket] = v
98
- else
99
- s = samples.fetch([name, labels], 0.0)
100
- samples[[name, labels]] = s + value
101
- end
102
88
  else
103
- # Counter and Summary.
89
+ # Counter, Histogram and Summary.
90
+ without_pid = labels.select{ |l| l[0] != 'pid' }
104
91
  s = samples.fetch([name, without_pid], 0.0)
105
92
  samples[[name, without_pid]] = s + value
106
93
  end
107
94
 
108
- if metric[:type] == :histogram
109
- buckets.each do |labels, values|
110
- acc = 0.0
111
- values.sort.each do |bucket, value|
112
- acc += value
113
- # TODO: handle Infinity
114
- samples[[metric[:metric_name] + '_bucket', labels + [['le', bucket.to_s]]]] = acc
115
- end
116
- samples[[metric[:metric_name] + '_count', labels]] = acc
117
- end
118
- end
119
-
120
95
  metric[:samples] = samples.map do |name_labels, value|
121
96
  name, labels = name_labels
122
97
  [name, labels.to_h, value]
@@ -13,13 +13,12 @@ module Prometheus
13
13
  attr_accessor :sum, :total
14
14
 
15
15
  def initialize(type, name, labels, buckets)
16
- @sum = ValueClass.new(type, name, name.to_s + '_sum', labels)
16
+ @sum = ValueClass.new(type, name, "#{name}_sum", labels)
17
17
  # TODO: get rid of total and use +Inf bucket instead.
18
- @total = ValueClass.new(type, name, name.to_s + '_count', labels)
18
+ @total = ValueClass.new(type, name, "#{name}_count", labels)
19
19
 
20
20
  buckets.each do |bucket|
21
- # TODO: check that there are no user-defined "le" labels.
22
- self[bucket] = ValueClass.new(type, name, name.to_s + '_bucket', labels.merge({'le' => bucket.to_s}))
21
+ self[bucket] = ValueClass.new(type, name, "#{name}_bucket", labels.merge({:le => bucket.to_s}))
23
22
  end
24
23
  end
25
24
 
@@ -61,10 +60,6 @@ module Prometheus
61
60
  end
62
61
 
63
62
  def observe(labels, value)
64
- if labels[:le]
65
- raise ArgumentError, 'Label with name "le" is not permitted'
66
- end
67
-
68
63
  label_set = label_set_for(labels)
69
64
  synchronize { @values[label_set].observe(value) }
70
65
  end
@@ -13,7 +13,8 @@ module Prometheus
13
13
  class InvalidLabelError < LabelSetError; end
14
14
  class ReservedLabelError < LabelSetError; end
15
15
 
16
- def initialize
16
+ def initialize(reserved_labels = [])
17
+ @reserved_labels = (reserved_labels + RESERVED_LABELS).freeze
17
18
  @validated = {}
18
19
  end
19
20
 
@@ -60,7 +61,7 @@ module Prometheus
60
61
  end
61
62
 
62
63
  def validate_reserved_key(key)
63
- return true unless RESERVED_LABELS.include?(key)
64
+ return true unless @reserved_labels.include?(key)
64
65
 
65
66
  raise ReservedLabelError, "#{key} is reserved"
66
67
  end
@@ -12,7 +12,14 @@ module Prometheus
12
12
 
13
13
  def initialize(name, docstring, base_labels = {})
14
14
  @mutex = Mutex.new
15
- @validator = LabelSetValidator.new
15
+ case type
16
+ when :summary
17
+ @validator = LabelSetValidator.new(['quantile'])
18
+ when :histogram
19
+ @validator = LabelSetValidator.new(['le'])
20
+ else
21
+ @validator = LabelSetValidator.new
22
+ end
16
23
  @values = Hash.new { |hash, key| hash[key] = default(key) }
17
24
 
18
25
  validate_name(name)
@@ -41,6 +41,10 @@ module Prometheus
41
41
  )
42
42
  @durations = @registry.summary(
43
43
  :http_request_duration_seconds,
44
+ 'A summary of the response latency.',
45
+ )
46
+ @durations_hist = @registry.histogram(
47
+ :http_req_duration_seconds,
44
48
  'A histogram of the response latency.',
45
49
  )
46
50
  end
@@ -72,8 +76,10 @@ module Prometheus
72
76
  def record(labels, duration)
73
77
  @requests.increment(labels)
74
78
  @durations.observe(labels, duration)
75
- rescue
76
- # TODO: log unexpected exception during request recording
79
+ @durations_hist.observe(labels, duration)
80
+ rescue => exception
81
+ @exceptions.increment(exception: exception.class.name)
82
+ raise
77
83
  nil
78
84
  end
79
85
  end
@@ -14,17 +14,30 @@ module Prometheus
14
14
  class Value < Hash
15
15
  attr_accessor :sum, :total
16
16
 
17
- def initialize(name, labels, estimator)
18
- @sum = ValueClass.new(name, name + '_sum', labels, estimator.sum)
19
- @total = ValueClass.new(name, name + '_count', labels, estimator.observations)
17
+ def initialize(type, name, labels)
18
+ @sum = ValueClass.new(type, name, "#{name}_sum", labels)
19
+ @total = ValueClass.new(type, name, "#{name}_count", labels)
20
+ @estimator = Quantile::Estimator.new
21
+ @estimator.invariants.each do |invariant|
22
+ self[invariant.quantile] = ValueClass.new(type, name, "#{name}_summary", labels.merge({:quantile => invariant.quantile}))
23
+ end
24
+ end
20
25
 
21
- estimator.invariants.each do |invariant|
22
- self[invariant.quantile] = ValueClass.new(type, name, labels, estimator.query(invariant.quantile), nil)
26
+ def observe(value)
27
+ @sum.increment(value)
28
+ @total.increment()
29
+ # TODO: The quantile info is innaccurate as it only contains
30
+ # observations per-process. What needs to happen is for
31
+ # observations to be read into the estimator and then reported.
32
+ # Alternatively it could be done in the exporter.
33
+ @estimator.observe(value)
34
+ @estimator.invariants.each do |invariant|
35
+ self[invariant.quantile].set(@estimator.query(invariant.quantile))
23
36
  end
24
37
  end
25
38
  end
26
39
 
27
- def initialize(name, docstring, base_labels = {}, multiprocess_mode)
40
+ def initialize(name, docstring, base_labels = {})
28
41
  super(name, docstring, base_labels)
29
42
  end
30
43
 
@@ -45,7 +58,7 @@ module Prometheus
45
58
  @validator.valid?(labels)
46
59
 
47
60
  synchronize do
48
- Value.new(@values[labels])
61
+ Value.new(@values[labels].sum)
49
62
  end
50
63
  end
51
64
 
@@ -53,7 +66,7 @@ module Prometheus
53
66
  def values
54
67
  synchronize do
55
68
  @values.each_with_object({}) do |(labels, value), memo|
56
- memo[labels] = value
69
+ memo[labels] = value.sum
57
70
  end
58
71
  end
59
72
  end
@@ -61,7 +74,7 @@ module Prometheus
61
74
  private
62
75
 
63
76
  def default(labels)
64
- Value.new(type, @name, labels, Quantile::Estimator.new)
77
+ Value.new(type, @name, labels)
65
78
  end
66
79
  end
67
80
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Prometheus
4
4
  module Client
5
- VERSION = '0.7.0.beta2'
5
+ VERSION = '0.7.0.beta3'
6
6
  end
7
7
  end
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+
3
+ module Prometheus
4
+ module Client
5
+ <<<<<<< HEAD
6
+ VERSION = '0.7.0.beta3'
7
+ =======
8
+ VERSION = '0.7.0.beta2'
9
+ >>>>>>> prometheus-client-mmap
10
+ end
11
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-client-mmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0.beta2
4
+ version: 0.7.0.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Schmidt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-09 00:00:00.000000000 Z
11
+ date: 2017-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: quantile
@@ -47,6 +47,7 @@ files:
47
47
  - lib/prometheus/client/summary.rb
48
48
  - lib/prometheus/client/valuetype.rb
49
49
  - lib/prometheus/client/version.rb
50
+ - lib/prometheus/client/version.rb.orig
50
51
  homepage: https://github.com/pchojnacki/client_ruby
51
52
  licenses:
52
53
  - Apache 2.0