ruby-metrics 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -15,13 +15,13 @@ task :build do
15
15
  FileUtils.mv(Dir['*.gem'], 'pkg')
16
16
  end
17
17
 
18
- desc 'Tags version, pushes to remote, and pushes gem'
18
+ desc "Tags version as #{Metrics::VERSION}, pushes to remote, and pushes gem"
19
19
  task :release => :build do
20
20
  puts "Releasing v#{Metrics::VERSION}"
21
21
  sh 'git', 'tag', '-m', "Version #{Metrics::VERSION}", "v#{Metrics::VERSION}"
22
22
  sh "git push origin master"
23
23
  sh "git push origin v#{Metrics::VERSION}"
24
- #sh "ls pkg/*.gem | xargs -n 1 gem push"
24
+ sh "ls pkg/*.gem | xargs -n 1 gem push"
25
25
  end
26
26
 
27
27
  RSpec::Core::RakeTask.new do |t|
@@ -67,6 +67,10 @@ module Metrics
67
67
  @reporter = Reporter.new({:agent => self, :delay => delay})
68
68
  end
69
69
 
70
+ def stop_reporting
71
+ @reporter.stop
72
+ end
73
+
70
74
  def as_json(*_)
71
75
  @instruments
72
76
  end
@@ -1,11 +1,14 @@
1
+ require_relative 'instrument'
2
+
1
3
  module Metrics
2
4
  module Instruments
3
- class Counter
5
+ class Counter < Instrument
4
6
 
5
7
  attr_reader :units
6
8
 
7
9
  def initialize(options = {})
8
10
  @value = 0
11
+ @units = options[:units]
9
12
  end
10
13
 
11
14
  def inc(value = 1)
@@ -1,6 +1,8 @@
1
+ require_relative 'instrument'
2
+
1
3
  module Metrics
2
4
  module Instruments
3
- class Gauge
5
+ class Gauge < Instrument
4
6
  attr_reader :units
5
7
 
6
8
  def initialize(options = {}, &block)
@@ -1,9 +1,10 @@
1
+ require_relative 'instrument'
1
2
  require 'ruby-metrics/statistics/uniform_sample'
2
3
  require 'ruby-metrics/statistics/exponential_sample'
3
4
 
4
5
  module Metrics
5
6
  module Instruments
6
- class Histogram
7
+ class Histogram < Instrument
7
8
 
8
9
  def initialize(type = :uniform)
9
10
  @count = 0
@@ -0,0 +1,14 @@
1
+ module Metrics
2
+ module Instruments
3
+ class Instrument
4
+ def tags
5
+ @tags ||= {}
6
+ end
7
+
8
+ def tag(key, value)
9
+ @tags ||= {}
10
+ @tags[key] = value
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,8 +1,9 @@
1
+ require_relative 'instrument'
1
2
  require 'ruby-metrics/time_units'
2
3
 
3
4
  module Metrics
4
5
  module Instruments
5
- class Meter
6
+ class Meter < Instrument
6
7
  include Metrics::TimeConversion
7
8
 
8
9
  # From http://www.teamquest.com/pdfs/whitepaper/ldavg2.pdf
@@ -21,7 +22,7 @@ module Metrics
21
22
  @count = 0
22
23
  @initialized = false
23
24
  @start_time = Time.now.to_f
24
- @units = "#{options[:units]}"
25
+ @units = options[:units]
25
26
 
26
27
  @timer_thread = Thread.new do
27
28
  begin
@@ -1,8 +1,9 @@
1
- require File.join(File.dirname(__FILE__), '..', 'time_units')
1
+ require_relative 'instrument'
2
+ require 'ruby-metrics/time_units'
2
3
 
3
4
  module Metrics
4
5
  module Instruments
5
- class Timer
6
+ class Timer < Instrument
6
7
  include Metrics::TimeConversion
7
8
 
8
9
  attr_reader :duration_unit, :rate_unit, :units
@@ -5,7 +5,12 @@ module Metrics
5
5
 
6
6
  include Logging
7
7
 
8
+ def stop
9
+ @running = false
10
+ end
11
+
8
12
  def initialize(options = {})
