statsd-instrument 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/benchmark.yml +32 -0
- data/.github/workflows/ci.yml +24 -8
- data/.rubocop.yml +24 -0
- data/CHANGELOG.md +116 -3
- data/CONTRIBUTING.md +8 -6
- data/Gemfile +3 -0
- data/Rakefile +1 -1
- data/benchmark/README.md +29 -0
- data/benchmark/send-metrics-to-dev-null-log +47 -0
- data/benchmark/send-metrics-to-local-udp-receiver +57 -0
- data/lib/statsd/instrument.rb +126 -94
- data/lib/statsd/instrument/assertions.rb +69 -37
- data/lib/statsd/instrument/backends/capture_backend.rb +2 -0
- data/lib/statsd/instrument/helpers.rb +12 -8
- data/lib/statsd/instrument/metric.rb +56 -42
- data/lib/statsd/instrument/rubocop/metaprogramming_positional_arguments.rb +46 -0
- data/lib/statsd/instrument/rubocop/metric_return_value.rb +31 -0
- data/lib/statsd/instrument/rubocop/metric_value_keyword_argument.rb +45 -0
- data/lib/statsd/instrument/rubocop/positional_arguments.rb +99 -0
- data/lib/statsd/instrument/rubocop/splat_arguments.rb +37 -0
- data/lib/statsd/instrument/strict.rb +145 -0
- data/lib/statsd/instrument/version.rb +1 -1
- data/test/assertions_test.rb +37 -0
- data/test/benchmark/clock_gettime.rb +27 -0
- data/test/benchmark/default_tags.rb +1 -1
- data/test/deprecations_test.rb +86 -0
- data/test/helpers/rubocop_helper.rb +47 -0
- data/test/integration_test.rb +6 -2
- data/test/matchers_test.rb +9 -9
- data/test/metric_test.rb +3 -18
- data/test/rubocop/metaprogramming_positional_arguments_test.rb +58 -0
- data/test/rubocop/metric_return_value_test.rb +78 -0
- data/test/rubocop/metric_value_keyword_argument_test.rb +39 -0
- data/test/rubocop/positional_arguments_test.rb +110 -0
- data/test/rubocop/splat_arguments_test.rb +27 -0
- data/test/statsd_instrumentation_test.rb +77 -86
- data/test/statsd_test.rb +32 -65
- data/test/test_helper.rb +12 -1
- data/test/udp_backend_test.rb +8 -0
- metadata +28 -2
data/test/statsd_test.rb
CHANGED
@@ -15,9 +15,7 @@ class StatsDTest < Minitest::Test
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_statsd_measure_with_explicit_value
|
18
|
-
|
19
|
-
metric = capture_statsd_call { result = StatsD.measure('values.foobar', 42) }
|
20
|
-
assert_equal metric, result
|
18
|
+
metric = capture_statsd_call { StatsD.measure('values.foobar', 42) }
|
21
19
|
assert_equal 'values.foobar', metric.name
|
22
20
|
assert_equal 42, metric.value
|
23
21
|
assert_equal :ms, metric.type
|
@@ -28,20 +26,6 @@ class StatsDTest < Minitest::Test
|
|
28
26
|
assert_equal :d, metric.type
|
29
27
|
end
|
30
28
|
|
31
|
-
def test_statsd_measure_with_explicit_value_as_keyword_argument
|
32
|
-
result = nil
|
33
|
-
metric = capture_statsd_call { result = StatsD.measure('values.foobar', value: 42) }
|
34
|
-
assert_equal metric, result
|
35
|
-
assert_equal 'values.foobar', metric.name
|
36
|
-
assert_equal 42, metric.value
|
37
|
-
assert_equal :ms, metric.type
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_statsd_measure_with_explicit_value_keyword_and_distribution_override
|
41
|
-
metric = capture_statsd_call { StatsD.measure('values.foobar', value: 42, as_dist: true) }
|
42
|
-
assert_equal :d, metric.type
|
43
|
-
end
|
44
|
-
|
45
29
|
def test_statsd_measure_without_value_or_block
|
46
30
|
assert_raises(ArgumentError) { StatsD.measure('values.foobar', tags: 123) }
|
47
31
|
end
|
@@ -52,7 +36,7 @@ class StatsDTest < Minitest::Test
|
|
52
36
|
end
|
53
37
|
|
54
38
|
def test_statsd_measure_with_benchmarked_block_duration
|
55
|
-
|
39
|
+
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
56
40
|
metric = capture_statsd_call do
|
57
41
|
StatsD.measure('values.foobar') { 'foo' }
|
58
42
|
end
|
@@ -77,7 +61,7 @@ class StatsDTest < Minitest::Test
|
|
77
61
|
end
|
78
62
|
|
79
63
|
def test_statsd_measure_with_return_in_block_still_captures
|
80
|
-
|
64
|
+
Process.stubs(:clock_gettime).returns(5.0, 6.12)
|
81
65
|
result = nil
|
82
66
|
metric = capture_statsd_call do
|
83
67
|
lambda = -> do
|
@@ -92,7 +76,7 @@ class StatsDTest < Minitest::Test
|
|
92
76
|
end
|
93
77
|
|
94
78
|
def test_statsd_measure_with_exception_in_block_still_captures
|
95
|
-
|
79
|
+
Process.stubs(:clock_gettime).returns(5.0, 6.12)
|
96
80
|
result = nil
|
97
81
|
metric = capture_statsd_call do
|
98
82
|
lambda = -> do
|
@@ -110,9 +94,7 @@ class StatsDTest < Minitest::Test
|
|
110
94
|
end
|
111
95
|
|
112
96
|
def test_statsd_increment
|
113
|
-
|
114
|
-
metric = capture_statsd_call { result = StatsD.increment('values.foobar', 3) }
|
115
|
-
assert_equal metric, result
|
97
|
+
metric = capture_statsd_call { StatsD.increment('values.foobar', 3) }
|
116
98
|
assert_equal :c, metric.type
|
117
99
|
assert_equal 'values.foobar', metric.name
|
118
100
|
assert_equal 3, metric.value
|
@@ -125,83 +107,55 @@ class StatsDTest < Minitest::Test
|
|
125
107
|
assert_equal 1, metric.value
|
126
108
|
end
|
127
109
|
|
128
|
-
def test_statsd_increment_with_value_as_keyword_argument
|
129
|
-
metric = capture_statsd_call { StatsD.increment('values.foobar', value: 2) }
|
130
|
-
assert_equal StatsD.default_sample_rate, metric.sample_rate
|
131
|
-
assert_equal 2, metric.value
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_statsd_increment_with_multiple_arguments
|
135
|
-
metric = capture_statsd_call { StatsD.increment('values.foobar', 12, nil, ['test']) }
|
136
|
-
assert_equal StatsD.default_sample_rate, metric.sample_rate
|
137
|
-
assert_equal ['test'], metric.tags
|
138
|
-
assert_equal 12, metric.value
|
139
|
-
end
|
140
|
-
|
141
110
|
def test_statsd_gauge
|
142
|
-
|
143
|
-
metric = capture_statsd_call { result = StatsD.gauge('values.foobar', 12) }
|
144
|
-
assert_equal metric, result
|
111
|
+
metric = capture_statsd_call { StatsD.gauge('values.foobar', 12) }
|
145
112
|
assert_equal :g, metric.type
|
146
113
|
assert_equal 'values.foobar', metric.name
|
147
114
|
assert_equal 12, metric.value
|
148
115
|
end
|
149
116
|
|
150
|
-
def test_statsd_gauge_with_keyword_argument
|
151
|
-
result = nil
|
152
|
-
metric = capture_statsd_call { result = StatsD.gauge('values.foobar', value: 13) }
|
153
|
-
assert_equal metric, result
|
154
|
-
assert_equal :g, metric.type
|
155
|
-
assert_equal 'values.foobar', metric.name
|
156
|
-
assert_equal 13, metric.value
|
157
|
-
end
|
158
|
-
|
159
117
|
def test_statsd_gauge_without_value
|
160
118
|
assert_raises(ArgumentError) { StatsD.gauge('values.foobar', tags: 123) }
|
161
119
|
end
|
162
120
|
|
163
121
|
def test_statsd_set
|
164
|
-
|
165
|
-
metric = capture_statsd_call { result = StatsD.set('values.foobar', 'unique_identifier') }
|
166
|
-
assert_equal metric, result
|
122
|
+
metric = capture_statsd_call { StatsD.set('values.foobar', 'unique_identifier') }
|
167
123
|
assert_equal :s, metric.type
|
168
124
|
assert_equal 'values.foobar', metric.name
|
169
125
|
assert_equal 'unique_identifier', metric.value
|
170
126
|
end
|
171
127
|
|
172
128
|
def test_statsd_histogram
|
173
|
-
|
174
|
-
metric = capture_statsd_call { result = StatsD.histogram('values.foobar', 42) }
|
175
|
-
assert_equal metric, result
|
129
|
+
metric = capture_statsd_call { StatsD.histogram('values.foobar', 42) }
|
176
130
|
assert_equal :h, metric.type
|
177
131
|
assert_equal 'values.foobar', metric.name
|
178
132
|
assert_equal 42, metric.value
|
179
133
|
end
|
180
134
|
|
181
135
|
def test_statsd_distribution
|
182
|
-
|
183
|
-
metric = capture_statsd_call { result = StatsD.distribution('values.foobar', 42) }
|
184
|
-
assert_equal metric, result
|
136
|
+
metric = capture_statsd_call { StatsD.distribution('values.foobar', 42) }
|
185
137
|
assert_equal :d, metric.type
|
186
138
|
assert_equal 'values.foobar', metric.name
|
187
139
|
assert_equal 42, metric.value
|
188
140
|
end
|
189
141
|
|
190
142
|
def test_statsd_distribution_with_benchmarked_block_duration
|
191
|
-
|
143
|
+
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
192
144
|
metric = capture_statsd_call do
|
193
|
-
StatsD.distribution('values.foobar') { 'foo' }
|
145
|
+
result = StatsD.distribution('values.foobar') { 'foo' }
|
146
|
+
assert_equal 'foo', result
|
194
147
|
end
|
195
148
|
assert_equal :d, metric.type
|
196
149
|
assert_equal 1120.0, metric.value
|
197
150
|
end
|
198
151
|
|
199
152
|
def test_statsd_distribution_with_return_in_block_still_captures
|
200
|
-
|
153
|
+
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
201
154
|
result = nil
|
202
155
|
metric = capture_statsd_call do
|
203
156
|
lambda = -> do
|
204
157
|
StatsD.distribution('values.foobar') { return 'from lambda' }
|
158
|
+
flunk("This code should not be reached")
|
205
159
|
end
|
206
160
|
|
207
161
|
result = lambda.call
|
@@ -213,7 +167,7 @@ class StatsDTest < Minitest::Test
|
|
213
167
|
end
|
214
168
|
|
215
169
|
def test_statsd_distribution_with_exception_in_block_still_captures
|
216
|
-
|
170
|
+
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
217
171
|
result = nil
|
218
172
|
metric = capture_statsd_call do
|
219
173
|
lambda = -> do
|
@@ -232,7 +186,7 @@ class StatsDTest < Minitest::Test
|
|
232
186
|
end
|
233
187
|
|
234
188
|
def test_statsd_distribution_with_block_and_options
|
235
|
-
|
189
|
+
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
236
190
|
metric = capture_statsd_call do
|
237
191
|
StatsD.distribution('values.foobar', tags: ['test'], sample_rate: 0.9) { 'foo' }
|
238
192
|
end
|
@@ -253,9 +207,7 @@ class StatsDTest < Minitest::Test
|
|
253
207
|
end
|
254
208
|
|
255
209
|
def test_statsd_key_value
|
256
|
-
|
257
|
-
metric = capture_statsd_call { result = StatsD.key_value('values.foobar', 42) }
|
258
|
-
assert_equal metric, result
|
210
|
+
metric = capture_statsd_call { StatsD.key_value('values.foobar', 42) }
|
259
211
|
assert_equal :kv, metric.type
|
260
212
|
assert_equal 'values.foobar', metric.name
|
261
213
|
assert_equal 42, metric.value
|
@@ -277,6 +229,21 @@ class StatsDTest < Minitest::Test
|
|
277
229
|
assert_equal ['first_tag:first_value', 'second_tag:second_value'], StatsD.default_tags
|
278
230
|
end
|
279
231
|
|
232
|
+
def test_name_prefix
|
233
|
+
StatsD.stubs(:prefix).returns('prefix')
|
234
|
+
m = capture_statsd_call { StatsD.increment('counter') }
|
235
|
+
assert_equal 'prefix.counter', m.name
|
236
|
+
|
237
|
+
m = capture_statsd_call { StatsD.increment('counter', no_prefix: true) }
|
238
|
+
assert_equal 'counter', m.name
|
239
|
+
|
240
|
+
m = capture_statsd_call { StatsD.increment('counter', prefix: "foobar") }
|
241
|
+
assert_equal 'foobar.counter', m.name
|
242
|
+
|
243
|
+
m = capture_statsd_call { StatsD.increment('counter', prefix: "foobar", no_prefix: true) }
|
244
|
+
assert_equal 'counter', m.name
|
245
|
+
end
|
246
|
+
|
280
247
|
protected
|
281
248
|
|
282
249
|
def capture_statsd_call(&block)
|
data/test/test_helper.rb
CHANGED
@@ -9,4 +9,15 @@ require 'set'
|
|
9
9
|
require 'logger'
|
10
10
|
require 'statsd-instrument'
|
11
11
|
|
12
|
-
|
12
|
+
require_relative 'helpers/rubocop_helper'
|
13
|
+
|
14
|
+
require 'statsd/instrument/strict' if ENV['STATSD_STRICT_MODE']
|
15
|
+
|
16
|
+
module StatsD::Instrument
|
17
|
+
def self.strict_mode_enabled?
|
18
|
+
StatsD::Instrument.const_defined?(:Strict) &&
|
19
|
+
StatsD.singleton_class.ancestors.include?(StatsD::Instrument::Strict)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
StatsD.logger = Logger.new(File::NULL)
|
data/test/udp_backend_test.rb
CHANGED
@@ -148,11 +148,19 @@ class UDPBackendTest < Minitest::Test
|
|
148
148
|
StatsD.key_value('fooy', 42)
|
149
149
|
end
|
150
150
|
|
151
|
+
# For key_value metrics (only supported by statsite), the sample rate
|
152
|
+
# part of the datagram format is (ab)used to be set to a timestamp instead.
|
153
|
+
# Changing that to `sample_rate: timestamp` does not make sense, so we
|
154
|
+
# disable the rubocop rule for positional arguments for now,
|
155
|
+
# until we figure out how we want to handle this.
|
156
|
+
|
157
|
+
# rubocop:disable StatsD/PositionalArguments
|
151
158
|
def test_supports_key_value_with_timestamp_on_statsite
|
152
159
|
@backend.implementation = :statsite
|
153
160
|
@backend.expects(:write_packet).with("fooy:42|kv|@123456\n")
|
154
161
|
StatsD.key_value('fooy', 42, 123456)
|
155
162
|
end
|
163
|
+
# rubocop:enable StatsD/PositionalArguments
|
156
164
|
|
157
165
|
def test_warn_when_using_key_value_and_not_on_statsite
|
158
166
|
@backend.implementation = :other
|
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.
|
4
|
+
version: 2.5.0
|
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: 2019-09-
|
13
|
+
date: 2019-09-27 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|
@@ -120,6 +120,7 @@ extra_rdoc_files: []
|
|
120
120
|
files:
|
121
121
|
- ".github/CODEOWNERS"
|
122
122
|
- ".github/probots.yml"
|
123
|
+
- ".github/workflows/benchmark.yml"
|
123
124
|
- ".github/workflows/ci.yml"
|
124
125
|
- ".gitignore"
|
125
126
|
- ".rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml"
|
@@ -130,6 +131,9 @@ files:
|
|
130
131
|
- LICENSE
|
131
132
|
- README.md
|
132
133
|
- Rakefile
|
134
|
+
- benchmark/README.md
|
135
|
+
- benchmark/send-metrics-to-dev-null-log
|
136
|
+
- benchmark/send-metrics-to-local-udp-receiver
|
133
137
|
- lib/statsd-instrument.rb
|
134
138
|
- lib/statsd/instrument.rb
|
135
139
|
- lib/statsd/instrument/assertions.rb
|
@@ -144,20 +148,34 @@ files:
|
|
144
148
|
- lib/statsd/instrument/metric.rb
|
145
149
|
- lib/statsd/instrument/metric_expectation.rb
|
146
150
|
- lib/statsd/instrument/railtie.rb
|
151
|
+
- lib/statsd/instrument/rubocop/metaprogramming_positional_arguments.rb
|
152
|
+
- lib/statsd/instrument/rubocop/metric_return_value.rb
|
153
|
+
- lib/statsd/instrument/rubocop/metric_value_keyword_argument.rb
|
154
|
+
- lib/statsd/instrument/rubocop/positional_arguments.rb
|
155
|
+
- lib/statsd/instrument/rubocop/splat_arguments.rb
|
156
|
+
- lib/statsd/instrument/strict.rb
|
147
157
|
- lib/statsd/instrument/version.rb
|
148
158
|
- shipit.rubygems.yml
|
149
159
|
- statsd-instrument.gemspec
|
150
160
|
- test/assertions_test.rb
|
161
|
+
- test/benchmark/clock_gettime.rb
|
151
162
|
- test/benchmark/default_tags.rb
|
152
163
|
- test/benchmark/metrics.rb
|
153
164
|
- test/benchmark/tags.rb
|
154
165
|
- test/capture_backend_test.rb
|
166
|
+
- test/deprecations_test.rb
|
155
167
|
- test/environment_test.rb
|
168
|
+
- test/helpers/rubocop_helper.rb
|
156
169
|
- test/helpers_test.rb
|
157
170
|
- test/integration_test.rb
|
158
171
|
- test/logger_backend_test.rb
|
159
172
|
- test/matchers_test.rb
|
160
173
|
- test/metric_test.rb
|
174
|
+
- test/rubocop/metaprogramming_positional_arguments_test.rb
|
175
|
+
- test/rubocop/metric_return_value_test.rb
|
176
|
+
- test/rubocop/metric_value_keyword_argument_test.rb
|
177
|
+
- test/rubocop/positional_arguments_test.rb
|
178
|
+
- test/rubocop/splat_arguments_test.rb
|
161
179
|
- test/statsd_instrumentation_test.rb
|
162
180
|
- test/statsd_test.rb
|
163
181
|
- test/test_helper.rb
|
@@ -187,16 +205,24 @@ specification_version: 4
|
|
187
205
|
summary: A StatsD client for Ruby apps
|
188
206
|
test_files:
|
189
207
|
- test/assertions_test.rb
|
208
|
+
- test/benchmark/clock_gettime.rb
|
190
209
|
- test/benchmark/default_tags.rb
|
191
210
|
- test/benchmark/metrics.rb
|
192
211
|
- test/benchmark/tags.rb
|
193
212
|
- test/capture_backend_test.rb
|
213
|
+
- test/deprecations_test.rb
|
194
214
|
- test/environment_test.rb
|
215
|
+
- test/helpers/rubocop_helper.rb
|
195
216
|
- test/helpers_test.rb
|
196
217
|
- test/integration_test.rb
|
197
218
|
- test/logger_backend_test.rb
|
198
219
|
- test/matchers_test.rb
|
199
220
|
- test/metric_test.rb
|
221
|
+
- test/rubocop/metaprogramming_positional_arguments_test.rb
|
222
|
+
- test/rubocop/metric_return_value_test.rb
|
223
|
+
- test/rubocop/metric_value_keyword_argument_test.rb
|
224
|
+
- test/rubocop/positional_arguments_test.rb
|
225
|
+
- test/rubocop/splat_arguments_test.rb
|
200
226
|
- test/statsd_instrumentation_test.rb
|
201
227
|
- test/statsd_test.rb
|
202
228
|
- test/test_helper.rb
|