metriks 0.9.9.4 → 0.9.9.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -56,6 +56,45 @@ Return the current value of the counter.
56
56
  puts "counter: #{counter.count}"
57
57
  ```
58
58
 
59
+ ## Gauges
60
+
61
+ A gauge is an instantaneous measurement of a value.
62
+
63
+ It takes a callback to measure the value in form of a block or a callable
64
+ object.
65
+
66
+ **WARNING:** The code in the callback is executed every time the `#value`
67
+ method is called on the gauge. Most of the time this will be done by a
68
+ metriks reporter that is running in a separate thread.
69
+
70
+ ``` ruby
71
+ # Callback as block
72
+ gauge = Metriks.gauge('queue.size') { queue.size }
73
+
74
+ # Callback as object responding to #call
75
+ callable = proc { queue.size }
76
+ gauge = Metriks.gauge('queue.size', callable)
77
+ ```
78
+
79
+ ### set(val)
80
+
81
+ Set the current value.
82
+
83
+ ``` ruby
84
+ gauge = Metriks.gauge('queue_size')
85
+ gauge.set(queue.size)
86
+ ```
87
+
88
+ ### value()
89
+
90
+ Returns the value returned by the callback (if one is defined), returns the
91
+ value set via `#set` (or the default of 0) otherwise.
92
+
93
+ ``` ruby
94
+ gauge = Metriks.gauge('queue_size')
95
+ puts "queue size: #{gauge.value}"
96
+ ```
97
+
59
98
  ## Meters
60
99
 
61
100
  A meter that measures the mean throughput and the one-, five-, and
@@ -334,6 +373,10 @@ will display:
334
373
  501 17015 26.0 1.9 416976 246956 ? Ss 18:54 11:43 thin reqs: 273.3/sec