13
+ @running = true
9
14
 
10
15
  if options[:agent] == nil
11
16
  raise "Need an agent to report data from"
@@ -15,13 +20,13 @@ module Metrics
15
20
  agent = options[:agent]
16
21
 
17
22
  Thread.new {
18
- while(true)
23
+ while(@running)
19
24
  agent.reporters.each do |name, service|
20
25
  service.report(agent)
21
26
  end
22
27
  sleep delay
23
28
  end
24
- }.join
29
+ }
25
30
  end
26
31
 
27
32
  end
@@ -0,0 +1,79 @@
1
+ require 'ruby-metrics/version'
2
+ require 'ruby-metrics'
3
+
4
+ require 'gmetric'
5
+
6
+ module Metrics
7
+ module Reporters
8
+ class GangliaReporter
9
+
10
+ attr_reader :host_ip
11
+ attr_reader :host_port
12
+
13
+ def initialize(options = {})
14
+ @host_ip = options[:host_ip]
15
+ @host_port = options[:host_port]
16
+ end
17
+
18
+ def send_data(data)
19
+ puts "Sending data: #{data.inspect}"
20
+ data_type = case data[:value].class.to_s
21
+ when "Fixnum"
22
+ "uint32"
23
+ when "Float"
24
+ "float"
25
+ when "String"
26
+ "string"
27
+ else
28
+ "unknown"
29
+ end
30
+
31
+ Ganglia::GMetric.send(@host_ip, @host_port.to_i, {
32
+ :spoof => 0,
33
+ :name => data[:name],
34
+ :units => data[:units],
35
+ :type => data_type,
36
+ :value => data[:value],
37
+ :tmax => 60,
38
+ :dmax => 300,
39
+ })
40
+ end
41
+
42
+ def report(agent)
43
+
44
+ agent.instruments.each do |name, instrument|
45
+ nothing_to_do = false
46
+ data = { :name => name, :units => instrument.units }
47
+ case instrument
48
+ when Metrics::Instruments::Counter
49
+ value = instrument.to_i
50
+ data.merge! :value => value.to_i
51
+ send_data data
52
+ when Metrics::Instruments::Gauge
53
+ if instrument.get.is_a? Hash
54
+ instrument.get.each do |key, value|
55
+ data.merge! :name => "#{name}_#{key}", :value => value
56
+ send_data data
57
+ end
58
+ else
59
+ data.merge! :value => instrument.get
60
+ send_data data
61
+ end
62
+ when Metrics::Instruments::Timer
63
+ [:count, :fifteen_minute_rate, :five_minute_rate, :one_minute_rate, :min, :max, :mean].each do |attribute|
64
+ data.merge!(:name => "#{name}_#{attribute}", :value => instrument.send(attribute))
65
+ send_data data
66
+ end
67
+ when Metrics::Instruments::Meter
68
+ [:count, :fifteen_minute_rate, :five_minute_rate, :one_minute_rate, :mean_rate].each do |attribute|
69
+ data.merge!(:name => "#{name_attribute}", :value => instrument.send(attribute) )
70
+ end
71
+ else
72
+ puts "Unhandled instrument"
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
@@ -0,0 +1,83 @@
1
+ require 'net/https'
2
+ require 'ruby-metrics/version'
3
+ require 'ruby-metrics'
4
+
5
+ module Metrics
6
+ module Reporters
7
+ class Librato
8
+ attr_reader :api_token
9
+ attr_reader :user
10
+
11
+ API_URL = "https://metrics-api.librato.com/v1"
12
+
13
+ def initialize(options = {})
14
+ @api_token = options[:api_token]
15
+ @user = options[:user]
16
+ @headers = {
17
+ 'User-Agent' => "ruby-metrics #{Metrics::VERSION}"
18
+ }
19
+ end
20
+
21
+ def send_data(post_url, post_data)
22
+ url = URI.parse(post_url)
23
+ req = Net::HTTP::Post.new(url.path)
24
+ req.basic_auth @user, @api_token
25
+ @headers.each do |k,v|
26
+ req.add_field(k, v)
27
+ end
28
+ req.set_form_data(post_data)
29
+ https = Net::HTTP.new(url.host, url.port)
30
+ https.use_ssl = true
31
+ #https.set_debug_output($stdout)
32
+
33
+ https.start do |http|
34
+ result = http.request(req)
35
+ case result
36
+ when Net::HTTPCreated
37
+ # OK
38
+ puts "SENT!"
39
+ else
40
+ puts "FAILED TO SEND: #{https.inspect}"
41
+ end
42
+ end
43
+ end
44
+
45
+ def report(agent)
46
+
47
+ agent.instruments.each do |name, instrument|
48
+ nothing_to_do = false
49
+ measure_time = Time.now.to_i
50
+
51
+ case instrument.class.to_s
52
+ when "Metrics::Instruments::Counter"
53
+ value = instrument.to_i
54
+ post_url = "#{API_URL}/counters/#{name}.json"
55
+ post_data = {:measure_time => measure_time, :value => value.to_i}
56
+ send_data(post_url, post_data)
57
+ when "Metrics::Instruments::Gauge"
58
+ post_url = "#{API_URL}/gauges/#{name}.json"
59
+ if instrument.get.is_a? Hash
60
+ instrument.get.each do |key, value|
61
+ post_data = {:measure_time => measure_time, :source => key, :value => value}
62
+ send_data(post_url, post_data)
63
+ end
64
+ else
65
+ post_data = {:measure_time => measure_time, :value => instrument.get}
66
+ send_data(post_url, post_data)
67
+ end
68
+ when "Metrics::Instruments::Timer"
69
+ post_url = "#{API_URL}/gauges/#{name}.json"
70
+ common_data = {:measure_time => measure_time}
71
+
72
+ [:count, :fifteen_minute_rate, :five_minute_rate, :one_minute_rate, :min, :max, :mean].each do |attribute|
73
+ post_data = {:source => attribute, :value => instrument.send(attribute)}.merge(common_data)
74
+ send_data(post_url, post_data)
75
+ end
76
+ else
77
+ puts "Unhandled instrument"
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,3 +1,3 @@
1
1
  module Metrics
