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 +4 -4
- data/lib/metricize/forwarder.rb +14 -8
- data/lib/metricize/version.rb +1 -1
- data/metricize.gemspec +1 -0
- data/spec/lib/metricize_spec.rb +11 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cee4500b798220d2e7720c6b7fbf24dbb4dfee6a
|
4
|
+
data.tar.gz: 654246270c58ae875d0d6f23f1099c38da87acc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb76d39f56af655011c4037c155e326fca7c91ce6d1c8bd43b4843e5a22f731ccafe9ecc19b12fd2051dbc82b3fa8c4e29083a577db43c1051e3983b946c9442
|
7
|
+
data.tar.gz: 5004d43b141bf78fe02aedcc82fa038f00ad7a257fb0701a3a2db69cc0310859da6b23bca14a9dec123ce3c279ff152da939fba5f8bd70011ffb9c4ca5d0453b
|
data/lib/metricize/forwarder.rb
CHANGED
@@ -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 =
|
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
|
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
|
-
|
34
|
-
|
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
|
45
|
+
@redis.del @queue_name
|
40
46
|
end
|
41
47
|
|
42
48
|
def store_metrics(data)
|
data/lib/metricize/version.rb
CHANGED
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"
|
data/spec/lib/metricize_spec.rb
CHANGED
@@ -49,13 +49,23 @@ describe Metricize do
|
|
49
49
|
forwarder.go!
|
50
50
|
end
|
51
51
|
|
52
|
-
it "clears
|
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
|
+
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-
|
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
|