335
374
  ```
336
375
 
376
+ ## Sematext Metrics Reporter
377
+
378
+ [metriks-sematext](https://github.com/sematext/metriks-sematext) gem provides reporter for sending metrics to [SPM](http://sematext.com/spm/index.html).
379
+
337
380
  # Application Server Configuration
338
381
 
339
382
  Depending on how your application server operates, you may need to configure how reporters are created. Please look at [Troubleshooting](https://github.com/eric/metriks/wiki/Troubleshooting) for more information.
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Metriks
3
- VERSION = '0.9.9.4'
3
+ VERSION = '0.9.9.5'
4
4
 
5
5
  def self.get(name)
6
6
  Metriks::Registry.default.get(name)
@@ -10,6 +10,10 @@ module Metriks
10
10
  Metriks::Registry.default.counter(name)
11
11
  end
12
12
 
13
+ def self.gauge(name, callable = nil, &block)
14
+ Metriks::Registry.default.gauge(name, callable, &block)
15
+ end
16
+
13
17
  def self.timer(name)
14
18
  Metriks::Registry.default.timer(name)
15
19
  end
@@ -0,0 +1,27 @@
1
+ require 'atomic'
2
+
3
+ module Metriks
4
+ class Gauge
5
+ # Public: Initialize a new Gauge.
6
+ def initialize(callable = nil, &block)
7
+ @gauge = Atomic.new(nil)
8
+ @callback = callable || block
9
+ end
10
+
11
+ # Public: Set a new value.
12
+ #
13
+ # val - The new value.
14
+ #
15
+ # Returns nothing.
16
+ def set(val)
17
+ @gauge.value = val
18
+ end
19
+
20
+ # Public: The current value.
21
+ #
22
+ # Returns the gauge value.
23
+ def value
24
+ @callback ? @callback.call : @gauge.value
25
+ end
26
+ end
27
+ end
@@ -2,6 +2,7 @@ require 'metriks/counter'
2
2
  require 'metriks/timer'
3
3
  require 'metriks/utilization_timer'
4
4
  require 'metriks/meter'
5
+ require 'metriks/gauge'
5
6
 
6
7
  module Metriks
7
8
  # Public: A collection of metrics
@@ -67,11 +68,26 @@ module Metriks
67
68
  #
68
69
  # registry.counter('method.calls')
69
70
  #
70
- # Returns the Metricks::Counter identified by the name.
71
+ # Returns the Metriks::Counter identified by the name.
71
72
  def counter(name)
72
73
  add_or_get(name, Metriks::Counter)
73
74
  end
74
75
 
76
+ # Public: Fetch or create a new gauge metric.
77
+ #
78
+ # name - The String name of the metric to define or fetch
79
+ #
80
+ # Examples
81
+ #
82
+ # registry.gauge('disk_space.used') { 1 }
83
+ #
84
+ # Returns the Metriks::Gauge identified by the name.
85
+ def gauge(name, callable = nil, &block)
86
+ add_or_get(name, Metriks::Gauge) do
87
+ Metriks::Gauge.new(callable, &block)
88
+ end
89
+ end
90
+
75
91
  # Public: Fetch or create a new meter metric. Meters are a counter that
76
92
  # tracks throughput along with the count.
77
93
  #
@@ -81,7 +97,7 @@ module Metriks
81
97
  #
82
98
  # registry.meter('resque.calls')
83
99
  #
84
- # Returns the Metricks::Meter identified by the name.
100
+ # Returns the Metriks::Meter identified by the name.
85
101
  def meter(name)
86
102
  add_or_get(name, Metriks::Meter)
87
103
  end
@@ -96,7 +112,7 @@ module Metriks
96
112
  #
97
113
  # registry.timer('resque.worker')
98
114
  #
99
- # Returns the Metricks::Timer identified by the name.
115
+ # Returns the Metriks::Timer identified by the name.
100
116
  def timer(name)
101
117
  add_or_get(name, Metriks::Timer)
102
118
  end
@@ -115,7 +131,7 @@ module Metriks
115
131
  #
116
132
  # registry.utilization_timer('rack.utilization')
117
133
  #
118
- # Returns the Metricks::UtilizationTimer identified by the name.
134
+ # Returns the Metriks::UtilizationTimer identified by the name.
119
135
  def utilization_timer(name)
120
136
  add_or_get(name, Metriks::UtilizationTimer)
121
137
  end
@@ -130,7 +146,7 @@ module Metriks
130
146
  #
131
147
  # registry.histogram('backlog.wait')
132
148
  #
133
- # Returns the Metricks::Histogram identified by the name.
149
+ # Returns the Metriks::Histogram identified by the name.
134
150
  def histogram(name)
135
151
  add_or_get(name, Metriks::Histogram) do
136
152
  Metriks::Histogram.new_exponentially_decaying
@@ -188,4 +204,4 @@ module Metriks
188
204
  end
189
205
  end
190
206
  end
191
- end
207
+ end
@@ -58,6 +58,10 @@ module Metriks::Reporter
58
58
  write_metric name, metric, [
59
59
  :count
60
60
  ]
61
+ when Metriks::Gauge
62
+ write_metric name, metric, [
63
+ :value
64
+ ]
61
65
  when Metriks::UtilizationTimer
62
66
  write_metric name, metric, [
63
67
  :count, :one_minute_rate, :five_minute_rate,
@@ -56,6 +56,10 @@ module Metriks::Reporter
56
56
  prepare_metric name, metric, [
57
57
  :count
58
58
  ]
59
+ when Metriks::Gauge
60
+ prepare_metric name, metric, [
61
+ :value
62
+ ]
59
63
  when Metriks::UtilizationTimer
60
64
  prepare_metric name, metric, [
61
65
  :count, :one_minute_rate, :five_minute_rate,
@@ -59,6 +59,10 @@ module Metriks::Reporter
59
59
  log_metric name, 'counter', metric, [
60
60
  :count
61
61
  ]
62
+ when Metriks::Gauge
63
+ log_metric name, 'gauge', metric, [
64
+ :value
65
+ ]
62
66
  when Metriks::UtilizationTimer
63
67
  log_metric name, 'utilization_timer', metric, [
64
68
  :count, :one_minute_rate, :five_minute_rate,
@@ -8,7 +8,7 @@ module Metriks::Reporter
8
8
  :host => options[:host],
9
9
  :port => options[:port]
10
10
  )
11
- @registry = options[:registry] || Metrics::Registry.default
11
+ @registry = options[:registry] || Metriks::Registry.default
12
12
  @interval = options[:interval] || 60
13
13
  @on_error = options[:on_error] || proc { |ex| }
14
14
 
@@ -63,6 +63,10 @@ module Metriks::Reporter
63
63
  send_metric name, 'counter', metric, [
64
64
  :count
65
65
  ]
66
+ when Metriks::Gauge
67
+ send_metric name, 'gauge', metric, [
68
+ :value
69
+ ]
66
70
  when Metriks::UtilizationTimer
67
71
  send_metric name, 'utilization_timer', metric, [
68
72
  :count, :one_minute_rate, :five_minute_rate,
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'metriks'
16
- s.version = '0.9.9.4'
17
- s.date = '2013-02-22'
16
+ s.version = '0.9.9.5'
17
+ s.date = '2013-07-05'
18
18
 
19
19
  ## Make sure your summary is short. The description may be as long
20
20
  ## as you like.
@@ -62,6 +62,7 @@ Gem::Specification.new do |s|
62
62
  lib/metriks/counter.rb
63
63
  lib/metriks/ewma.rb
64
64
  lib/metriks/exponentially_decaying_sample.rb
65
+ lib/metriks/gauge.rb
65
66
  lib/metriks/histogram.rb
66
67
  lib/metriks/meter.rb
67
68
  lib/metriks/registry.rb
@@ -78,6 +79,7 @@ Gem::Specification.new do |s|
78
79
  lib/metriks/utilization_timer.rb
79
80
  metriks.gemspec
80
81
  test/counter_test.rb
82
+ test/gauge_test.rb
81
83
  test/graphite_reporter_test.rb
82
84
  test/histogram_test.rb
83
85
  test/librato_metrics_reporter_test.rb
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ require 'metriks/gauge'
4
+
5
+ class GaugeTest < Test::Unit::TestCase
6
+ def test_gauge
7
+ gauge = Metriks::Gauge.new
8
+
9
+ 3.times do |i|
10
+ gauge.set(i + 1)
11
+ end
12
+
13
+ assert_equal 3, gauge.value
14
+
15
+ gauge.set(1)
16
+
17
+ assert_equal 1, gauge.value
18
+ end
19
+
20
+ def test_gauge_default
21
+ gauge = Metriks::Gauge.new
22
+ assert_equal nil, gauge.value
23
+ end
24
+
25
+ def test_gauge_callback_via_block
26
+ gauge = Metriks::Gauge.new { 56 }
27
+
28
+ assert_equal 56, gauge.value
29
+ end
30
+
31
+ def test_gauge_callback_via_callable_object
32
+ callable = Class.new(Struct.new(:value)) {
33
+ def call
34
+ value
35
+ end
36
+ }
37
+
38
+ gauge = Metriks::Gauge.new(callable.new(987))
39
+
40
+ assert_equal 987, gauge.value
41
+
42
+ gauge = Metriks::Gauge.new(proc { 123 })
43
+
44
+ assert_equal 123, gauge.value
45
+ end
46
+ end
@@ -29,9 +29,13 @@ class GraphiteReporterTest < Test::Unit::TestCase
29
29
  @registry.timer('timer.testing').update(1.5)
30
30
  @registry.histogram('histogram.testing').update(1.5)
31
31
  @registry.utilization_timer('utilization_timer.testing').update(1.5)
32
+ @registry.gauge('gauge.testing').set(123)
33
+ @registry.gauge('gauge.testing.block') { 456 }
32
34
 
33
35
  @reporter.write
34
36
 
35
37
  assert_match /timer.testing.median \d/, @stringio.string
38
+ assert_match /gauge.testing.value 123/, @stringio.string
39
+ assert_match /gauge.testing.block.value 456/, @stringio.string
36
40
  end
37
- end
41
+ end
@@ -26,9 +26,10 @@ class LibratoMetricsReporterTest < Test::Unit::TestCase
26
26
  @registry.timer('timer.testing').update(1.5)
27
27
  @registry.histogram('histogram.testing').update(1.5)
28
28
  @registry.utilization_timer('utilization_timer.testing').update(1.5)
29
+ @registry.gauge('gauge.testing') { 123 }
29
30
 
30
31
  @reporter.expects(:submit)
31
32
 
32
33
  @reporter.write
33
34
  end
34
- end
35
+ end
@@ -23,6 +23,7 @@ class LoggerReporterTest < Test::Unit::TestCase
23
23
  @registry.timer('timer.testing').update(1.5)
24
24
  @registry.histogram('histogram.testing').update(1.5)
25
25
  @registry.utilization_timer('utilization_timer.testing').update(1.5)
26
+ @registry.gauge('gauge.testing').set(123)
26
27
  end
27
28
 
28
29
  def teardown
@@ -35,6 +36,7 @@ class LoggerReporterTest < Test::Unit::TestCase
35
36
 
36
37
  assert_match /time=\d/, @stringio.string
37
38
  assert_match /median=\d/, @stringio.string
39
+ assert_match /value=123/, @stringio.string
38
40
  end
39
41
 
40
42
  def test_flush
@@ -42,5 +44,6 @@ class LoggerReporterTest < Test::Unit::TestCase
42
44
 
43
45
  assert_match /time=\d/, @stringio.string
44
46
  assert_match /median=\d/, @stringio.string
47
+ assert_match /value=123/, @stringio.string
45
48
  end
46
- end
49
+ end
@@ -36,6 +36,7 @@ class RiemannReporterTest < Test::Unit::TestCase
36
36
  @registry.timer('timer.testing').update(1.5)
37
37
  @registry.histogram('histogram.testing').update(1.5)
38
38
  @registry.utilization_timer('utilization_timer.testing').update(1.5)
39
+ @registry.gauge('gauge.testing') { 123 }
39
40
 
40
41
  @reporter.client.expects(:<<).at_least_once
41
42
  @reporter.client.expects(:<<).with(
@@ -74,6 +75,14 @@ class RiemannReporterTest < Test::Unit::TestCase
74
75
  :ttl => 90
75
76
  )
76
77
 
78
+ @reporter.client.expects(:<<).with(
79
+ :host => "h",
80
+ :service => "gauge.testing value",
81
+ :metric => 123,
82
+ :tags => ["gauge"],
83
+ :ttl => 90
84
+ )
85
+
77
86
  @reporter.write
78
87
  end
79
88
  end
metadata CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
6
6
  - 0
7
7
  - 9
8
8
  - 9
9
- - 4
10
- version: 0.9.9.4
9
+ - 5
10
+ version: 0.9.9.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Eric Lindvall
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-02-22 00:00:00 -08:00
18
+ date: 2013-07-05 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -90,6 +90,7 @@ files:
90
90
  - lib/metriks/counter.rb
91
91
  - lib/metriks/ewma.rb
92
92
  - lib/metriks/exponentially_decaying_sample.rb
93
+ - lib/metriks/gauge.rb
93
94
  - lib/metriks/histogram.rb
94
95
  - lib/metriks/meter.rb
95
96
  - lib/metriks/registry.rb
@@ -106,6 +107,7 @@ files:
106
107
  - lib/metriks/utilization_timer.rb
107
108
  - metriks.gemspec
108
109
  - test/counter_test.rb
110
+ - test/gauge_test.rb
109
111
  - test/graphite_reporter_test.rb
110
112
  - test/histogram_test.rb
111
113
  - test/librato_metrics_reporter_test.rb
@@ -151,6 +153,7 @@ specification_version: 2
151
153
  summary: An experimental metrics client
152
154
  test_files:
153
155
  - test/counter_test.rb
156
+ - test/gauge_test.rb
154
157
  - test/graphite_reporter_test.rb
155
158
  - test/histogram_test.rb
156
159
  - test/librato_metrics_reporter_test.rb