2
- VERSION = '0.9.0'
2
+ VERSION = '0.9.1'
3
3
  end
@@ -1,78 +1,88 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Metrics::Instruments::Counter do
4
- before(:each) do
5
- @counter = Metrics::Instruments::Counter.new
4
+ let(:counter) {
5
+ Metrics::Instruments::Counter.new
6
+ }
7
+
8
+ it 'can be tagged' do
9
+ counter.tag(:foo, 'bar')
10
+ expect(counter.tags.keys).to include(:foo)
11
+ expect(counter.tags.values).to include('bar')
12
+ end
13
+
14
+ it 'does not need to be tagged' do
15
+ expect(counter.tags.keys.size).to be 0
6
16
  end
7
17
 
8
- it "should create a new entity with zero as its value" do
9
- @counter.to_i.should == 0
18
+ it 'should create a new entity with zero as its value' do
19
+ counter.to_i.should == 0
10
20
  end
11
21
 
12
22
  it "should increment its counter by the value specified" do
13
23
  value = 1
14
24
  lambda do
15
- @counter.inc(value)
16
- end.should change{ @counter.to_i }.by(value)
25
+ counter.inc(value)
26
+ end.should change{ counter.to_i }.by(value)
17
27
  end
18
28
 
19
29
  it "should increment its counter by one by default" do
20
30
  lambda do
21
- @counter.inc
22
- end.should change{ @counter.to_i }.by(1)
31
+ counter.inc
32
+ end.should change{ counter.to_i }.by(1)
23
33
  end
24
34
 
25
35
  it "should decrement its counter by the value specified" do
26
36
  value = 1
27
37
  lambda do
28
- @counter.dec(value)
29
- end.should change{ @counter.to_i }.by(-value)
38
+ counter.dec(value)
39
+ end.should change{ counter.to_i }.by(-value)
30
40
  end
31
41
 
32
42
  it "should decrement its counter by one by default" do
