metricize 0.4.7 → 0.5.0

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: 0a8cf931a25d42cfb633f176985e4384de6c6511
4
- data.tar.gz: 9988f0a09c4f64195605fc8ca6cd7c4f806650f2
3
+ metadata.gz: cee4500b798220d2e7720c6b7fbf24dbb4dfee6a
4
+ data.tar.gz: 654246270c58ae875d0d6f23f1099c38da87acc8
5
5
  SHA512:
6
- metadata.gz: c60726cfc70f886bf2ca1b6e4a67f510ac49842237cb7a367602dec91343167d1abe2a5fc9f6956ece80b92e33af9300448e5bccca91738e0cbc0b0f4700a1c6
7
- data.tar.gz: ce714c019aa029f2eab3abd0d6278f11107dd890418d49251328bad093a607fb0aeff93ffaa0b2c869b20dcdf7d786f05d338655804f76f6e2c59c859dba9ef4
6
+ metadata.gz: eb76d39f56af655011c4037c155e326fca7c91ce6d1c8bd43b4843e5a22f731ccafe9ecc19b12fd2051dbc82b3fa8c4e29083a577db43c1051e3983b946c9442
7
+ data.tar.gz: 5004d43b141bf78fe02aedcc82fa038f00ad7a257fb0701a3a2db69cc0310859da6b23bca14a9dec123ce3c279ff152da939fba5f8bd70011ffb9c4ca5d0453b
@@ -7,12 +7,13 @@ module Metricize
7
7
  @username = options.fetch(:username)
8
8
  @remote_url = options[:remote_url] || 'metrics-api.librato.com/v1/metrics'
9
9
  @remote_timeout = options[:remote_timeout] || 10
10
+ @max_batch_size = options[:max_batch_size] || 5000
10
11
  establish_logger(options)
11
12
  initialize_redis(options)
13
+ establish_redis_connection
12
14
  end
13
15
 
14
16
  def go!
15
- establish_redis_connection
16
17
  process_metric_queue
17
18
  end
18
19
 
@@ -20,23 +21,28 @@ module Metricize
20
21
 
21
22
  def process_metric_queue
22
23
  with_error_handling do
23
- queue = retrieve_queue_contents
24
+ queue = lshift_queue
24
25
  return if queue.empty?
25
26
  store_metrics(add_aggregate_info(queue))
26
- clear_queue
27
27
  end
28
28
  end
29
29
 
30
- def retrieve_queue_contents
31
- log_message "checking... queue_length=#{queue_length = @redis.llen(@queue_name)}", :info
30
+ def lshift_queue
32
31
  return [] unless queue_length > 0
33
- queue = @redis.lrange(@queue_name, 0, -1)
34
- queue.map {|metric| JSON.parse(metric, :symbolize_names => true) }
32
+ current_batch = @redis.lrange(@queue_name, 0, @max_batch_size - 1)
33
+ # ltrim indexes are 0 based and somewhat confusing -- see http://redis.io/commands/ltrim
34
+ @redis.ltrim(@queue_name, 0, -1-@max_batch_size)
35
+ current_batch.map {|metric| JSON.parse(metric, :symbolize_names => true) }
36
+ end
37
+
38
+ def queue_length
39
+ log_message "queue_length=#{length = @redis.llen(@queue_name)}", :info
40
+ length
35
41
  end
36
42
 
37
43
  def clear_queue
38
44
  log_message "clearing queue"
39
- @redis.del @queue_name if @redis
45
+ @redis.del @queue_name
40
46
  end
41
47
 
42
48
  def store_metrics(data)
@@ -1,3 +1,3 @@
1
1
  module Metricize
2
- VERSION = "0.4.7"
2
+ VERSION = "0.5.0"
3
3
  end
data/metricize.gemspec CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "timecop"
25
25
  spec.add_development_dependency "fakeredis"
26
26
  spec.add_development_dependency "simplecov"
27
+ spec.add_development_dependency "pry"
27
28
 
28
29
  spec.add_runtime_dependency "rest-client"
29
30
  spec.add_runtime_dependency "json"
@@ -49,13 +49,23 @@ describe Metricize do
49
49
  forwarder.go!
50
50
  end
51
51
 
52
- it "clears queue and does not send again after a successful request" do
52
+ it "clears sent items after a successful request and does not send to remote again if queue is empty" do
53
53
  client.increment('stat.name')
54
54
  forwarder.go!
55
55
  RestClient.should_not_receive(:post)
56
56
  forwarder.go!
57
57
  end
58
58
 
59
+ it "limits the number of metrics forwarded to the remote in a single request" do
60
+ forwarder.instance_variable_set(:@max_batch_size, 3)
61
+ 7.times { | n| client.increment('stat.name' + n.to_s) }
62
+ forwarder.go!
63
+ expect(forwarder.send(:queue_length)).to eq 4
64
+ forwarder.go!
65
+ expect(forwarder.send(:queue_length)).to eq 1
66
+ forwarder.go!
67
+ expect(forwarder.send(:queue_length)).to eq 0
68
+ end
59
69
  it "removes special characters and spaces and converts the metric names and sources to dotted decimal snake_case" do
60
70
  client.increment(' My UNRULY stat!@#$%^&*\(\) ')
61
71
  RestClient.should_receive(:post).with(anything, /my_unruly_stat/, anything)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metricize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.7
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt McNeil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-31 00:00:00.000000000 Z
11
+ date: 2013-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rest-client
99
113
  requirement: !ruby/object:Gem::Requirement