statsd-instrument 2.3.2 → 2.3.4
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/CHANGELOG.md +28 -0
- data/CONTRIBUTING.md +1 -1
- data/lib/statsd/instrument.rb +24 -18
- data/lib/statsd/instrument/backends/udp_backend.rb +2 -2
- data/lib/statsd/instrument/metric.rb +1 -1
- data/lib/statsd/instrument/version.rb +1 -1
- data/test/statsd_test.rb +73 -3
- data/test/udp_backend_test.rb +2 -2
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8076b4d86af6ed043e664abf288c4d33a89d324017eeb1a8ae230266352cb9c
|
4
|
+
data.tar.gz: a56269d70cbca5d0788838f96e9515f92cf93b1330d3ef826620c1af5ae0ba72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e922ee94f9bcbf22390cc9ac2e740a539fb63b162d77529d4a32bb058de5e047de8519808457d86f744519fccd9ae639a6c20d022d67f6845add5769af10356
|
7
|
+
data.tar.gz: 50f3c7a81c69d5b26196f38d4716d03b24dbc52147c6c2894edf41dd4e7d7efa7fdc725d4f669213327121eca9d0e771469d3aa4d6b20bb86252d30b5a5b57e9
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,34 @@ please at an entry to the "unreleased changes" section below.
|
|
5
5
|
|
6
6
|
### Unreleased changes
|
7
7
|
|
8
|
+
## Version 2.3.4
|
9
|
+
|
10
|
+
- Improve performance of `Metric#to_s` (#152)
|
11
|
+
- Fix bug in escaping newlines for events with Datadog Backend (#153)
|
12
|
+
|
13
|
+
## Version 2.3.3
|
14
|
+
|
15
|
+
- Capture measure and distribution metrics on exception and early return (#134)
|
16
|
+
|
17
|
+
NOTE: Now that exceptions are measured statistics may behave differently. An exception example:
|
18
|
+
```
|
19
|
+
StatsD.measure('myhttpcall') do
|
20
|
+
my_http_object.invoke
|
21
|
+
end
|
22
|
+
```
|
23
|
+
Version 2.3.2 and below did not track metrics whenever a HTTP Timeout exception was raised.
|
24
|
+
2.3.3 and above will include those metrics which may increase the values included.
|
25
|
+
|
26
|
+
A return example:
|
27
|
+
```
|
28
|
+
StatsD.measure('myexpensivecalculation') do
|
29
|
+
return if expensive_calculation_disabled?
|
30
|
+
expensive_calculation
|
31
|
+
end
|
32
|
+
```
|
33
|
+
If `expensive_calculation_disabled?` is true 50% of the time version 2.3.2 will drop the
|
34
|
+
average metric considerably.
|
35
|
+
|
8
36
|
## Version 2.3.2
|
9
37
|
|
10
38
|
- Add option to override global prefix for metrics (#148)
|
data/CONTRIBUTING.md
CHANGED
@@ -11,7 +11,7 @@ This project is MIT licensed.
|
|
11
11
|
|
12
12
|
Report issues using the [Github issues tracker](https://github.com/Shopify/statsd-instrument/issues/new).
|
13
13
|
|
14
|
-
When reporting issues, please
|
14
|
+
When reporting issues, please include the following information:
|
15
15
|
|
16
16
|
- Your Ruby interpreter version.
|
17
17
|
- The statsd-instrument version. **Note:** only the latest version is supported.
|
data/lib/statsd/instrument.rb
CHANGED
@@ -58,17 +58,13 @@ module StatsD
|
|
58
58
|
|
59
59
|
if Process.respond_to?(:clock_gettime)
|
60
60
|
# @private
|
61
|
-
def self.
|
62
|
-
|
63
|
-
yield
|
64
|
-
Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
|
61
|
+
def self.current_timestamp
|
62
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
65
63
|
end
|
66
64
|
else
|
67
65
|
# @private
|
68
|
-
def self.
|
69
|
-
|
70
|
-
yield
|
71
|
-
Time.now - start
|
66
|
+
def self.current_timestamp
|
67
|
+
Time.now
|
72
68
|
end
|
73
69
|
end
|
74
70
|
|
@@ -310,11 +306,16 @@ module StatsD
|
|
310
306
|
value, metric_options = parse_options(value, metric_options)
|
311
307
|
type = (!metric_options.empty? && metric_options.first[:as_dist] ? :d : :ms)
|
312
308
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
309
|
+
return collect_metric(type, key, value, metric_options) unless block_given?
|
310
|
+
|
311
|
+
start = StatsD::Instrument.current_timestamp
|
312
|
+
begin
|
313
|
+
block.call
|
314
|
+
ensure
|
315
|
+
# Ensure catches both a raised exception and a return in the invoked block
|
316
|
+
value = 1000 * (StatsD::Instrument.current_timestamp - start)
|
317
|
+
collect_metric(type, key, value, metric_options)
|
318
|
+
end
|
318
319
|
end
|
319
320
|
|
320
321
|
# Emits a counter metric.
|
@@ -373,11 +374,16 @@ module StatsD
|
|
373
374
|
# end
|
374
375
|
def distribution(key, value=nil, *metric_options, &block)
|
375
376
|
value, metric_options = parse_options(value, metric_options)
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
377
|
+
|
378
|
+
return collect_metric(:d, key, value, metric_options) unless block_given?
|
379
|
+
|
380
|
+
start = StatsD::Instrument.current_timestamp
|
381
|
+
begin
|
382
|
+
block.call
|
383
|
+
ensure
|
384
|
+
value = 1000 * (StatsD::Instrument.current_timestamp - start)
|
385
|
+
collect_metric(:d, key, value, metric_options)
|
386
|
+
end
|
381
387
|
end
|
382
388
|
|
383
389
|
# Emits a key/value metric.
|
@@ -27,8 +27,8 @@ module StatsD::Instrument::Backends
|
|
27
27
|
packet = ""
|
28
28
|
|
29
29
|
if metric.type == :_e
|
30
|
-
escaped_title = metric.name.
|
31
|
-
escaped_text = metric.value.
|
30
|
+
escaped_title = metric.name.gsub("\n", "\\n")
|
31
|
+
escaped_text = metric.value.gsub("\n", "\\n")
|
32
32
|
|
33
33
|
packet << "_e{#{escaped_title.size},#{escaped_text.size}}:#{escaped_title}|#{escaped_text}"
|
34
34
|
packet << generate_metadata(metric, EVENT_OPTIONS)
|
@@ -83,7 +83,7 @@ class StatsD::Instrument::Metric
|
|
83
83
|
def to_s
|
84
84
|
str = "#{TYPES[type]} #{name}:#{value}"
|
85
85
|
str << " @#{sample_rate}" if sample_rate != 1.0
|
86
|
-
|
86
|
+
tags.each { |tag| str << " ##{tag}" } if tags
|
87
87
|
str
|
88
88
|
end
|
89
89
|
|
data/test/statsd_test.rb
CHANGED
@@ -46,7 +46,7 @@ class StatsDTest < Minitest::Test
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_statsd_measure_with_benchmarked_block_duration
|
49
|
-
StatsD::Instrument.stubs(:
|
49
|
+
StatsD::Instrument.stubs(:current_timestamp).returns(5.0, 5.0 + 1.12)
|
50
50
|
metric = capture_statsd_call do
|
51
51
|
StatsD.measure('values.foobar') { 'foo' }
|
52
52
|
end
|
@@ -70,6 +70,40 @@ class StatsDTest < Minitest::Test
|
|
70
70
|
assert_nil return_value
|
71
71
|
end
|
72
72
|
|
73
|
+
def test_statsd_measure_with_return_in_block_still_captures
|
74
|
+
StatsD::Instrument.stubs(:current_timestamp).returns(5.0, 6.12)
|
75
|
+
result = nil
|
76
|
+
metric = capture_statsd_call do
|
77
|
+
lambda = -> do
|
78
|
+
StatsD.measure('values.foobar') { return 'from lambda'}
|
79
|
+
end
|
80
|
+
|
81
|
+
result = lambda.call
|
82
|
+
end
|
83
|
+
|
84
|
+
assert_equal 'from lambda', result
|
85
|
+
assert_equal 1120.0, metric.value
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_statsd_measure_with_exception_in_block_still_captures
|
89
|
+
StatsD::Instrument.stubs(:current_timestamp).returns(5.0, 6.12)
|
90
|
+
result = nil
|
91
|
+
metric = capture_statsd_call do
|
92
|
+
lambda = -> do
|
93
|
+
StatsD.measure('values.foobar') { raise 'from lambda'}
|
94
|
+
end
|
95
|
+
|
96
|
+
begin
|
97
|
+
result = lambda.call
|
98
|
+
rescue
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
assert_nil result
|
104
|
+
assert_equal 1120.0, metric.value
|
105
|
+
end
|
106
|
+
|
73
107
|
def test_statsd_increment
|
74
108
|
result = nil
|
75
109
|
metric = capture_statsd_call { result = StatsD.increment('values.foobar', 3) }
|
@@ -149,7 +183,7 @@ class StatsDTest < Minitest::Test
|
|
149
183
|
end
|
150
184
|
|
151
185
|
def test_statsd_distribution_with_benchmarked_block_duration
|
152
|
-
StatsD::Instrument.stubs(:
|
186
|
+
StatsD::Instrument.stubs(:current_timestamp).returns(5.0, 5.0 + 1.12)
|
153
187
|
metric = capture_statsd_call do
|
154
188
|
StatsD.distribution('values.foobar') { 'foo' }
|
155
189
|
end
|
@@ -157,8 +191,44 @@ class StatsDTest < Minitest::Test
|
|
157
191
|
assert_equal 1120.0, metric.value
|
158
192
|
end
|
159
193
|
|
194
|
+
def test_statsd_distribution_with_return_in_block_still_captures
|
195
|
+
StatsD::Instrument.stubs(:current_timestamp).returns(5.0, 5.0 + 1.12)
|
196
|
+
result = nil
|
197
|
+
metric = capture_statsd_call do
|
198
|
+
lambda = -> do
|
199
|
+
StatsD.distribution('values.foobar') { return 'from lambda'}
|
200
|
+
end
|
201
|
+
|
202
|
+
result = lambda.call
|
203
|
+
end
|
204
|
+
|
205
|
+
assert_equal 'from lambda', result
|
206
|
+
assert_equal :d, metric.type
|
207
|
+
assert_equal 1120.0, metric.value
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_statsd_distribution_with_exception_in_block_still_captures
|
211
|
+
StatsD::Instrument.stubs(:current_timestamp).returns(5.0, 5.0 + 1.12)
|
212
|
+
result = nil
|
213
|
+
metric = capture_statsd_call do
|
214
|
+
lambda = -> do
|
215
|
+
StatsD.distribution('values.foobar') { raise 'from lambda'}
|
216
|
+
end
|
217
|
+
|
218
|
+
begin
|
219
|
+
result = lambda.call
|
220
|
+
rescue
|
221
|
+
end
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
assert_nil result
|
226
|
+
assert_equal :d, metric.type
|
227
|
+
assert_equal 1120.0, metric.value
|
228
|
+
end
|
229
|
+
|
160
230
|
def test_statsd_distribution_with_block_and_options
|
161
|
-
StatsD::Instrument.stubs(:
|
231
|
+
StatsD::Instrument.stubs(:current_timestamp).returns(5.0, 5.0 + 1.12)
|
162
232
|
metric = capture_statsd_call do
|
163
233
|
StatsD.distribution('values.foobar', :tags => ['test'], :sample_rate => 0.9) { 'foo' }
|
164
234
|
end
|
data/test/udp_backend_test.rb
CHANGED
@@ -90,8 +90,8 @@ class UDPBackendTest < Minitest::Test
|
|
90
90
|
|
91
91
|
def test_event_on_datadog_escapes_newlines
|
92
92
|
@backend.implementation = :datadog
|
93
|
-
@backend.expects(:write_packet).with(
|
94
|
-
StatsD.event(
|
93
|
+
@backend.expects(:write_packet).with("_e{8,5}:fooh\\n\\n|baz\\n")
|
94
|
+
StatsD.event("fooh\n\n", "baz\n")
|
95
95
|
end
|
96
96
|
|
97
97
|
def test_event_on_datadog_ignores_invalid_metadata
|
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: 2.3.
|
4
|
+
version: 2.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesse Storimer
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-09-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -163,8 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
163
|
- !ruby/object:Gem::Version
|
164
164
|
version: '0'
|
165
165
|
requirements: []
|
166
|
-
|
167
|
-
rubygems_version: 2.7.6
|
166
|
+
rubygems_version: 3.0.3
|
168
167
|
signing_key:
|
169
168
|
specification_version: 4
|
170
169
|
summary: A StatsD client for Ruby apps
|