33
43
  lambda do
34
- @counter.dec
35
- end.should change{ @counter.to_i }.by(-1)
44
+ counter.dec
45
+ end.should change{ counter.to_i }.by(-1)
36
46
  end
37
47
 
38
48
  it "should alias #incr to #inc" do
39
49
  lambda do
40
- @counter.incr
41
- end.should change{ @counter.to_i }.by(1)
50
+ counter.incr
51
+ end.should change{ counter.to_i }.by(1)
42
52
  end
43
53
 
44
54
  it "should alias #decr to #dec" do
45
55
  lambda do
46
- @counter.decr
47
- end.should change{ @counter.to_i }.by(-1)
56
+ counter.decr
57
+ end.should change{ counter.to_i }.by(-1)
48
58
  end
49
59
 
50
60
  it "should clear the counter correctly" do
51
- @counter.clear
52
- @counter.to_i.should == 0
61
+ counter.clear
62
+ counter.to_i.should == 0
53
63
  end
54
64
 
55
65
  it "should correctly represent the value as a string" do
56
- @counter.clear
57
- @counter.to_i.should == 0
58
- @counter.to_s.should == "0"
66
+ counter.clear
67
+ counter.to_i.should == 0
68
+ counter.to_s.should == "0"
59
69
  end
60
70
 
61
71
  it "should return the new count when incrementing" do
62
- count = @counter.to_i
63
- @counter.inc(value = 1).should == count + value
72
+ count = counter.to_i
73
+ counter.inc(value = 1).should == count + value
64
74
  end
65
75
 
66
76
  it "should return the new count when decrementing" do
67
77
  lambda do
68
- @counter.dec(1)
69
- end.should change{ @counter.to_i }.by(-1)
78
+ counter.dec(1)
79
+ end.should change{ counter.to_i }.by(-1)
70
80
  end
71
81
 
72
82
  context "to_json" do
73
- let(:json) { @counter.to_json }
83
+ let(:json) { counter.to_json }
74
84
  it "should serialize to its current value" do
75
- json.should == @counter.to_s
85
+ json.should == counter.to_s
76
86
  end
77
87
  end
78
88
 
