statsd-instrument 1.2.0 → 1.3.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.
- data/README.md +1 -1
- data/lib/statsd/instrument.rb +19 -16
- data/statsd-instrument.gemspec +1 -1
- data/test/statsd-instrument_test.rb +65 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# StatsD client for Ruby apps
|
2
2
|
|
3
|
-

|
3
|
+
[](https://secure.travis-ci.org/Shopify/statsd-instrument)
|
4
4
|
|
5
5
|
This is a ruby client for statsd (http://github.com/etsy/statsd). It provides a lightweight way to track and measure metrics in your application.
|
6
6
|
|
data/lib/statsd/instrument.rb
CHANGED
@@ -12,11 +12,12 @@ end
|
|
12
12
|
module StatsD
|
13
13
|
class << self
|
14
14
|
attr_accessor :host, :port, :mode, :logger, :enabled, :default_sample_rate,
|
15
|
-
:prefix
|
15
|
+
:prefix, :implementation
|
16
16
|
end
|
17
17
|
self.enabled = true
|
18
18
|
self.default_sample_rate = 1
|
19
|
-
|
19
|
+
self.implementation = :statsd
|
20
|
+
|
20
21
|
TimeoutClass = defined?(::SystemTimer) ? ::SystemTimer : ::Timeout
|
21
22
|
|
22
23
|
# StatsD.server = 'localhost:1234'
|
@@ -28,17 +29,17 @@ module StatsD
|
|
28
29
|
module Instrument
|
29
30
|
def statsd_measure(method, name)
|
30
31
|
add_to_method(method, name, :measure) do |old_method, new_method, metric_name, *args|
|
31
|
-
define_method(new_method) do |*args|
|
32
|
-
StatsD.measure(metric_name) { send(old_method, *args) }
|
32
|
+
define_method(new_method) do |*args, &block|
|
33
|
+
StatsD.measure(metric_name) { send(old_method, *args, &block) }
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
38
|
def statsd_count_success(method, name)
|
38
39
|
add_to_method(method, name, :count_success) do |old_method, new_method, metric_name|
|
39
|
-
define_method(new_method) do |*args|
|
40
|
+
define_method(new_method) do |*args, &block|
|
40
41
|
begin
|
41
|
-
truthiness = result = send(old_method, *args)
|
42
|
+
truthiness = result = send(old_method, *args, &block)
|
42
43
|
rescue
|
43
44
|
truthiness = false
|
44
45
|
raise
|
@@ -54,9 +55,9 @@ module StatsD
|
|
54
55
|
|
55
56
|
def statsd_count_if(method, name)
|
56
57
|
add_to_method(method, name, :count_if) do |old_method, new_method, metric_name|
|
57
|
-
define_method(new_method) do |*args|
|
58
|
+
define_method(new_method) do |*args, &block|
|
58
59
|
begin
|
59
|
-
truthiness = result = send(old_method, *args)
|
60
|
+
truthiness = result = send(old_method, *args, &block)
|
60
61
|
rescue
|
61
62
|
truthiness = false
|
62
63
|
raise
|
@@ -72,9 +73,9 @@ module StatsD
|
|
72
73
|
|
73
74
|
def statsd_count(method, name)
|
74
75
|
add_to_method(method, name, :count) do |old_method, new_method, metric_name|
|
75
|
-
define_method(new_method) do |*args|
|
76
|
+
define_method(new_method) do |*args, &block|
|
76
77
|
StatsD.increment(metric_name)
|
77
|
-
send(old_method, *args)
|
78
|
+
send(old_method, *args, &block)
|
78
79
|
end
|
79
80
|
end
|
80
81
|
end
|
@@ -102,7 +103,7 @@ module StatsD
|
|
102
103
|
def self.measure(key, milli = nil)
|
103
104
|
result = nil
|
104
105
|
ms = milli || Benchmark.ms do
|
105
|
-
result = yield
|
106
|
+
result = yield
|
106
107
|
end
|
107
108
|
|
108
109
|
write(key, ms, :ms)
|
@@ -114,9 +115,10 @@ module StatsD
|
|
114
115
|
write(key, delta, :incr, sample_rate)
|
115
116
|
end
|
116
117
|
|
117
|
-
#gaugor:333|g
|
118
|
-
|
119
|
-
|
118
|
+
# gaugor:333|g
|
119
|
+
# guagor:1234|kv|@1339864935 (statsite)
|
120
|
+
def self.gauge(key, value, sample_rate_or_epoch = default_sample_rate)
|
121
|
+
write(key, value, :g, sample_rate_or_epoch)
|
120
122
|
end
|
121
123
|
|
122
124
|
private
|
@@ -136,10 +138,11 @@ module StatsD
|
|
136
138
|
when :ms
|
137
139
|
command << '|ms'
|
138
140
|
when :g
|
139
|
-
command << '|g'
|
141
|
+
command << (self.implementation == :statsite ? '|kv' : '|g')
|
140
142
|
end
|
141
143
|
|
142
|
-
command << "|@#{sample_rate}" if sample_rate < 1
|
144
|
+
command << "|@#{sample_rate}" if sample_rate < 1 || (self.implementation == :statsite && sample_rate > 1)
|
145
|
+
command << "\n" if self.implementation == :statsite
|
143
146
|
|
144
147
|
if mode.to_s == 'production'
|
145
148
|
socket_wrapper { socket.send(command, 0, host, port) }
|
data/statsd-instrument.gemspec
CHANGED
@@ -20,6 +20,10 @@ class ActiveMerchant::Base
|
|
20
20
|
raise 'Not OK'
|
21
21
|
end
|
22
22
|
end
|
23
|
+
|
24
|
+
def post_with_block(&block)
|
25
|
+
yield if block_given?
|
26
|
+
end
|
23
27
|
end
|
24
28
|
|
25
29
|
class ActiveMerchant::Gateway < ActiveMerchant::Base
|
@@ -32,7 +36,7 @@ class ActiveMerchant::Gateway < ActiveMerchant::Base
|
|
32
36
|
|
33
37
|
def self.sync
|
34
38
|
true
|
35
|
-
end
|
39
|
+
end
|
36
40
|
|
37
41
|
def self.singleton_class
|
38
42
|
class << self; self; end
|
@@ -65,6 +69,16 @@ class StatsDTest < Test::Unit::TestCase
|
|
65
69
|
ActiveMerchant::Gateway.new.purchase(false)
|
66
70
|
end
|
67
71
|
|
72
|
+
def test_statsd_count_if_with_method_receiving_block
|
73
|
+
ActiveMerchant::Base.statsd_count_if :post_with_block, 'ActiveMerchant.Base.post_with_block' do |result|
|
74
|
+
result[:success]
|
75
|
+
end
|
76
|
+
|
77
|
+
return_value = ActiveMerchant::Base.new.post_with_block {'block called'}
|
78
|
+
|
79
|
+
assert_equal 'block called', return_value
|
80
|
+
end
|
81
|
+
|
68
82
|
def test_statsd_count_if_with_block
|
69
83
|
ActiveMerchant::UniqueGateway.statsd_count_if :ssl_post, 'ActiveMerchant.Gateway.block' do |result|
|
70
84
|
result[:success]
|
@@ -85,6 +99,16 @@ class StatsDTest < Test::Unit::TestCase
|
|
85
99
|
ActiveMerchant::Gateway.new.purchase(false)
|
86
100
|
end
|
87
101
|
|
102
|
+
def test_statsd_count_success_with_method_receiving_block
|
103
|
+
ActiveMerchant::Base.statsd_count_success :post_with_block, 'ActiveMerchant.Base.post_with_block' do |result|
|
104
|
+
result[:success]
|
105
|
+
end
|
106
|
+
|
107
|
+
return_value = ActiveMerchant::Base.new.post_with_block {'block called'}
|
108
|
+
|
109
|
+
assert_equal 'block called', return_value
|
110
|
+
end
|
111
|
+
|
88
112
|
def test_statsd_count_success_with_block
|
89
113
|
ActiveMerchant::UniqueGateway.statsd_count_success :ssl_post, 'ActiveMerchant.Gateway' do |result|
|
90
114
|
result[:success]
|
@@ -104,6 +128,14 @@ class StatsDTest < Test::Unit::TestCase
|
|
104
128
|
ActiveMerchant::Gateway.new.purchase(true)
|
105
129
|
end
|
106
130
|
|
131
|
+
def test_statsd_count_with_method_receiving_block
|
132
|
+
ActiveMerchant::Base.statsd_count :post_with_block, 'ActiveMerchant.Base.post_with_block'
|
133
|
+
|
134
|
+
return_value = ActiveMerchant::Base.new.post_with_block {'block called'}
|
135
|
+
|
136
|
+
assert_equal 'block called', return_value
|
137
|
+
end
|
138
|
+
|
107
139
|
def test_statsd_measure
|
108
140
|
ActiveMerchant::UniqueGateway.statsd_measure :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
|
109
141
|
|
@@ -111,6 +143,14 @@ class StatsDTest < Test::Unit::TestCase
|
|
111
143
|
ActiveMerchant::UniqueGateway.new.purchase(true)
|
112
144
|
end
|
113
145
|
|
146
|
+
def test_statsd_measure_with_method_receiving_block
|
147
|
+
ActiveMerchant::Base.statsd_measure :post_with_block, 'ActiveMerchant.Base.post_with_block'
|
148
|
+
|
149
|
+
return_value = ActiveMerchant::Base.new.post_with_block {'block called'}
|
150
|
+
|
151
|
+
assert_equal 'block called', return_value
|
152
|
+
end
|
153
|
+
|
114
154
|
def test_instrumenting_class_method
|
115
155
|
ActiveMerchant::Gateway.singleton_class.extend StatsD::Instrument
|
116
156
|
ActiveMerchant::Gateway.singleton_class.statsd_count :sync, 'ActiveMerchant.Gateway.sync'
|
@@ -159,6 +199,30 @@ class StatsDTest < Test::Unit::TestCase
|
|
159
199
|
StatsD.gauge('fooy', 42)
|
160
200
|
end
|
161
201
|
|
202
|
+
def test_write_supports_statsite_gauge_syntax
|
203
|
+
StatsD.unstub(:gauge)
|
204
|
+
|
205
|
+
StatsD.mode = :production
|
206
|
+
StatsD.server = 'localhost:123'
|
207
|
+
StatsD.implementation = :statsite
|
208
|
+
|
209
|
+
UDPSocket.any_instance.expects(:send).with("fooy:42|kv\n", 0, 'localhost', 123)
|
210
|
+
|
211
|
+
StatsD.gauge('fooy', 42)
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_write_supports_statsite_gauge_timestamp
|
215
|
+
StatsD.unstub(:gauge)
|
216
|
+
|
217
|
+
StatsD.mode = :production
|
218
|
+
StatsD.server = 'localhost:123'
|
219
|
+
StatsD.implementation = :statsite
|
220
|
+
|
221
|
+
UDPSocket.any_instance.expects(:send).with("fooy:42|kv|@123456\n", 0, 'localhost', 123)
|
222
|
+
|
223
|
+
StatsD.gauge('fooy', 42, 123456)
|
224
|
+
end
|
225
|
+
|
162
226
|
def test_should_not_write_when_disabled
|
163
227
|
StatsD.enabled = false
|
164
228
|
StatsD.expects(:logger).never
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statsd-instrument
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mocha
|
16
|
-
requirement: &
|
16
|
+
requirement: &2173609220 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2173609220
|
25
25
|
description: A StatsD client for Ruby apps. Provides metaprogramming methods to inject
|
26
26
|
StatsD instrumentation into your code.
|
27
27
|
email:
|