statsd-instrument 3.0.1 → 3.1.2
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/.github/workflows/lint.yml +22 -0
- data/.github/workflows/{ci.yml → tests.yml} +3 -21
- data/.rubocop.yml +2 -1
- data/CHANGELOG.md +18 -0
- data/Gemfile +8 -10
- data/README.md +7 -4
- data/Rakefile +6 -6
- data/benchmark/send-metrics-to-dev-null-log +14 -14
- data/benchmark/send-metrics-to-local-udp-receiver +18 -18
- data/lib/statsd/instrument/assertions.rb +7 -7
- data/lib/statsd/instrument/batched_udp_sink.rb +159 -0
- data/lib/statsd/instrument/client.rb +3 -3
- data/lib/statsd/instrument/datagram.rb +1 -1
- data/lib/statsd/instrument/datagram_builder.rb +10 -22
- data/lib/statsd/instrument/dogstatsd_datagram_builder.rb +2 -2
- data/lib/statsd/instrument/environment.rb +19 -11
- data/lib/statsd/instrument/expectation.rb +6 -18
- data/lib/statsd/instrument/matchers.rb +8 -4
- data/lib/statsd/instrument/railtie.rb +1 -1
- data/lib/statsd/instrument/rubocop/measure_as_dist_argument.rb +1 -1
- data/lib/statsd/instrument/rubocop/metaprogramming_positional_arguments.rb +2 -2
- data/lib/statsd/instrument/rubocop/metric_prefix_argument.rb +1 -1
- data/lib/statsd/instrument/rubocop/metric_return_value.rb +3 -3
- data/lib/statsd/instrument/rubocop/metric_value_keyword_argument.rb +1 -1
- data/lib/statsd/instrument/rubocop/positional_arguments.rb +4 -4
- data/lib/statsd/instrument/rubocop/singleton_configuration.rb +1 -1
- data/lib/statsd/instrument/rubocop/splat_arguments.rb +2 -2
- data/lib/statsd/instrument/rubocop.rb +13 -34
- data/lib/statsd/instrument/strict.rb +1 -1
- data/lib/statsd/instrument/udp_sink.rb +11 -13
- data/lib/statsd/instrument/version.rb +1 -1
- data/lib/statsd/instrument.rb +56 -59
- data/lib/statsd-instrument.rb +1 -1
- data/statsd-instrument.gemspec +2 -0
- data/test/assertions_test.rb +200 -155
- data/test/benchmark/clock_gettime.rb +1 -1
- data/test/benchmark/metrics.rb +8 -8
- data/test/benchmark/tags.rb +4 -4
- data/test/capture_sink_test.rb +11 -11
- data/test/client_test.rb +64 -64
- data/test/datagram_builder_test.rb +41 -41
- data/test/datagram_test.rb +5 -5
- data/test/dogstatsd_datagram_builder_test.rb +22 -22
- data/test/environment_test.rb +26 -17
- data/test/helpers/rubocop_helper.rb +3 -3
- data/test/helpers_test.rb +12 -12
- data/test/integration_test.rb +6 -6
- data/test/log_sink_test.rb +2 -2
- data/test/matchers_test.rb +46 -46
- data/test/null_sink_test.rb +2 -2
- data/test/rubocop/measure_as_dist_argument_test.rb +2 -2
- data/test/rubocop/metaprogramming_positional_arguments_test.rb +2 -2
- data/test/rubocop/metric_prefix_argument_test.rb +2 -2
- data/test/rubocop/metric_return_value_test.rb +3 -3
- data/test/rubocop/metric_value_keyword_argument_test.rb +3 -3
- data/test/rubocop/positional_arguments_test.rb +2 -2
- data/test/rubocop/singleton_configuration_test.rb +8 -8
- data/test/rubocop/splat_arguments_test.rb +2 -2
- data/test/statsd_datagram_builder_test.rb +6 -6
- data/test/statsd_instrumentation_test.rb +104 -104
- data/test/statsd_test.rb +35 -35
- data/test/test_helper.rb +13 -6
- data/test/udp_sink_test.rb +142 -44
- metadata +21 -7
- data/test/benchmark/default_tags.rb +0 -47
data/test/statsd_test.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "test_helper"
|
4
4
|
|
5
5
|
class StatsDTest < Minitest::Test
|
6
6
|
include StatsD::Instrument::Assertions
|
7
7
|
|
8
8
|
def test_statsd_measure_with_explicit_value
|
9
|
-
metric = capture_statsd_call { StatsD.measure(
|
10
|
-
assert_equal(
|
9
|
+
metric = capture_statsd_call { StatsD.measure("values.foobar", 42) }
|
10
|
+
assert_equal("values.foobar", metric.name)
|
11
11
|
assert_equal(42, metric.value)
|
12
12
|
assert_equal(:ms, metric.type)
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_statsd_measure_with_explicit_value_and_sample_rate
|
16
|
-
metric = capture_statsd_call { StatsD.measure(
|
16
|
+
metric = capture_statsd_call { StatsD.measure("values.foobar", 42, sample_rate: 0.1) }
|
17
17
|
assert_equal(0.1, metric.sample_rate)
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_statsd_measure_with_benchmarked_block_duration
|
21
21
|
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
22
22
|
metric = capture_statsd_call do
|
23
|
-
StatsD.measure(
|
23
|
+
StatsD.measure("values.foobar") { "foo" }
|
24
24
|
end
|
25
25
|
assert_equal(1120.0, metric.value)
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_statsd_measure_returns_return_value_of_block
|
29
|
-
return_value = StatsD.measure(
|
30
|
-
assert_equal(
|
29
|
+
return_value = StatsD.measure("values.foobar") { "sarah" }
|
30
|
+
assert_equal("sarah", return_value)
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_statsd_measure_with_return_in_block_still_captures
|
@@ -35,13 +35,13 @@ class StatsDTest < Minitest::Test
|
|
35
35
|
result = nil
|
36
36
|
metric = capture_statsd_call do
|
37
37
|
lambda = -> do
|
38
|
-
StatsD.measure(
|
38
|
+
StatsD.measure("values.foobar") { return "from lambda" }
|
39
39
|
end
|
40
40
|
|
41
41
|
result = lambda.call
|
42
42
|
end
|
43
43
|
|
44
|
-
assert_equal(
|
44
|
+
assert_equal("from lambda", result)
|
45
45
|
assert_equal(1120.0, metric.value)
|
46
46
|
end
|
47
47
|
|
@@ -50,7 +50,7 @@ class StatsDTest < Minitest::Test
|
|
50
50
|
result = nil
|
51
51
|
metric = capture_statsd_call do
|
52
52
|
lambda = -> do
|
53
|
-
StatsD.measure(
|
53
|
+
StatsD.measure("values.foobar") { raise "from lambda" }
|
54
54
|
end
|
55
55
|
|
56
56
|
begin
|
@@ -65,56 +65,56 @@ class StatsDTest < Minitest::Test
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def test_statsd_increment
|
68
|
-
metric = capture_statsd_call { StatsD.increment(
|
68
|
+
metric = capture_statsd_call { StatsD.increment("values.foobar", 3) }
|
69
69
|
assert_equal(:c, metric.type)
|
70
|
-
assert_equal(
|
70
|
+
assert_equal("values.foobar", metric.name)
|
71
71
|
assert_equal(3, metric.value)
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_statsd_increment_with_hash_argument
|
75
|
-
metric = capture_statsd_call { StatsD.increment(
|
75
|
+
metric = capture_statsd_call { StatsD.increment("values.foobar", tags: ["test"]) }
|
76
76
|
assert_equal(StatsD.singleton_client.default_sample_rate, metric.sample_rate)
|
77
|
-
assert_equal([
|
77
|
+
assert_equal(["test"], metric.tags)
|
78
78
|
assert_equal(1, metric.value)
|
79
79
|
end
|
80
80
|
|
81
81
|
def test_statsd_gauge
|
82
|
-
metric = capture_statsd_call { StatsD.gauge(
|
82
|
+
metric = capture_statsd_call { StatsD.gauge("values.foobar", 12) }
|
83
83
|
assert_equal(:g, metric.type)
|
84
|
-
assert_equal(
|
84
|
+
assert_equal("values.foobar", metric.name)
|
85
85
|
assert_equal(12, metric.value)
|
86
86
|
end
|
87
87
|
|
88
88
|
def test_statsd_gauge_without_value
|
89
|
-
assert_raises(ArgumentError) { StatsD.gauge(
|
89
|
+
assert_raises(ArgumentError) { StatsD.gauge("values.foobar") }
|
90
90
|
end
|
91
91
|
|
92
92
|
def test_statsd_set
|
93
|
-
metric = capture_statsd_call { StatsD.set(
|
93
|
+
metric = capture_statsd_call { StatsD.set("values.foobar", "unique_identifier") }
|
94
94
|
assert_equal(:s, metric.type)
|
95
|
-
assert_equal(
|
96
|
-
assert_equal(
|
95
|
+
assert_equal("values.foobar", metric.name)
|
96
|
+
assert_equal("unique_identifier", metric.value)
|
97
97
|
end
|
98
98
|
|
99
99
|
def test_statsd_histogram
|
100
|
-
metric = capture_statsd_call { StatsD.histogram(
|
100
|
+
metric = capture_statsd_call { StatsD.histogram("values.foobar", 42) }
|
101
101
|
assert_equal(:h, metric.type)
|
102
|
-
assert_equal(
|
102
|
+
assert_equal("values.foobar", metric.name)
|
103
103
|
assert_equal(42, metric.value)
|
104
104
|
end
|
105
105
|
|
106
106
|
def test_statsd_distribution
|
107
|
-
metric = capture_statsd_call { StatsD.distribution(
|
107
|
+
metric = capture_statsd_call { StatsD.distribution("values.foobar", 42) }
|
108
108
|
assert_equal(:d, metric.type)
|
109
|
-
assert_equal(
|
109
|
+
assert_equal("values.foobar", metric.name)
|
110
110
|
assert_equal(42, metric.value)
|
111
111
|
end
|
112
112
|
|
113
113
|
def test_statsd_distribution_with_benchmarked_block_duration
|
114
114
|
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
115
115
|
metric = capture_statsd_call do
|
116
|
-
result = StatsD.distribution(
|
117
|
-
assert_equal
|
116
|
+
result = StatsD.distribution("values.foobar") { "foo" }
|
117
|
+
assert_equal("foo", result)
|
118
118
|
end
|
119
119
|
assert_equal(:d, metric.type)
|
120
120
|
assert_equal(1120.0, metric.value)
|
@@ -125,14 +125,14 @@ class StatsDTest < Minitest::Test
|
|
125
125
|
result = nil
|
126
126
|
metric = capture_statsd_call do
|
127
127
|
lambda = -> do
|
128
|
-
StatsD.distribution(
|
128
|
+
StatsD.distribution("values.foobar") { return "from lambda" }
|
129
129
|
flunk("This code should not be reached")
|
130
130
|
end
|
131
131
|
|
132
132
|
result = lambda.call
|
133
133
|
end
|
134
134
|
|
135
|
-
assert_equal(
|
135
|
+
assert_equal("from lambda", result)
|
136
136
|
assert_equal(:d, metric.type)
|
137
137
|
assert_equal(1120.0, metric.value)
|
138
138
|
end
|
@@ -142,7 +142,7 @@ class StatsDTest < Minitest::Test
|
|
142
142
|
result = nil
|
143
143
|
metric = capture_statsd_call do
|
144
144
|
lambda = -> do
|
145
|
-
StatsD.distribution(
|
145
|
+
StatsD.distribution("values.foobar") { raise "from lambda" }
|
146
146
|
end
|
147
147
|
|
148
148
|
begin
|
@@ -160,21 +160,21 @@ class StatsDTest < Minitest::Test
|
|
160
160
|
def test_statsd_distribution_with_block_and_options
|
161
161
|
Process.stubs(:clock_gettime).returns(5.0, 5.0 + 1.12)
|
162
162
|
metric = capture_statsd_call do
|
163
|
-
StatsD.distribution(
|
163
|
+
StatsD.distribution("values.foobar", tags: ["test"], sample_rate: 0.9) { "foo" }
|
164
164
|
end
|
165
165
|
assert_equal(1120.0, metric.value)
|
166
|
-
assert_equal(
|
166
|
+
assert_equal("values.foobar", metric.name)
|
167
167
|
assert_equal(0.9, metric.sample_rate)
|
168
|
-
assert_equal([
|
168
|
+
assert_equal(["test"], metric.tags)
|
169
169
|
end
|
170
170
|
|
171
171
|
def test_statsd_distribution_returns_return_value_of_block
|
172
|
-
return_value = StatsD.distribution(
|
173
|
-
assert_equal(
|
172
|
+
return_value = StatsD.distribution("values.foobar") { "sarah" }
|
173
|
+
assert_equal("sarah", return_value)
|
174
174
|
end
|
175
175
|
|
176
176
|
def test_statsd_measure_returns_return_value_of_block_even_if_nil
|
177
|
-
return_value = StatsD.distribution(
|
177
|
+
return_value = StatsD.distribution("values.foobar") { nil }
|
178
178
|
assert_nil(return_value)
|
179
179
|
end
|
180
180
|
|
data/test/test_helper.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
if Warning.respond_to?(:[]=)
|
4
|
+
Warning[:deprecated] = true
|
5
|
+
end
|
6
|
+
|
7
|
+
ENV["ENV"] = "test"
|
4
8
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
+
require "minitest/autorun"
|
10
|
+
require "minitest/pride"
|
11
|
+
require "mocha/minitest"
|
12
|
+
require "statsd-instrument"
|
9
13
|
|
10
|
-
require_relative
|
14
|
+
require_relative "helpers/rubocop_helper"
|
11
15
|
|
12
16
|
module StatsD
|
13
17
|
module Instrument
|
@@ -19,3 +23,6 @@ module StatsD
|
|
19
23
|
end
|
20
24
|
|
21
25
|
StatsD.logger = Logger.new(File::NULL)
|
26
|
+
|
27
|
+
Thread.abort_on_exception = true
|
28
|
+
Thread.report_on_exception = true
|
data/test/udp_sink_test.rb
CHANGED
@@ -1,29 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
5
|
-
class UDPSinkTest < Minitest::Test
|
6
|
-
def setup
|
7
|
-
@receiver = UDPSocket.new
|
8
|
-
@receiver.bind('localhost', 0)
|
9
|
-
@host = @receiver.addr[2]
|
10
|
-
@port = @receiver.addr[1]
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
@receiver.close
|
15
|
-
end
|
3
|
+
require "test_helper"
|
16
4
|
|
5
|
+
module UDPSinkTests
|
17
6
|
def test_udp_sink_sends_data_over_udp
|
18
|
-
udp_sink =
|
19
|
-
udp_sink <<
|
7
|
+
udp_sink = build_sink(@host, @port)
|
8
|
+
udp_sink << "foo:1|c"
|
20
9
|
|
21
10
|
datagram, _source = @receiver.recvfrom(100)
|
22
|
-
assert_equal(
|
11
|
+
assert_equal("foo:1|c", datagram)
|
12
|
+
end
|
13
|
+
|
14
|
+
def large_datagram
|
15
|
+
datagram = "#{"a" * 1000}:1|c"
|
16
|
+
udp_sink = build_sink(@host, @port)
|
17
|
+
udp_sink << datagram
|
18
|
+
|
19
|
+
datagram, _source = @receiver.recvfrom(1500)
|
20
|
+
assert_equal(datagram, datagram)
|
23
21
|
end
|
24
22
|
|
25
23
|
def test_sample?
|
26
|
-
udp_sink =
|
24
|
+
udp_sink = build_sink(@host, @port)
|
27
25
|
assert(udp_sink.sample?(1))
|
28
26
|
refute(udp_sink.sample?(0))
|
29
27
|
|
@@ -35,49 +33,149 @@ class UDPSinkTest < Minitest::Test
|
|
35
33
|
end
|
36
34
|
|
37
35
|
def test_parallelism
|
38
|
-
udp_sink =
|
39
|
-
50.times { |i| Thread.new { udp_sink << "foo:#{i}|c" << "bar:#{i}|c" } }
|
36
|
+
udp_sink = build_sink(@host, @port)
|
37
|
+
50.times.map { |i| Thread.new { udp_sink << "foo:#{i}|c" << "bar:#{i}|c" } }
|
40
38
|
datagrams = []
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
|
40
|
+
while @receiver.wait_readable(2)
|
41
|
+
datagram, _source = @receiver.recvfrom(4000)
|
42
|
+
datagrams += datagram.split("\n")
|
44
43
|
end
|
45
44
|
|
46
45
|
assert_equal(100, datagrams.size)
|
47
46
|
end
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
socket.expects(:connect).with('localhost', 8125).in_sequence(seq)
|
54
|
-
socket.expects(:send).raises(Errno::EDESTADDRREQ).in_sequence(seq)
|
55
|
-
socket.expects(:connect).with('localhost', 8125).in_sequence(seq)
|
56
|
-
socket.expects(:send).returns(1).in_sequence(seq)
|
57
|
-
|
58
|
-
udp_sink = StatsD::Instrument::UDPSink.new('localhost', 8125)
|
59
|
-
udp_sink << 'foo:1|c'
|
60
|
-
udp_sink << 'bar:1|c'
|
48
|
+
class SimpleFormatter < ::Logger::Formatter
|
49
|
+
def call(_severity, _timestamp, _progname, msg)
|
50
|
+
"#{String === msg ? msg : msg.inspect}\n"
|
51
|
+
end
|
61
52
|
end
|
62
53
|
|
63
54
|
def test_sends_datagram_in_signal_handler
|
64
|
-
udp_sink =
|
65
|
-
|
66
|
-
Signal.trap('TERM') do
|
67
|
-
udp_sink << "exiting:1|c"
|
68
|
-
Process.exit!(0)
|
69
|
-
end
|
55
|
+
udp_sink = build_sink(@host, @port)
|
56
|
+
Signal.trap("USR1") { udp_sink << "exiting:1|c" }
|
70
57
|
|
71
|
-
|
58
|
+
pid = fork do
|
59
|
+
sleep(5)
|
72
60
|
end
|
73
61
|
|
74
|
-
|
75
|
-
_, exit_status = Process.waitpid2(pid)
|
62
|
+
Signal.trap("USR1", "DEFAULT")
|
76
63
|
|
77
|
-
|
64
|
+
Process.kill("USR1", pid)
|
65
|
+
@receiver.wait_readable(1)
|
78
66
|
assert_equal("exiting:1|c", @receiver.recvfrom_nonblock(100).first)
|
67
|
+
Process.kill("KILL", pid)
|
68
|
+
rescue NotImplementedError
|
69
|
+
pass("Fork is not implemented on #{RUBY_PLATFORM}")
|
70
|
+
end
|
79
71
|
|
72
|
+
def test_sends_datagram_before_exit
|
73
|
+
udp_sink = build_sink(@host, @port)
|
74
|
+
fork do
|
75
|
+
udp_sink << "exiting:1|c"
|
76
|
+
Process.exit(0)
|
77
|
+
end
|
78
|
+
|
79
|
+
@receiver.wait_readable(1)
|
80
|
+
assert_equal("exiting:1|c", @receiver.recvfrom_nonblock(100).first)
|
81
|
+
rescue NotImplementedError
|
82
|
+
pass("Fork is not implemented on #{RUBY_PLATFORM}")
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_sends_datagram_when_termed
|
86
|
+
udp_sink = build_sink(@host, @port)
|
87
|
+
fork do
|
88
|
+
udp_sink << "exiting:1|c"
|
89
|
+
Process.kill("TERM", Process.pid)
|
90
|
+
end
|
91
|
+
|
92
|
+
@receiver.wait_readable(1)
|
93
|
+
assert_equal("exiting:1|c", @receiver.recvfrom_nonblock(100).first)
|
80
94
|
rescue NotImplementedError
|
81
95
|
pass("Fork is not implemented on #{RUBY_PLATFORM}")
|
82
96
|
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
def build_sink(host = @host, port = @port)
|
101
|
+
@sink_class.new(host, port)
|
102
|
+
end
|
103
|
+
|
104
|
+
class UDPSinkTest < Minitest::Test
|
105
|
+
include UDPSinkTests
|
106
|
+
|
107
|
+
def setup
|
108
|
+
@receiver = UDPSocket.new
|
109
|
+
@receiver.bind("localhost", 0)
|
110
|
+
@host = @receiver.addr[2]
|
111
|
+
@port = @receiver.addr[1]
|
112
|
+
@sink_class = StatsD::Instrument::UDPSink
|
113
|
+
end
|
114
|
+
|
115
|
+
def teardown
|
116
|
+
@receiver.close
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_socket_error_should_invalidate_socket
|
120
|
+
previous_logger = StatsD.logger
|
121
|
+
begin
|
122
|
+
logs = StringIO.new
|
123
|
+
StatsD.logger = Logger.new(logs)
|
124
|
+
StatsD.logger.formatter = SimpleFormatter.new
|
125
|
+
UDPSocket.stubs(:new).returns(socket = mock("socket"))
|
126
|
+
|
127
|
+
seq = sequence("connect_fail_connect_succeed")
|
128
|
+
socket.expects(:connect).with("localhost", 8125).in_sequence(seq)
|
129
|
+
socket.expects(:send).raises(Errno::EDESTADDRREQ).in_sequence(seq)
|
130
|
+
socket.expects(:connect).with("localhost", 8125).in_sequence(seq)
|
131
|
+
socket.expects(:send).returns(1).in_sequence(seq)
|
132
|
+
|
133
|
+
udp_sink = build_sink("localhost", 8125)
|
134
|
+
udp_sink << "foo:1|c"
|
135
|
+
udp_sink << "bar:1|c"
|
136
|
+
|
137
|
+
assert_equal(
|
138
|
+
"[#{@sink_class}] Resetting connection because of " \
|
139
|
+
"Errno::EDESTADDRREQ: Destination address required\n",
|
140
|
+
logs.string,
|
141
|
+
)
|
142
|
+
ensure
|
143
|
+
StatsD.logger = previous_logger
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
class BatchedUDPSinkTest < Minitest::Test
|
149
|
+
include UDPSinkTests
|
150
|
+
|
151
|
+
def setup
|
152
|
+
@receiver = UDPSocket.new
|
153
|
+
@receiver.bind("localhost", 0)
|
154
|
+
@host = @receiver.addr[2]
|
155
|
+
@port = @receiver.addr[1]
|
156
|
+
@sink_class = StatsD::Instrument::BatchedUDPSink
|
157
|
+
end
|
158
|
+
|
159
|
+
def teardown
|
160
|
+
@receiver.close
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_parallelism_buffering
|
164
|
+
udp_sink = build_sink(@host, @port)
|
165
|
+
50.times.map do |i|
|
166
|
+
Thread.new do
|
167
|
+
udp_sink << "foo:#{i}|c" << "bar:#{i}|c" << "baz:#{i}|c" << "plop:#{i}|c"
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
datagrams = []
|
172
|
+
|
173
|
+
while @receiver.wait_readable(2)
|
174
|
+
datagram, _source = @receiver.recvfrom(1000)
|
175
|
+
datagrams += datagram.split("\n")
|
176
|
+
end
|
177
|
+
|
178
|
+
assert_equal(200, datagrams.size)
|
179
|
+
end
|
180
|
+
end
|
83
181
|
end
|
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: 3.
|
4
|
+
version: 3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesse Storimer
|
@@ -10,8 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
14
|
-
dependencies:
|
13
|
+
date: 2021-09-02 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: concurrent-ruby
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
15
29
|
description: A StatsD client for Ruby apps. Provides metaprogramming methods to inject
|
16
30
|
StatsD instrumentation into your code.
|
17
31
|
email:
|
@@ -23,7 +37,8 @@ files:
|
|
23
37
|
- ".github/CODEOWNERS"
|
24
38
|
- ".github/probots.yml"
|
25
39
|
- ".github/workflows/benchmark.yml"
|
26
|
-
- ".github/workflows/
|
40
|
+
- ".github/workflows/lint.yml"
|
41
|
+
- ".github/workflows/tests.yml"
|
27
42
|
- ".gitignore"
|
28
43
|
- ".rubocop.yml"
|
29
44
|
- ".yardopts"
|
@@ -41,6 +56,7 @@ files:
|
|
41
56
|
- lib/statsd-instrument.rb
|
42
57
|
- lib/statsd/instrument.rb
|
43
58
|
- lib/statsd/instrument/assertions.rb
|
59
|
+
- lib/statsd/instrument/batched_udp_sink.rb
|
44
60
|
- lib/statsd/instrument/capture_sink.rb
|
45
61
|
- lib/statsd/instrument/client.rb
|
46
62
|
- lib/statsd/instrument/datagram.rb
|
@@ -71,7 +87,6 @@ files:
|
|
71
87
|
- statsd-instrument.gemspec
|
72
88
|
- test/assertions_test.rb
|
73
89
|
- test/benchmark/clock_gettime.rb
|
74
|
-
- test/benchmark/default_tags.rb
|
75
90
|
- test/benchmark/metrics.rb
|
76
91
|
- test/benchmark/tags.rb
|
77
92
|
- test/capture_sink_test.rb
|
@@ -119,14 +134,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
134
|
- !ruby/object:Gem::Version
|
120
135
|
version: '0'
|
121
136
|
requirements: []
|
122
|
-
rubygems_version: 3.
|
137
|
+
rubygems_version: 3.2.20
|
123
138
|
signing_key:
|
124
139
|
specification_version: 4
|
125
140
|
summary: A StatsD client for Ruby apps
|
126
141
|
test_files:
|
127
142
|
- test/assertions_test.rb
|
128
143
|
- test/benchmark/clock_gettime.rb
|
129
|
-
- test/benchmark/default_tags.rb
|
130
144
|
- test/benchmark/metrics.rb
|
131
145
|
- test/benchmark/tags.rb
|
132
146
|
- test/capture_sink_test.rb
|