@@ -0,0 +1,27 @@
1
+ require 'ruby-metrics/agent'
2
+ require 'ruby-metrics/reporter'
3
+ require 'ruby-metrics/reporters/opentsdb'
4
+
5
+ module Metrics
6
+ describe 'Reporter' do
7
+ let(:mock_reporter) {
8
+ double(Metrics::Reporters::OpenTSDBReporter)
9
+ }
10
+
11
+ let(:agent) {
12
+ agent = Metrics::Agent.new
13
+ agent.report_to 'opentsdb', mock_reporter
14
+ agent
15
+ }
16
+
17
+ it 'should report three times in 4 seconds with a 1 second interval' do
18
+ expect(mock_reporter).to receive(:report).exactly(3).times
19
+ agent.report_periodically(1)
20
+ puts "Sleeping"
21
+ sleep(4)
22
+ puts "Stopping..."
23
+ agent.stop_reporting
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,299 @@
1
+ require 'spec_helper'
2
+ require 'opentsdb/client'
3
+ require 'ruby-metrics/reporters/opentsdb'
4
+ require 'ruby-metrics'
5
+ require 'timecop'
6
+
7
+ module Metrics
8
+ module Reporters
9
+ describe 'OpenTSDBReporter' do
10
+
11
+ let(:mock_tsdb_client) {
12
+ mock_tsdb_client = double(OpenTSDB::Client)
13
+ }
14
+
15
+ let(:reporter) {
16
+ expect(OpenTSDB::Client).to receive(:new).and_return mock_tsdb_client
17
+ OpenTSDBReporter.new(:tags => {:foo => 'bar'})
18
+ }
19
+
20
+ let(:agent) {
21
+ Metrics::Agent.new
22
+ }
23
+
24
+ it 'should report a counter correctly' do
25
+ counter = agent.counter :my_counter
26
+ counter.incr
27
+ counter.incr
28
+
29
+ counter_data = {
30
+ :value => 2,
31
+ :timestamp => anything,
32
+ :tags => {
33
+ :units => '',
34
+ :foo => 'bar'
35
+ },
36
+ :metric => 'my_counter'
37
+ }
38
+ expect(mock_tsdb_client).to receive(:put).with(counter_data)
39
+
40
+ reporter.report(agent)
41
+ end
42
+
43
+ it 'should report a tagged counter correctly' do
44
+ counter = agent.counter :logins, 'logins'
45
+ counter.incr
46
+ counter.tag(:user, 'sam')
47
+
48
+ counter_data = {
49
+ :value => 1,
50
+ :timestamp => anything,
51
+ :tags => {
52
+ :units => 'logins',
53
+ :foo => 'bar',
54
+ :user => 'sam'
55
+ },
56
+ :metric => 'logins'
57
+ }
58
+ expect(mock_tsdb_client).to receive(:put).with(counter_data)
59
+
60
+ reporter.report(agent)
61
+ end
62
+
63
+ it 'should report a gauge that returns a hash' do
64
+ gauge = agent.gauge :my_gauge do
65
+ {
66
+ :hit_count => 42,
67
+ :http_requests => 320
68
+ }
69
+ end
70
+ gauge.tag(:mytag, 'somevalue')
71
+
72
+
73
+ tags = {
74
+ :units => '',
75
+ :foo => 'bar',
76
+ :mytag => 'somevalue'
77
+ }
78
+
79
+ gauge_hit_data = {
80
+ :value => 42,
81
+ :timestamp => anything,
82
+ :tags => tags,
83
+ :metric => 'my_gauge.hit_count'
84
+ }
85
+ gauge_requests_data = {
86
+ :value => 320,
87
+ :timestamp => anything,
88
+ :tags => tags,
89
+ :metric => 'my_gauge.http_requests'
90
+ }
91
+ expect(mock_tsdb_client).to receive(:put).with(gauge_hit_data)
92
+ expect(mock_tsdb_client).to receive(:put).with(gauge_requests_data)
93
+
94
+ reporter.report(agent)
95
+ end
96
+
97
+
98
+ it 'should report a gauge that returns a non-hash value' do
99
+ agent.gauge :boring_gauge, 'units' do
100
+ 42
101
+ end
102
+
103
+ gauge_data = {
104
+ :value => 42,
105
+ :timestamp => anything,
106
+ :tags => {
107
+ :units => 'units',
108
+ :foo => 'bar',
109
+ },
110
+ :metric => 'boring_gauge'
111
+ }
112
+ expect(mock_tsdb_client).to receive(:put).with(gauge_data)
113
+
114
+ reporter.report(agent)
115
+ end
116
+
117
+ it 'should report a timer' do
118
+ timer = agent.timer :some_timer, 'requests'
119
+ timer.update(5, :seconds)
120
+
121
+ timer_counter_data = {
122
+ :value => 1,
123
+ :timestamp => anything,
124
+ :tags => {
125
+ :units => 'requests',
126
+ :foo => 'bar'
127
+ },
128
+ :metric => 'some_timer.count'
129
+ }
130
+ expect(mock_tsdb_client).to receive(:put).with(timer_counter_data)
131
+
132
+ timer_fifteen = {
133
+ :value => 0.0,
134
+ :timestamp => anything,
135
+ :tags => {
136
+ :units => 'requests/sec',
137
+ :foo => 'bar'
138
+ },
139
+ :metric => 'some_timer.fifteen_minute_rate'
140
+ }
141
+ expect(mock_tsdb_client).to receive(:put).with(timer_fifteen)
142
+
143
+ timer_five = {
144
+ :value => 0.0,
145
+ :timestamp => anything,
146
+ :tags => {
147
+ :units => 'requests/sec',
148
+ :foo => 'bar'
149
+ },
150
+ :metric => 'some_timer.five_minute_rate'
151
+ }
152
+ expect(mock_tsdb_client).to receive(:put).with(timer_five)
153
+
154
+
155
+ timer_one = {
156
+ :value => 0.0,
157
+ :timestamp => anything,
158
+ :tags => {
159
+ :units => 'requests/sec',
160
+ :foo => 'bar'
161
+ },
162
+ :metric => 'some_timer.one_minute_rate'
163
+ }
164
+ expect(mock_tsdb_client).to receive(:put).with(timer_one)
165
+
166
+
167
+ timer_min = {
168
+ :value => 5.0,
169
+ :timestamp => anything,
170
+ :tags => {
171
+ :units => 'sec/requests',
172
+ :foo => 'bar'
173
+ },
174
+ :metric => 'some_timer.min'
175
+ }
176
+ expect(mock_tsdb_client).to receive(:put).with(timer_min)
177
+
178
+
179
+ timer_max = {
180
+ :value => 5.0,
181
+ :timestamp => anything,
182
+ :tags => {
183
+ :units => 'sec/requests',
184
+ :foo => 'bar'
185
+ },
186
+ :metric => 'some_timer.max'
187
+ }
188
+ expect(mock_tsdb_client).to receive(:put).with(timer_max)
189
+
190
+ timer_mean = {
191
+ :value => 5.0,
192
+ :timestamp => anything,
193
+ :tags => {
194
+ :units => 'sec/requests',
195
+ :foo => 'bar'
196
+ },
197
+ :metric => 'some_timer.mean'
198
+ }
199
+ expect(mock_tsdb_client).to receive(:put).with(timer_mean)
200
+
201
+ reporter.report(agent)
202
+ end
203
+
204
+ it 'should report a gauge that returns a non-hash value' do
205
+ agent.gauge :boring_gauge, 'units' do
206
+ 42
207
+ end
208
+
209
+ gauge_data = {
210
+ :value => 42,
211
+ :timestamp => anything,
212
+ :tags => {
213
+ :units => 'units',
214
+ :foo => 'bar',
215
+ },
216
+ :metric => 'boring_gauge'
217
+ }
218
+ expect(mock_tsdb_client).to receive(:put).with(gauge_data)
219
+
220
+ reporter.report(agent)
221
+ end
222
+
223
+ it 'should report a meter' do
224
+ expect(Thread).to receive(:new).and_return nil
225
+
226
+ meter = agent.meter :http_requests, 'requests'
227
+ meter.mark
228
+ meter.mark
229
+ meter.mark
230
+ meter.tick
231
+ meter.mark
232
+ meter.tag :somekey, 'value'
233
+
234
+ meter_counter_data = {
235
+ :value => 1,
236
+ :timestamp => anything,
237
+ :tags => {
238
+ :units => 'requests',
239
+ :foo => 'bar',
240
+ :somekey => 'value'
241
+ },
242
+ :metric => 'http_requests.count'
243
+ }
244
+ expect(mock_tsdb_client).to receive(:put).with(meter_counter_data)
245
+
246
+ meter_fifteen = {
247
+ :value => 0.6,
248
+ :timestamp => anything,
249
+ :tags => {
250
+ :units => 'requests/sec',
251
+ :foo => 'bar',
252
+ :somekey => 'value'
253
+ },
254
+ :metric => 'http_requests.fifteen_minute_rate'
255
+ }
256
+ expect(mock_tsdb_client).to receive(:put).with(meter_fifteen)
257
+
258
+ meter_five = {
259
+ :value => 0.6,
260
+ :timestamp => anything,
261
+ :tags => {
262
+ :units => 'requests/sec',
263
+ :foo => 'bar',
264
+ :somekey => 'value'
265
+ },
266
+ :metric => 'http_requests.five_minute_rate'
267
+ }
268
+ expect(mock_tsdb_client).to receive(:put).with(meter_five)
269
+
270
+
271
+ meter_one = {
272
+ :value => 0.6,
273
+ :timestamp => anything,
274
+ :tags => {
275
+ :units => 'requests/sec',
276
+ :foo => 'bar',
277
+ :somekey => 'value'
278
+ },
279
+ :metric => 'http_requests.one_minute_rate'
280
+ }
281
+ expect(mock_tsdb_client).to receive(:put).with(meter_one)
282
+
283
+ meter_mean = {
284
+ :value => anything,
285
+ :timestamp => anything,
286
+ :tags => {
287
+ :units => 'requests/sec',
288
+ :foo => 'bar',
289
+ :somekey => 'value'
290
+ },
291
+ :metric => 'http_requests.mean_rate'
292
+ }
293
+ expect(mock_tsdb_client).to receive(:put).with(meter_mean)
294
+
295
+ reporter.report(agent)
296
+ end
297
+ end
298
+ end
299
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-08 00:00:00.000000000 Z
12
+ date: 2014-05-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -132,6 +132,7 @@ files:
132
132
  - lib/ruby-metrics/instruments/counter.rb
