statsd-instrument 3.1.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 +1 -1
- data/.rubocop.yml +2 -1
- data/CHANGELOG.md +4 -0
- data/README.md +3 -3
- data/benchmark/send-metrics-to-dev-null-log +2 -2
- data/benchmark/send-metrics-to-local-udp-receiver +2 -2
- data/lib/statsd/instrument/assertions.rb +6 -6
- data/lib/statsd/instrument/batched_udp_sink.rb +1 -1
- data/lib/statsd/instrument/datagram_builder.rb +0 -12
- data/lib/statsd/instrument/expectation.rb +2 -14
- data/lib/statsd/instrument/rubocop/metric_return_value.rb +1 -1
- data/lib/statsd/instrument/rubocop.rb +5 -26
- data/lib/statsd/instrument/udp_sink.rb +1 -1
- data/lib/statsd/instrument/version.rb +1 -1
- data/test/assertions_test.rb +13 -0
- data/test/datagram_builder_test.rb +1 -1
- data/test/statsd_instrumentation_test.rb +1 -1
- metadata +3 -5
- data/test/benchmark/default_tags.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85b73b161dac9bc8839c3b820e9ea038d05078519fca692e971a48be7077e799
|
4
|
+
data.tar.gz: e2d5bfa763a5d53537494c8a5006327a93967d4d2b63f74a685094c551815c81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6db90f921635692d1d19145e3b346029886022c679649fac3e6f5641411ddc557fcd2028baff7be4e0b47a23e53f97e4afe9af4ecb7e537dc0850b32352fbec
|
7
|
+
data.tar.gz: 6c8f12361a70596d49dc84b3feb6637bc0ff7e9d62f1e6e7876ec02111cc94a2b561947ac4bfda045f612f57951f9789e578447e67a0b8bda4beec4f0fc76576
|
data/.github/workflows/lint.yml
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# StatsD client for Ruby apps
|
2
2
|
|
3
|
-
This is a ruby client for statsd (
|
3
|
+
This is a ruby client for statsd (https://github.com/statsd/statsd). It provides
|
4
4
|
a lightweight way to track and measure metrics in your application.
|
5
5
|
|
6
6
|
We call out to statsd by sending data over a UDP socket. UDP sockets are fast,
|
@@ -10,8 +10,8 @@ because it means your code doesn't get bogged down trying to log statistics.
|
|
10
10
|
We send data to statsd several times per request and haven't noticed a
|
11
11
|
performance hit.
|
12
12
|
|
13
|
-
For more information about StatsD, see the [README of the
|
14
|
-
project](
|
13
|
+
For more information about StatsD, see the [README of the StatsD
|
14
|
+
project](https://github.com/statsd/statsd).
|
15
15
|
|
16
16
|
## Configuration
|
17
17
|
|
@@ -6,8 +6,8 @@ require "tmpdir"
|
|
6
6
|
require "benchmark/ips"
|
7
7
|
|
8
8
|
revision = %x(git rev-parse HEAD).rstrip
|
9
|
-
|
10
|
-
branch = if revision ==
|
9
|
+
base_revision = %x(git rev-parse origin/master).rstrip
|
10
|
+
branch = if revision == base_revision
|
11
11
|
"master"
|
12
12
|
else
|
13
13
|
%x(git rev-parse --abbrev-ref HEAD).rstrip
|
@@ -8,8 +8,8 @@ require "socket"
|
|
8
8
|
require "statsd-instrument"
|
9
9
|
|
10
10
|
revision = %x(git rev-parse HEAD).rstrip
|
11
|
-
|
12
|
-
branch = if revision ==
|
11
|
+
base_revision = %x(git rev-parse origin/master).rstrip
|
12
|
+
branch = if revision == base_revision
|
13
13
|
"master"
|
14
14
|
else
|
15
15
|
%x(git rev-parse --abbrev-ref HEAD).rstrip
|
@@ -74,7 +74,7 @@ module StatsD
|
|
74
74
|
# @raise [Minitest::Assertion] If an exception occurs, or if the metric did
|
75
75
|
# not occur as specified during the execution the block.
|
76
76
|
def assert_statsd_increment(metric_name, value = nil, datagrams: nil, client: nil, **options, &block)
|
77
|
-
expectation = StatsD::Instrument::Expectation.increment(metric_name, value, **options)
|
77
|
+
expectation = StatsD::Instrument::Expectation.increment(metric_name, value, client: client, **options)
|
78
78
|
assert_statsd_expectation(expectation, datagrams: datagrams, client: client, &block)
|
79
79
|
end
|
80
80
|
|
@@ -86,7 +86,7 @@ module StatsD
|
|
86
86
|
# @return [void]
|
87
87
|
# @raise (see #assert_statsd_increment)
|
88
88
|
def assert_statsd_measure(metric_name, value = nil, datagrams: nil, client: nil, **options, &block)
|
89
|
-
expectation = StatsD::Instrument::Expectation.measure(metric_name, value, **options)
|
89
|
+
expectation = StatsD::Instrument::Expectation.measure(metric_name, value, client: client, **options)
|
90
90
|
assert_statsd_expectation(expectation, datagrams: datagrams, client: client, &block)
|
91
91
|
end
|
92
92
|
|
@@ -98,7 +98,7 @@ module StatsD
|
|
98
98
|
# @return [void]
|
99
99
|
# @raise (see #assert_statsd_increment)
|
100
100
|
def assert_statsd_gauge(metric_name, value = nil, datagrams: nil, client: nil, **options, &block)
|
101
|
-
expectation = StatsD::Instrument::Expectation.gauge(metric_name, value, **options)
|
101
|
+
expectation = StatsD::Instrument::Expectation.gauge(metric_name, value, client: client, **options)
|
102
102
|
assert_statsd_expectation(expectation, datagrams: datagrams, client: client, &block)
|
103
103
|
end
|
104
104
|
|
@@ -110,7 +110,7 @@ module StatsD
|
|
110
110
|
# @return [void]
|
111
111
|
# @raise (see #assert_statsd_increment)
|
112
112
|
def assert_statsd_histogram(metric_name, value = nil, datagrams: nil, client: nil, **options, &block)
|
113
|
-
expectation = StatsD::Instrument::Expectation.histogram(metric_name, value, **options)
|
113
|
+
expectation = StatsD::Instrument::Expectation.histogram(metric_name, value, client: client, **options)
|
114
114
|
assert_statsd_expectation(expectation, datagrams: datagrams, client: client, &block)
|
115
115
|
end
|
116
116
|
|
@@ -122,7 +122,7 @@ module StatsD
|
|
122
122
|
# @return [void]
|
123
123
|
# @raise (see #assert_statsd_increment)
|
124
124
|
def assert_statsd_distribution(metric_name, value = nil, datagrams: nil, client: nil, **options, &block)
|
125
|
-
expectation = StatsD::Instrument::Expectation.distribution(metric_name, value, **options)
|
125
|
+
expectation = StatsD::Instrument::Expectation.distribution(metric_name, value, client: client, **options)
|
126
126
|
assert_statsd_expectation(expectation, datagrams: datagrams, client: client, &block)
|
127
127
|
end
|
128
128
|
|
@@ -134,7 +134,7 @@ module StatsD
|
|
134
134
|
# @return [void]
|
135
135
|
# @raise (see #assert_statsd_increment)
|
136
136
|
def assert_statsd_set(metric_name, value = nil, datagrams: nil, client: nil, **options, &block)
|
137
|
-
expectation = StatsD::Instrument::Expectation.set(metric_name, value, **options)
|
137
|
+
expectation = StatsD::Instrument::Expectation.set(metric_name, value, client: client, **options)
|
138
138
|
assert_statsd_expectation(expectation, datagrams: datagrams, client: client, &block)
|
139
139
|
end
|
140
140
|
|
@@ -5,18 +5,6 @@ module StatsD
|
|
5
5
|
# @note This class is part of the new Client implementation that is intended
|
6
6
|
# to become the new default in the next major release of this library.
|
7
7
|
class DatagramBuilder
|
8
|
-
unless Regexp.method_defined?(:match?) # for ruby 2.3
|
9
|
-
module RubyBackports
|
10
|
-
refine Regexp do
|
11
|
-
def match?(str)
|
12
|
-
match(str) != nil
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
using(RubyBackports)
|
18
|
-
end
|
19
|
-
|
20
8
|
def self.unsupported_datagram_types(*types)
|
21
9
|
types.each do |type|
|
22
10
|
define_method(type) do |_, _, _, _|
|
@@ -32,9 +32,10 @@ module StatsD
|
|
32
32
|
|
33
33
|
attr_accessor :times, :type, :name, :value, :sample_rate, :tags
|
34
34
|
|
35
|
-
def initialize(client:
|
35
|
+
def initialize(client: nil, type:, name:, value: nil,
|
36
36
|
sample_rate: nil, tags: nil, no_prefix: false, times: 1)
|
37
37
|
|
38
|
+
client ||= StatsD.singleton_client
|
38
39
|
@type = type
|
39
40
|
@name = no_prefix || !client.prefix ? name : "#{client.prefix}.#{name}"
|
40
41
|
@value = normalized_value_for_type(type, value) if value
|
@@ -78,19 +79,6 @@ module StatsD
|
|
78
79
|
|
79
80
|
private
|
80
81
|
|
81
|
-
# Needed for normalize_tags
|
82
|
-
unless Regexp.method_defined?(:match?) # for ruby 2.3
|
83
|
-
module RubyBackports
|
84
|
-
refine Regexp do
|
85
|
-
def match?(str)
|
86
|
-
(self =~ str) != nil
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
using(RubyBackports)
|
92
|
-
end
|
93
|
-
|
94
82
|
# @private
|
95
83
|
#
|
96
84
|
# Utility function to convert tags to the canonical form.
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
|
20
20
|
MSG = "Do not use the return value of StatsD metric methods"
|
21
21
|
|
22
|
-
INVALID_PARENTS =
|
22
|
+
INVALID_PARENTS = [:lvasgn, :array, :pair, :send, :return, :yield]
|
23
23
|
|
24
24
|
def on_send(node)
|
25
25
|
if metric_method?(node) && node.arguments.last&.type != :block_pass
|
@@ -3,34 +3,13 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module StatsD
|
6
|
-
METRIC_METHODS =
|
7
|
-
increment
|
8
|
-
gauge
|
9
|
-
measure
|
10
|
-
set
|
11
|
-
histogram
|
12
|
-
distribution
|
13
|
-
key_value
|
14
|
-
}
|
6
|
+
METRIC_METHODS = [:increment, :gauge, :measure, :set, :histogram, :distribution, :key_value]
|
15
7
|
|
16
|
-
METAPROGRAMMING_METHODS =
|
17
|
-
|
18
|
-
statsd_distribution
|
19
|
-
statsd_count_success
|
20
|
-
statsd_count_if
|
21
|
-
statsd_count
|
22
|
-
}
|
8
|
+
METAPROGRAMMING_METHODS = [:statsd_measure, :statsd_distribution, :statsd_count_success, :statsd_count_if,
|
9
|
+
:statsd_count,]
|
23
10
|
|
24
|
-
SINGLETON_CONFIGURATION_METHODS =
|
25
|
-
|
26
|
-
backend=
|
27
|
-
prefix
|
28
|
-
prefix=
|
29
|
-
default_tags
|
30
|
-
default_tags=
|
31
|
-
default_sample_rate
|
32
|
-
default_sample_rate=
|
33
|
-
}
|
11
|
+
SINGLETON_CONFIGURATION_METHODS = [:backend, :"backend=", :prefix, :"prefix=", :default_tags, :"default_tags=",
|
12
|
+
:default_sample_rate, :"default_sample_rate=",]
|
34
13
|
|
35
14
|
private
|
36
15
|
|
data/test/assertions_test.rb
CHANGED
@@ -440,4 +440,17 @@ class AssertionsTest < Minitest::Test
|
|
440
440
|
StatsD.increment("incr", no_prefix: true)
|
441
441
|
end
|
442
442
|
end
|
443
|
+
|
444
|
+
def test_client_propagation_to_expectations
|
445
|
+
foo_1_metric = StatsD::Instrument::Expectation.increment("foo")
|
446
|
+
@test_case.assert_statsd_expectations([foo_1_metric]) do
|
447
|
+
StatsD.increment("foo")
|
448
|
+
end
|
449
|
+
|
450
|
+
client = StatsD::Instrument::Client.new(prefix: "prefix")
|
451
|
+
foo_2_metric = StatsD::Instrument::Expectation.increment("foo", client: client)
|
452
|
+
@test_case.assert_statsd_expectations([foo_2_metric]) do
|
453
|
+
StatsD.increment("prefix.foo")
|
454
|
+
end
|
455
|
+
end
|
443
456
|
end
|
@@ -16,7 +16,7 @@ class DatagramBuilderTest < Minitest::Test
|
|
16
16
|
|
17
17
|
def test_normalize_unsupported_tag_names
|
18
18
|
assert_equal(["ign#ored"], @datagram_builder.send(:normalize_tags, ["ign#o|re,d"]))
|
19
|
-
#
|
19
|
+
# NOTE: how this is interpreted by the backend is undefined.
|
20
20
|
# We rely on the user to not do stuff like this if they don't want to be surprised.
|
21
21
|
# We do not want to take the performance hit of normalizing this.
|
22
22
|
assert_equal(["lol::class:omg::lol"], @datagram_builder.send(:normalize_tags, "lol::class" => "omg::lol"))
|
@@ -345,7 +345,7 @@ class StatsDInstrumentationTest < Minitest::Test
|
|
345
345
|
client = StatsD::Instrument::Client.new(prefix: "prefix")
|
346
346
|
|
347
347
|
ActiveMerchant::Gateway.statsd_count(:ssl_post, "ActiveMerchant.Gateway.ssl_post", client: client)
|
348
|
-
assert_statsd_increment("
|
348
|
+
assert_statsd_increment("ActiveMerchant.Gateway.ssl_post", client: client) do
|
349
349
|
ActiveMerchant::Gateway.new.purchase(true)
|
350
350
|
end
|
351
351
|
ensure
|
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.1.
|
4
|
+
version: 3.1.2
|
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: 2021-
|
13
|
+
date: 2021-09-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: concurrent-ruby
|
@@ -87,7 +87,6 @@ files:
|
|
87
87
|
- statsd-instrument.gemspec
|
88
88
|
- test/assertions_test.rb
|
89
89
|
- test/benchmark/clock_gettime.rb
|
90
|
-
- test/benchmark/default_tags.rb
|
91
90
|
- test/benchmark/metrics.rb
|
92
91
|
- test/benchmark/tags.rb
|
93
92
|
- test/capture_sink_test.rb
|
@@ -135,14 +134,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
134
|
- !ruby/object:Gem::Version
|
136
135
|
version: '0'
|
137
136
|
requirements: []
|
138
|
-
rubygems_version: 3.
|
137
|
+
rubygems_version: 3.2.20
|
139
138
|
signing_key:
|
140
139
|
specification_version: 4
|
141
140
|
summary: A StatsD client for Ruby apps
|
142
141
|
test_files:
|
143
142
|
- test/assertions_test.rb
|
144
143
|
- test/benchmark/clock_gettime.rb
|
145
|
-
- test/benchmark/default_tags.rb
|
146
144
|
- test/benchmark/metrics.rb
|
147
145
|
- test/benchmark/tags.rb
|
148
146
|
- test/capture_sink_test.rb
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "statsd-instrument"
|
4
|
-
require "benchmark/ips"
|
5
|
-
|
6
|
-
StatsD.logger = Logger.new(File::NULL)
|
7
|
-
|
8
|
-
class Suite
|
9
|
-
def warming(*args)
|
10
|
-
StatsD.default_tags = if args[0] == "with default tags"
|
11
|
-
{ first_tag: "first_value", second_tag: "second_value" }
|
12
|
-
end
|
13
|
-
puts "warming with default tags: #{StatsD.default_tags}"
|
14
|
-
end
|
15
|
-
|
16
|
-
def running(*args)
|
17
|
-
StatsD.default_tags = if args[0] == "with default tags"
|
18
|
-
{ first_tag: "first_value", second_tag: "second_value" }
|
19
|
-
end
|
20
|
-
puts "running with default tags: #{StatsD.default_tags}"
|
21
|
-
end
|
22
|
-
|
23
|
-
def warmup_stats(*)
|
24
|
-
end
|
25
|
-
|
26
|
-
def add_report(*)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
suite = Suite.new
|
31
|
-
|
32
|
-
Benchmark.ips do |bench|
|
33
|
-
bench.config(suite: suite)
|
34
|
-
bench.report("without default tags") do
|
35
|
-
StatsD.increment("GoogleBase.insert", tags: {
|
36
|
-
first_tag: "first_value",
|
37
|
-
second_tag: "second_value",
|
38
|
-
third_tag: "third_value",
|
39
|
-
})
|
40
|
-
end
|
41
|
-
|
42
|
-
bench.report("with default tags") do
|
43
|
-
StatsD.increment("GoogleBase.insert", tags: { third_tag: "third_value" })
|
44
|
-
end
|
45
|
-
|
46
|
-
bench.compare!
|
47
|
-
end
|