statsd-instrument 1.0.0 → 1.0.1
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.
- data/LICENSE +20 -0
- data/README.md +4 -4
- data/lib/statsd/instrument.rb +5 -20
- data/statsd-instrument.gemspec +1 -1
- data/test/statsd-instrument_test.rb +22 -20
- metadata +6 -5
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Shopify
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ For Shopify, our retention periods are:
|
|
12
12
|
2. 60 seconds of granularity for the last week
|
13
13
|
3. 10 minutes of granularity for the last 5 years
|
14
14
|
|
15
|
-
This is the same as what Etsy uses (mentioned in the README for
|
15
|
+
This is the same as what Etsy uses (mentioned in the README for http://github.com/etsy/statsd).
|
16
16
|
|
17
17
|
## Configuration
|
18
18
|
|
@@ -99,7 +99,7 @@ So now, if GoogleBase#insert raises an exception or returns false (ie. result ==
|
|
99
99
|
|
100
100
|
``` ruby
|
101
101
|
GoogleBase.statsd_count_if :insert, 'GoogleBase.insert' do |response|
|
102
|
-
|
102
|
+
response.code == 200
|
103
103
|
end
|
104
104
|
```
|
105
105
|
|
@@ -118,8 +118,8 @@ So if this method fails execution (raises or returns false) we'll increment the
|
|
118
118
|
Again you can pass a block to define what success means.
|
119
119
|
|
120
120
|
``` ruby
|
121
|
-
GoogleBase.
|
122
|
-
|
121
|
+
GoogleBase.statsd_count_success :insert, 'GoogleBase.insert' do |response|
|
122
|
+
response.code == 200
|
123
123
|
end
|
124
124
|
```
|
125
125
|
|
data/lib/statsd/instrument.rb
CHANGED
@@ -6,9 +6,6 @@ module StatsD
|
|
6
6
|
end
|
7
7
|
self.enabled = true
|
8
8
|
|
9
|
-
trap("TTOU") { self.enabled = false }
|
10
|
-
trap("TTIN") { self.enabled = true }
|
11
|
-
|
12
9
|
# StatsD.server = 'localhost:1234'
|
13
10
|
def self.server=(conn)
|
14
11
|
self.host, port = conn.split(':')
|
@@ -19,7 +16,7 @@ module StatsD
|
|
19
16
|
def statsd_measure(method, name)
|
20
17
|
add_to_method(method, name, :measure) do |old_method, new_method, metric_name, *args|
|
21
18
|
define_method(new_method) do |*args|
|
22
|
-
StatsD.measure(
|
19
|
+
StatsD.measure(metric_name) { send(old_method, *args) }
|
23
20
|
end
|
24
21
|
end
|
25
22
|
end
|
@@ -36,7 +33,7 @@ module StatsD
|
|
36
33
|
truthiness = (yield(result) rescue false) if block_given?
|
37
34
|
result
|
38
35
|
ensure
|
39
|
-
StatsD.increment("#{
|
36
|
+
StatsD.increment("#{metric_name}." + (truthiness == false ? 'failure' : 'success'))
|
40
37
|
end
|
41
38
|
end
|
42
39
|
end
|
@@ -54,7 +51,7 @@ module StatsD
|
|
54
51
|
truthiness = (yield(result) rescue false) if block_given?
|
55
52
|
result
|
56
53
|
ensure
|
57
|
-
StatsD.increment(
|
54
|
+
StatsD.increment(metric_name) if truthiness
|
58
55
|
end
|
59
56
|
end
|
60
57
|
end
|
@@ -63,27 +60,15 @@ module StatsD
|
|
63
60
|
def statsd_count(method, name)
|
64
61
|
add_to_method(method, name, :count) do |old_method, new_method, metric_name|
|
65
62
|
define_method(new_method) do |*args|
|
66
|
-
StatsD.increment(
|
63
|
+
StatsD.increment(metric_name)
|
67
64
|
send(old_method, *args)
|
68
65
|
end
|
69
66
|
end
|
70
67
|
end
|
71
68
|
|
72
69
|
private
|
73
|
-
def statsd_memoize(metric_name, name)
|
74
|
-
define_method(metric_name) do
|
75
|
-
name = eval("\"#{name}\"", binding)
|
76
|
-
|
77
|
-
self.class.send(:define_method, metric_name) do
|
78
|
-
name
|
79
|
-
end
|
80
|
-
send(metric_name)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
70
|
def add_to_method(method, name, action, &block)
|
85
|
-
metric_name =
|
86
|
-
statsd_memoize(metric_name, name)
|
71
|
+
metric_name = name
|
87
72
|
|
88
73
|
method_name_without_statsd = :"#{method}_for_#{action}_on_#{self.name}_without_#{name}"
|
89
74
|
# raw_ssl_request_for_measure_on_FedEx_without_ActiveMerchant.Shipping.#{self.class.name}.ssl_request
|
data/statsd-instrument.gemspec
CHANGED
@@ -23,6 +23,14 @@ class ActiveMerchant::Gateway < ActiveMerchant::Base
|
|
23
23
|
rescue
|
24
24
|
false
|
25
25
|
end
|
26
|
+
|
27
|
+
def self.sync
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.singleton_class
|
32
|
+
class << self; self; end
|
33
|
+
end
|
26
34
|
end
|
27
35
|
|
28
36
|
class ActiveMerchant::UniqueGateway < ActiveMerchant::Base
|
@@ -43,7 +51,7 @@ class StatsDTest < Test::Unit::TestCase
|
|
43
51
|
end
|
44
52
|
|
45
53
|
def test_statsd_count_if
|
46
|
-
ActiveMerchant::Gateway.statsd_count_if :ssl_post, 'ActiveMerchant.
|
54
|
+
ActiveMerchant::Gateway.statsd_count_if :ssl_post, 'ActiveMerchant.Gateway.if'
|
47
55
|
|
48
56
|
StatsD.expects(:increment).with(includes('if')).once
|
49
57
|
ActiveMerchant::Gateway.new.purchase(true)
|
@@ -51,7 +59,7 @@ class StatsDTest < Test::Unit::TestCase
|
|
51
59
|
end
|
52
60
|
|
53
61
|
def test_statsd_count_if_with_block
|
54
|
-
ActiveMerchant::UniqueGateway.statsd_count_if :ssl_post, 'ActiveMerchant.
|
62
|
+
ActiveMerchant::UniqueGateway.statsd_count_if :ssl_post, 'ActiveMerchant.Gateway.block' do |result|
|
55
63
|
result[:success]
|
56
64
|
end
|
57
65
|
|
@@ -61,7 +69,7 @@ class StatsDTest < Test::Unit::TestCase
|
|
61
69
|
end
|
62
70
|
|
63
71
|
def test_statsd_count_success
|
64
|
-
ActiveMerchant::Gateway.statsd_count_success :ssl_post, 'ActiveMerchant.
|
72
|
+
ActiveMerchant::Gateway.statsd_count_success :ssl_post, 'ActiveMerchant.Gateway'
|
65
73
|
|
66
74
|
StatsD.expects(:increment).with(includes('success'))
|
67
75
|
ActiveMerchant::Gateway.new.purchase(true)
|
@@ -71,7 +79,7 @@ class StatsDTest < Test::Unit::TestCase
|
|
71
79
|
end
|
72
80
|
|
73
81
|
def test_statsd_count_success_with_block
|
74
|
-
ActiveMerchant::UniqueGateway.statsd_count_success :ssl_post, 'ActiveMerchant.
|
82
|
+
ActiveMerchant::UniqueGateway.statsd_count_success :ssl_post, 'ActiveMerchant.Gateway' do |result|
|
75
83
|
result[:success]
|
76
84
|
end
|
77
85
|
|
@@ -83,19 +91,27 @@ class StatsDTest < Test::Unit::TestCase
|
|
83
91
|
end
|
84
92
|
|
85
93
|
def test_statsd_count
|
86
|
-
ActiveMerchant::Gateway.statsd_count :ssl_post, 'ActiveMerchant.
|
94
|
+
ActiveMerchant::Gateway.statsd_count :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
|
87
95
|
|
88
96
|
StatsD.expects(:increment).with(includes('ssl_post'))
|
89
97
|
ActiveMerchant::Gateway.new.purchase(true)
|
90
98
|
end
|
91
99
|
|
92
100
|
def test_statsd_measure
|
93
|
-
ActiveMerchant::UniqueGateway.statsd_measure :ssl_post, 'ActiveMerchant.
|
101
|
+
ActiveMerchant::UniqueGateway.statsd_measure :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
|
94
102
|
|
95
103
|
StatsD.expects(:measure).with(includes('ssl_post')).returns({:success => true})
|
96
104
|
ActiveMerchant::UniqueGateway.new.purchase(true)
|
97
105
|
end
|
98
106
|
|
107
|
+
def test_instrumenting_class_method
|
108
|
+
ActiveMerchant::Gateway.singleton_class.extend StatsD::Instrument
|
109
|
+
ActiveMerchant::Gateway.singleton_class.statsd_count :sync, 'ActiveMerchant.Gateway.sync'
|
110
|
+
|
111
|
+
StatsD.expects(:increment).with(includes('sync'))
|
112
|
+
ActiveMerchant::Gateway.sync
|
113
|
+
end
|
114
|
+
|
99
115
|
def test_count_with_sampling
|
100
116
|
StatsD.unstub(:increment)
|
101
117
|
StatsD.stubs(:rand).returns(0.6)
|
@@ -131,18 +147,4 @@ class StatsDTest < Test::Unit::TestCase
|
|
131
147
|
StatsD.increment('fooz')
|
132
148
|
StatsD.enabled = true
|
133
149
|
end
|
134
|
-
|
135
|
-
def test_receiving_TTOU_should_disable
|
136
|
-
Process.kill("TTOU", $$)
|
137
|
-
sleep 0.5
|
138
|
-
assert !StatsD.enabled
|
139
|
-
end
|
140
|
-
|
141
|
-
def test_receiving_TTIN_should_disable
|
142
|
-
StatsD.enabled = false
|
143
|
-
|
144
|
-
Process.kill("TTIN", $$)
|
145
|
-
sleep 0.5
|
146
|
-
assert StatsD.enabled
|
147
|
-
end
|
148
150
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statsd-instrument
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jesse Storimer
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-08-15 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -44,6 +44,7 @@ extra_rdoc_files: []
|
|
44
44
|
files:
|
45
45
|
- .gitignore
|
46
46
|
- Gemfile
|
47
|
+
- LICENSE
|
47
48
|
- README.md
|
48
49
|
- Rakefile
|
49
50
|
- lib/statsd-instrument.rb
|
@@ -80,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
81
|
requirements: []
|
81
82
|
|
82
83
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.
|
84
|
+
rubygems_version: 1.6.2
|
84
85
|
signing_key:
|
85
86
|
specification_version: 3
|
86
87
|
summary: A StatsD client for Ruby apps
|