133
133
  - lib/ruby-metrics/instruments/gauge.rb
134
134
  - lib/ruby-metrics/instruments/histogram.rb
135
+ - lib/ruby-metrics/instruments/instrument.rb
135
136
  - lib/ruby-metrics/instruments/meter.rb
136
137
  - lib/ruby-metrics/instruments/timer.rb
137
138
  - lib/ruby-metrics/integration.rb
@@ -140,12 +141,12 @@ files:
140
141
  - lib/ruby-metrics/integration/webrick.rb
141
142
  - lib/ruby-metrics/logging.rb
142
143
  - lib/ruby-metrics/reporter.rb
144
+ - lib/ruby-metrics/reporters/ganglia.rb
145
+ - lib/ruby-metrics/reporters/librato.rb
143
146
  - lib/ruby-metrics/statistics/exponential_sample.rb
144
147
  - lib/ruby-metrics/statistics/uniform_sample.rb
145
148
  - lib/ruby-metrics/time_units.rb
146
149
  - lib/ruby-metrics/version.rb
147
- - ruby-metrics-ganglia.gemspec
148
- - ruby-metrics-librato.gemspec
149
150
  - ruby-metrics-opentsdb.gemspec
150
151
  - ruby-metrics.gemspec
151
152
  - spec/agent_spec.rb
