librato-metrics 0.6.0.pre3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,5 +3,12 @@ rvm:
3
3
  - ree
4
4
  - 1.9.2
5
5
  - 1.9.3
6
- - jruby
7
- - rbx
6
+ - jruby-19mode
7
+ - jruby-18mode
8
+ - rbx-19mode
9
+ - rbx-18mode
10
+ - ruby-head
11
+
12
+ matrix:
13
+ allow_failures:
14
+ - rvm: ruby-head
@@ -1,5 +1,16 @@
1
1
  ## Changelog
2
2
 
3
+ ### Version 0.6.0
4
+ * Add Aggregator class for aggregating measurements client-side
5
+ * Queue and Aggregator can auto-submit on a time interval
6
+ * Queue can auto-submit on a specified volume of measurements
7
+ * Support deleting individual metrics
8
+ * Validate user-specified measurement times
9
+ * Update to MultiJSON 1.3 syntax
10
+ * Run tests for rubinius and jruby in both 1.8 and 1.9 modes
11
+ * Include request body in output for failed requests
12
+ * Documentation improvements
13
+
3
14
  ### Version 0.5.0
4
15
  * Support using multiple accounts simultaneously via Client
5
16
  * Switch network library to faraday for broader platform support and flexibility
data/README.md CHANGED
@@ -48,8 +48,20 @@ Queue up a simple gauge metric named `temperature`:
48
48
 
49
49
  queue = Librato::Metrics::Queue.new
50
50
  queue.add :temperature => 32.2
51
+
52
+ While symbols are used by convention for metric names, strings will work just as well:
53
+
54
+ queue.add 'myapp.request_time' => 86.7
55
+
56
+ If you are tracking measurements over several seconds/minutes, the queue will handle storing measurement time for you (otherwise all metrics will be recorded as measured when they are submitted).
51
57
 
52
- If you are tracking measurements over several seconds/minutes, the queue will handle storing measurement time for you (otherwise all metrics will be recorded as measured when they are submitted).
58
+ If you want to specify a time other than queuing time for the measurement:
59
+
60
+ # use a epoch integer
61
+ queue.add :humidity => {:measure_time => 1336508422, :value => 48.2}
62
+
63
+ # use a Time object to correct for a 5 second delay
64
+ queue.add :humidity => {:measure_time => Time.now-5, :value => 37.6}
53
65
 
54
66
  You can queue multiple metrics at once. Here's a gauge (`load`) and a counter (`visits`):
55
67
 
@@ -61,7 +73,7 @@ Queue up a metric with a specified source:
61
73
 