@@ -156,6 +157,8 @@ files:
156
157
  - spec/instruments/timer_spec.rb
157
158
  - spec/integration/rack_endpoint_spec.rb
158
159
  - spec/integration/rack_middleware_spec.rb
160
+ - spec/reporter_spec.rb
161
+ - spec/reporters/opentsdb_spec.rb
159
162
  - spec/spec_helper.rb
160
163
  - spec/statistics/exponential_sample_spec.rb
161
164
  - spec/statistics/uniform_sample_spec.rb
@@ -1,21 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
3
- require 'ruby-metrics/version'
4
-
5
- Gem::Specification.new do |s|
6
- s.name = 'ruby-metrics-ganglia'
7
- s.version = Metrics::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ['John Ewart']
10
- s.email = ['john@johnewart.net']
11
- s.homepage = 'https://github.com/johnewart/ruby-metrics'
12
- s.summary = %q{Ganglia reporter for ruby-metrics}
13
- s.description = %q{A reporter that uses Ganglia's to stash metric data}
14
- s.license = 'MIT'
15
-
16
- s.files = ['lib/ruby-metrics/reporters/ganglia.rb']
17
- s.require_paths = ['lib']
18
-
19
- s.add_dependency 'gmetric', '0.1.3'
20
- s.add_dependency 'ruby-metrics', Metrics::VERSION
21
- end
@@ -1,20 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
3
- require 'ruby-metrics/version'
4
-
5
- Gem::Specification.new do |s|
6
- s.name = 'ruby-metrics-librato'
7
- s.version = Metrics::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ['John Ewart']
10
- s.email = ['john@johnewart.net']
11
- s.homepage = 'https://github.com/johnewart/ruby-metrics'
12
- s.summary = %q{Librato reporter for ruby-metrics}
13
- s.description = %q{A reporter that uses Librato to stash metric data}
14
- s.license = 'MIT'
15
-
16
- s.files = ['lib/ruby-metrics/reporters/librato.rb']
17
- s.require_paths = ['lib']
18
-
19
- s.add_dependency 'ruby-metrics', Metrics::VERSION
20
- end