62
74
  A complete [list of metric attributes](http://dev.librato.com/v1/metrics) is available in the [API documentation](http://dev.librato.com/v1).
63
75
 
64
- Save all queued metrics:
76
+ Send currently queued measurements to Metrics:
65
77
 
66
78
  queue.submit
67
79
 
@@ -90,7 +102,7 @@ You can aggregate multiple metrics at once:
90
102
 
91
103
  aggregator.add :app_latency => 35.2, :db_latency => 120.7
92
104
 
93
- Send the current aggregated metrics to Metrics:
105
+ Send the currently aggregated metrics to Metrics:
94
106
 
95
107
  aggregator.submit
96
108
 
@@ -109,6 +121,25 @@ If you need extra attributes for a `Queue` timing measurement, simply add them o
109
121
  queue.time :my_measurement, :source => 'app1' do
110
122
  # do work...
111
123
  end
124
+
125
+ ## Auto-Submitting Metrics
126
+
127
+ Both `Queue` and `Aggregator` support automatically submitting measurements on a given time interval:
128
+
129
+ # submit once per minute
130
+ timed_queue = Librato::Metrics::Queue.new(:autosubmit_interval => 60)
131
+
132
+ # submit every 5 minutes
133
+ timed_aggregator = Librato::Metrics::Aggregator.new(:autosubmit_interval => 300)
134
+
135
+ `Queue` also supports auto-submission based on measurement volume:
136
+
137
+ # submit when the 400th measurement is queued
138
+ volume_queue = Librato::Metrics::Queue.new(:autosubmit_count => 400)
139
+
140
+ These options can also be combined for more flexible behavior.
141
+
142
+ Both options are driven by the addition of measurements. Specifically for time-based autosubmission if you are adding measurements irregularly (less than once per second), submission may lag past your specified interval until the next measurement is added.
112
143
 
113
144
  ## Querying Metrics
114
145
 
@@ -140,6 +171,15 @@ Get the 20 most recent 15 minute data point rollups for `temperature`:
140
171
 
141
172
  There are many more options supported for querying, take a look at the [REST API docs](http://dev.librato.com/v1/get/gauges/:name) or the [fetch documentation](http://rubydoc.info/github/librato/librato-metrics/master/Librato/Metrics.fetch) for more details.
142
173
 
174
+ ## Deleting Metrics
175
+
176
+ If you ever need to remove a metric and all of its measurements, doing so is easy:
177
+
178
+ # Delete the metrics 'temperature' and 'humidity'
179
+ Librato::Metrics.delete :temperature, :humidity
180
+
181
+ Note that deleted metrics and their measurements are unrecoverable, so use with care.
182
+
143
183
  ## Using Multiple Accounts Simultaneously
144
184
 
145
185
  If you need to use metrics with multiple sets of authentication credentials simultaneously, you can do it with `Client`:
@@ -63,12 +63,14 @@ module Librato
63
63
  extend SingleForwardable
64
64
 
65
65
  TYPES = [:counter, :gauge]
66
+ MIN_MEASURE_TIME = (Time.now-(3600*24*365)).to_i
66
67
 
67
68
  # Expose class methods of Simple via Metrics itself.
68
69
  #
69
70
  def_delegators :client, :agent_identifier, :api_endpoint,
70
- :api_endpoint=, :authenticate, :connection, :fetch,
71
- :list, :persistence, :persistence=, :persister, :submit
71
+ :api_endpoint=, :authenticate, :connection, :delete,
72
+ :fetch, :list, :persistence, :persistence=, :persister,
73
+ :submit
72
74
 
73
75
  # The Librato::Metrics::Client being used by module-level
74
76
  # access.
@@ -11,13 +11,13 @@ module Librato
11
11
 
12
12
  def initialize(options={})
13
13
  @aggregated = {}
14
- @client = options[:client] || Librato::Metrics.client
15
- @source = options[:source]
14
+ setup_common_options(options)
16
15
  end
17
16
 
18
17
  # Add a metric entry to the metric set:
19
18
  #
20
19
  # @param Hash metrics metrics to add
20
+ # @return Aggregator returns self
21
21
  def add(args)
22
22
  args.each do |k, v|
23
23
  value = v.respond_to?(:each) ? v[:value] : v
@@ -25,6 +25,8 @@ module Librato
25
25
  @aggregated[k] ||= Aggregate.new
26
26
  @aggregated[k] << value
27
27
  end
28
+ autosubmit_check
29
+ self
28
30
  end
29
31
 
30
32
  # Returns true if aggregate contains no measurements
@@ -59,6 +59,26 @@ module Librato
59
59
  raise CredentialsMissing unless (self.email and self.api_key)
60
60
  @connection ||= Connection.new(:client => self, :api_endpoint => api_endpoint)
61
61
  end
62
+
63
+ # Completely delete metrics with the given names. Be
64
+ # careful with this, this is instant and permanent.
65
+ #
66
+ # @example Delete metric 'temperature'
67
+ # Librato::Metrics.delete :temperature
68
+ #
69
+ # @example Delete metrics 'foo' and 'bar'
70
+ # Librato::Metrics.delete :foo, :bar
71
+ def delete(*metric_names)
72
+ raise(NoMetricsProvided, 'Metric name missing.') if metric_names.empty?
73
+ params = {:names => metric_names}
74
+ connection.delete do |request|
75
+ request.url connection.build_url("metrics")
76
+ request.body = MultiJson.dump(params)
77
+ end
78
+ # expects 204, middleware will raise exception
79
+ # otherwise.
80
+ true
81
+ end
62
82
 
63
83
  # Query metric data
64
84
  #
@@ -27,7 +27,7 @@ module Librato
27
27
  end
28
28
 
29
29
  def transport
30
- raise NoClientProvided unless @client
30
+ raise(NoClientProvided, "No client provided.") unless @client
31
31
  @transport ||= Faraday::Connection.new(:url => api_endpoint + "/v1/") do |f|
32
32
  #f.use FaradayMiddleware::EncodeJson
33
33
  f.use Librato::Metrics::Middleware::RequestBody
@@ -5,9 +5,10 @@ module Librato
5
5
  class MetricsError < StandardError; end
6
6
 
7
7
  class CredentialsMissing < MetricsError; end
8
- class AgentInfoMissing < MetricsError; end
9
8
  class NoMetricsQueued < MetricsError; end
9
+ class NoMetricsProvided < MetricsError; end
10
10
  class NoClientProvided < MetricsError; end
11
+ class InvalidMeasureTime < MetricsError; end
11
12
 
12
13
  class NetworkError < StandardError; end
13
14
 
@@ -4,7 +4,7 @@ module Librato
4
4
  module Processor
5
5
  MEASUREMENTS_PER_REQUEST = 500
6
6
 
7
- attr_reader :per_request
7
+ attr_reader :per_request, :last_submit_time
8
8
 
9
9
  # The current Client instance this queue is using to authenticate
10
10
  # and connect to Librato Metrics. This will default to the primary
@@ -26,9 +26,10 @@ module Librato
26
26
  #
27
27
  # @return Boolean
28
28
  def submit
29
- raise NoMetricsQueued if self.queued.empty?
29
+ raise(NoMetricsQueued, "No metrics queued.") if self.queued.empty?
30
30
  options = {:per_request => @per_request}
31
31
  if persister.persist(self.client, self.queued, options)
32
+ @last_submit_time = Time.now
32
33
  flush and return true
33
34
  end
34
35
  false
@@ -72,6 +73,21 @@ module Librato
72
73
  Time.now.to_i
73
74
  end
74
75
 
76
+ def setup_common_options(options)
77
+ @autosubmit_interval = options[:autosubmit_interval]
78
+ @client = options[:client] || Librato::Metrics.client
79
+ @per_request = options[:per_request] || MEASUREMENTS_PER_REQUEST
80
+ @source = options[:source]
81
+ @create_time = Time.now
82
+ end
83
+
84
+ def autosubmit_check
85
+ if @autosubmit_interval
86
+ last = @last_submit_time || @create_time
87
+ self.submit if (Time.now - last).to_i >= @autosubmit_interval
88
+ end
89
+ end
90
+
75
91
  end
76
92
 
77
93
  end
@@ -1,6 +1,5 @@
1
1
  require 'metrics/processor'
2
2
 
3
-
4
3
  module Librato
5
4
  module Metrics
6
5
  class Queue
@@ -10,15 +9,15 @@ module Librato
10
9
 
11
10
  def initialize(options={})
12
11
  @queued = {}
13
- @client = options[:client] || Librato::Metrics.client
14
- @per_request = options[:per_request] || MEASUREMENTS_PER_REQUEST
12
+ @autosubmit_count = options[:autosubmit_count]
15
13
  @skip_measurement_times = options[:skip_measurement_times]
14
+ setup_common_options(options)
16
15
  end
17
16
 
18
17
  # Add a metric entry to the metric set:
19
18
  #
20
19
  # @param Hash metrics metrics to add
21
- # @return Hash queued_metrics the currently queued metrics
20
+ # @return Queue returns self
22
21
  def add(args)
23
22
  args.each do |key, value|
24
23
  if value.respond_to?(:each)
@@ -30,13 +29,16 @@ module Librato
30
29
  type = :gauge
31
30
  end
32
31
  type = ("#{type}s").to_sym
33
- unless skip_measurement_times
34
- metric[:measure_time] ||= epoch_time
32
+ if metric[:measure_time]
33
+ check_measure_time(metric)
34
+ elsif !skip_measurement_times
35
+ metric[:measure_time] = epoch_time
35
36
  end
36
37
  @queued[type] ||= []
37
38
  @queued[type] << metric
38
39
  end
39
- queued
40
+ submit_check
41
+ self
40
42
  end
41
43
 
42
44
  # Currently queued counters
@@ -82,6 +84,21 @@ module Librato
82
84
  self.queued.inject(0) { |result, data| result + data.last.size }
83
85
  end
84
86
  alias :length :size
87
+
88
+ private
89
+
90
+ def check_measure_time(data)
91
+ if data[:measure_time].to_i < Metrics::MIN_MEASURE_TIME
92
+ raise InvalidMeasureTime, "Measure time for submitted metric (#{data}) is invalid."
93
+ end
94
+ end
95
+
96
+ def submit_check
97
+ autosubmit_check # in Processor
98
+ if @autosubmit_count && self.length >= @autosubmit_count
99
+ self.submit
100
+ end
101
+ end
85
102
 
86
103
  end
87
104
  end
@@ -1,5 +1,5 @@
1
1
  module Librato
2
2
  module Metrics
3
- VERSION = "0.6.0.pre3"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
@@ -33,9 +33,11 @@ Gem::Specification.new do |s|
33
33
  s.add_development_dependency 'rspec', '~>2.6.0'
34
34
  s.add_development_dependency 'pry'
35
35
  s.add_development_dependency 'yard'
36
- s.add_development_dependency 'rdiscount' # for yard
37
36
  s.add_development_dependency 'sinatra'
38
37
  s.add_development_dependency 'popen4'
38
+
39
+ # omitting for now because jruby-19mode can't handle
40
+ #s.add_development_dependency 'rdiscount' # for yard
39
41
 
40
42
  s.files = `git ls-files`.split("\n")
41
43
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -37,6 +37,7 @@ module Librato
37
37
  gauge['unassigned'][0]['value'].should == 5
38
38
  end
39
39
  end
40
+
40
41
  end
41
42
 
42
43
  end
@@ -4,6 +4,45 @@ module Librato
4
4
  describe Metrics do
5
5
  before(:all) { prep_integration_tests }
6
6
 
7
+ describe "#delete" do
8
+ before(:each) { delete_all_metrics }
9
+
10
+ context "with a single argument" do
11
+ it "should delete named metric" do
12
+ Metrics.submit :foo => 123
13
+ Metrics.list(:name => :foo).should_not be_empty
14
+ Metrics.delete :foo
15
+ Metrics.list(:name => :foo).should be_empty
16
+ end
17
+ end
18
+
19
+ context "with multiple arguments" do
20
+ it "should delete named metrics" do
21
+ Metrics.submit :foo => 123, :bar => 345, :baz => 567
22
+ Metrics.delete :foo, :bar
23
+ Metrics.list(:name => :foo).should be_empty
24
+ Metrics.list(:name => :bar).should be_empty
25
+ Metrics.list(:name => :baz).should_not be_empty
26
+ end
27
+ end
28
+
29
+ context "with missing metric" do
30
+ it "should run cleanly" do
31
+ # the API currently returns success even if
32
+ # the metric has already been deleted or is absent.
33
+ Metrics.delete :missing
34
+ end
35
+ end
36
+
37
+ context "with no arguments" do
38
+ it "should not make request" do
39
+ lambda {
40
+ Metrics.delete
41
+ }.should raise_error(Metrics::NoMetricsProvided)
42
+ end
43
+ end
44
+ end
45
+
7
46
  describe "#fetch" do
8
47
  before(:all) do
9
48
  delete_all_metrics
@@ -41,6 +41,10 @@ module Librato
41
41
  end
42
42
 
43
43
  describe "#add" do
44
+ it "should allow chaining" do
45
+ subject.add(:foo => 1234).should == subject
46
+ end
47
+
44
48
  context "with single hash argument" do
45
49
  it "should record a single aggregate" do
46
50
  subject.add :foo => 3000
@@ -161,11 +165,33 @@ module Librato
161
165
  queued = subject.queued[:gauges][0]
162
166
  queued[:name].should == 'sleeping'
163
167
  queued[:count].should be 5
164
- queued[:sum].should be > 500
168
+ queued[:sum].should be >= 500.0
165
169
  queued[:sum].should be_within(150).of(500)
166
170
  end
167
171
  end
168
172
  end
173
+
174
+ context "with an autosubmit interval" do
175
+ let(:client) do
176
+ client = Client.new
177
+ client.persistence = :test
178
+ client
179
+ end
180
+
181
+ it "should not submit immediately" do
182
+ timed_agg = Aggregator.new(:client => client, :autosubmit_interval => 1)
183
+ timed_agg.add :foo => 1
184
+ timed_agg.persister.persisted.should be_nil # nothing sent
185
+ end
186
+
187
+ it "should submit after interval" do
188
+ timed_agg = Aggregator.new(:client => client, :autosubmit_interval => 1)
189
+ timed_agg.add :foo => 1
190
+ sleep 1
191
+ timed_agg.add :foo => 2
192
+ timed_agg.persister.persisted.should_not be_nil # sent
193
+ end
194
+ end
169
195
 
170
196
  end
171
197
 
@@ -0,0 +1,48 @@
1
+ require "spec_helper"
2
+
3
+ module Librato
4
+ module Metrics
5
+
6
+ describe Queue do
7
+
8
+ let(:client) {
9
+ client = Client.new
10
+ client.persistence = :test
11
+ client
12
+ }
13
+
14
+ context "with an autosubmit count" do
15
+ it "should submit when the max is reached" do
16
+ vol_queue = Queue.new(:client => client, :autosubmit_count => 2)
17
+ vol_queue.add :foo => 1
18
+ vol_queue.add :bar => 2
19
+ vol_queue.persister.persisted.should_not be_nil # sent
20
+ end
21
+
22
+ it "should not submit if the max has not been reached" do
23
+ vol_queue = Queue.new(:client => client, :autosubmit_count => 5)
24
+ vol_queue.add :foo => 1
25
+ vol_queue.add :bar => 2
26
+ vol_queue.persister.persisted.should be_nil # nothing sent
27
+ end
28
+ end
29
+
30
+ context "with an autosubmit interval" do
31
+ it "should not submit immediately" do
32
+ vol_queue = Queue.new(:client => client, :autosubmit_interval => 1)
33
+ vol_queue.add :foo => 1
34
+ vol_queue.persister.persisted.should be_nil # nothing sent
35
+ end
36
+
37
+ it "should submit after interval" do
38
+ vol_queue = Queue.new(:client => client, :autosubmit_interval => 1)
39
+ vol_queue.add :foo => 1
40
+ sleep 1
41
+ vol_queue.add :foo => 2
42
+ vol_queue.persister.persisted.should_not be_nil # sent
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -28,6 +28,10 @@ module Librato
28
28
  end
29
29
 
30
30
  describe "#add" do
31
+ it "should allow chaining" do
32
+ subject.add(:foo => 123).should == subject
33
+ end
34
+
31
35
  context "with single hash argument" do
32
36
  it "should record a key-value gauge" do
33
37
  expected = {:gauges => [{:name => 'foo', :value => 3000, :measure_time => @time}]}
@@ -78,6 +82,32 @@ module Librato
78
82
  subject.queued.should equal_unordered(expected)
79
83
  end
80
84
  end
85
+
86
+ context "with a measure_time" do
87
+ it "should accept time objects" do
88
+ time = Time.now-5
89
+ subject.add :foo => {:measure_time => time, :value => 123}
90
+ subject.queued[:gauges][0][:measure_time].should == time
91
+ end
92
+
93
+ it "should accept integers" do
94
+ time = 1336574713
95
+ subject.add :foo => {:measure_time => time, :value => 123}
96
+ subject.queued[:gauges][0][:measure_time].should == time
97
+ end
98
+
99
+ it "should accept strings" do
100
+ time = '1336574713'
101
+ subject.add :foo => {:measure_time => time, :value => 123}
102
+ subject.queued[:gauges][0][:measure_time].should == time
103
+ end
104
+
105
+ it "should raise exception in invalid time" do
106
+ lambda {
107
+ subject.add :foo => {:measure_time => '12', :value => 123}
108
+ }.should raise_error(InvalidMeasureTime)
109
+ end
110
+ end
81
111
  end
82
112
 
83
113
  describe "#counters" do
@@ -115,6 +145,19 @@ module Librato
115
145
  end
116
146
  end
117
147
 
148
+ describe "#last_submit_time" do
149
+ it "should default to nil" do
150
+ subject.last_submit_time.should be_nil
151
+ end
152
+
153
+ it "should store last submission time" do
154
+ prior = Time.now
155
+ subject.add :foo => 123
156
+ subject.submit
157
+ subject.last_submit_time.should >= prior
158
+ end
159
+ end
160
+
118
161
  describe "#per_request" do
119
162
  it "should default to 500" do
120
163
  subject.per_request.should == 500
@@ -186,7 +229,7 @@ module Librato
186
229
  end
187
230
  end
188
231
 
189
- end # MetricSet
232
+ end # Queue
190
233
 
191
234
  end
192
235
  end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: librato-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0.pre3
5
- prerelease: 6
4
+ version: 0.6.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Matt Sanders
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-26 00:00:00.000000000Z
12
+ date: 2012-05-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
16
- requirement: &70105435038240 !ruby/object:Gem::Requirement
16
+ requirement: &70349186771660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.7.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70105435038240
24
+ version_requirements: *70349186771660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &70105435037740 !ruby/object:Gem::Requirement
27
+ requirement: &70349186771180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.3.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70105435037740
35
+ version_requirements: *70349186771180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: aggregate
38
- requirement: &70105435037280 !ruby/object:Gem::Requirement
38
+ requirement: &70349186770720 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.2.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70105435037280
46
+ version_requirements: *70349186770720
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &70105435036900 !ruby/object:Gem::Requirement
49
+ requirement: &70349186802320 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70105435036900
57
+ version_requirements: *70349186802320
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70105435068860 !ruby/object:Gem::Requirement
60
+ requirement: &70349186801780 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.6.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70105435068860
68
+ version_requirements: *70349186801780
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
- requirement: &70105435068440 !ruby/object:Gem::Requirement
71
+ requirement: &70349186801360 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70105435068440
79
+ version_requirements: *70349186801360
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: yard
82
- requirement: &70105435067980 !ruby/object:Gem::Requirement
82
+ requirement: &70349186800900 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,21 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70105435067980
91
- - !ruby/object:Gem::Dependency
92
- name: rdiscount
93
- requirement: &70105435067560 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
- type: :development
100
- prerelease: false
101
- version_requirements: *70105435067560
90
+ version_requirements: *70349186800900
102
91
  - !ruby/object:Gem::Dependency
103
92
  name: sinatra
104
- requirement: &70105435067140 !ruby/object:Gem::Requirement
93
+ requirement: &70349186800480 !ruby/object:Gem::Requirement
105
94
  none: false
106
95
  requirements:
107
96
  - - ! '>='
@@ -109,10 +98,10 @@ dependencies:
109
98
  version: '0'
110
99
  type: :development
111
100
  prerelease: false
112
- version_requirements: *70105435067140
101
+ version_requirements: *70349186800480
113
102
  - !ruby/object:Gem::Dependency
114
103
  name: popen4
115
- requirement: &70105435066720 !ruby/object:Gem::Requirement
104
+ requirement: &70349186800060 !ruby/object:Gem::Requirement
116
105
  none: false
117
106
  requirements:
118
107
  - - ! '>='
@@ -120,7 +109,7 @@ dependencies:
120
109
  version: '0'
121
110
  type: :development
122
111
  prerelease: false
123
- version_requirements: *70105435066720
112
+ version_requirements: *70349186800060
124
113
  description: An easy to use ruby wrapper for Librato's Metrics API
125
114
  email: matt@librato.com
126
115
  executables: []
@@ -162,6 +151,7 @@ files:
162
151
  - spec/unit/metrics/aggregator_spec.rb
163
152
  - spec/unit/metrics/client_spec.rb
164
153
  - spec/unit/metrics/connection_spec.rb
154
+ - spec/unit/metrics/queue/autosubmission_spec.rb
165
155
  - spec/unit/metrics/queue_spec.rb
166
156
  - spec/unit/metrics_spec.rb
167
157
  homepage: https://github.com/librato/librato-metrics
@@ -180,9 +170,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
170
  required_rubygems_version: !ruby/object:Gem::Requirement
181
171
  none: false
182
172
  requirements:
183
- - - ! '>'
173
+ - - ! '>='
184
174
  - !ruby/object:Gem::Version
185
- version: 1.3.1
175
+ version: '0'
186
176
  requirements: []
187
177
  rubyforge_project:
188
178
  rubygems_version: 1.8.16
@@ -199,6 +189,7 @@ test_files:
199
189
  - spec/unit/metrics/aggregator_spec.rb
200
190
  - spec/unit/metrics/client_spec.rb
201
191
  - spec/unit/metrics/connection_spec.rb
192
+ - spec/unit/metrics/queue/autosubmission_spec.rb
202
193
  - spec/unit/metrics/queue_spec.rb
203
194
  - spec/unit/metrics_spec.rb
204
195
  has_rdoc: