statsd-instrument 2.9.0 → 3.0.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/ci.yml +14 -21
- data/.rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml +15 -15
- data/CHANGELOG.md +44 -0
- data/benchmark/send-metrics-to-dev-null-log +5 -2
- data/benchmark/send-metrics-to-local-udp-receiver +8 -6
- data/lib/statsd/instrument.rb +79 -146
- data/lib/statsd/instrument/assertions.rb +12 -24
- data/lib/statsd/instrument/client.rb +125 -35
- data/lib/statsd/instrument/environment.rb +1 -23
- data/lib/statsd/instrument/expectation.rb +12 -16
- data/lib/statsd/instrument/helpers.rb +1 -30
- data/lib/statsd/instrument/matchers.rb +0 -1
- data/lib/statsd/instrument/railtie.rb +0 -4
- data/lib/statsd/instrument/strict.rb +12 -123
- data/lib/statsd/instrument/version.rb +1 -1
- data/test/assertions_test.rb +21 -9
- data/test/client_test.rb +11 -0
- data/test/environment_test.rb +1 -37
- data/test/integration_test.rb +9 -24
- data/test/statsd_instrumentation_test.rb +25 -50
- data/test/statsd_test.rb +6 -31
- data/test/test_helper.rb +1 -1
- metadata +2 -24
- data/benchmark/datagram-client +0 -40
- data/lib/statsd/instrument/backend.rb +0 -18
- data/lib/statsd/instrument/backends/capture_backend.rb +0 -32
- data/lib/statsd/instrument/backends/logger_backend.rb +0 -20
- data/lib/statsd/instrument/backends/null_backend.rb +0 -9
- data/lib/statsd/instrument/backends/udp_backend.rb +0 -152
- data/lib/statsd/instrument/legacy_client.rb +0 -301
- data/lib/statsd/instrument/metric.rb +0 -155
- data/test/assertions_on_legacy_client_test.rb +0 -344
- data/test/capture_backend_test.rb +0 -26
- data/test/compatibility/dogstatsd_datagram_compatibility_test.rb +0 -161
- data/test/deprecations_test.rb +0 -139
- data/test/logger_backend_test.rb +0 -22
- data/test/metric_test.rb +0 -47
- data/test/udp_backend_test.rb +0 -228
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e941d77f1b0893b2a919f8c36e902e119c657338e6a4e8b45fc5eaa7b5a05a3
|
4
|
+
data.tar.gz: f80105adf47e4379a59716bd7bb46080db3ed9751edf9ef21ef64689ce39920a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3518393ed260edb75f138168afad1e0f1cbd604bf12511dd73596b84d1721d0008cae138cfdef03291895bd4f8b861dd18b641dcfda093e84976a0d446da5bd3
|
7
|
+
data.tar.gz: 4fd2bc2646b88b497802103eaed1538234e37619ef35363ed061b43ce100dd4d59f03de037b5b766c46e8937b7c926fbba2a0dba7f10d5610fae43e2c31f17f2
|
data/.github/workflows/ci.yml
CHANGED
@@ -4,24 +4,17 @@ on: push
|
|
4
4
|
|
5
5
|
jobs:
|
6
6
|
test:
|
7
|
-
name: Ruby ${{ matrix.ruby }} on
|
8
|
-
runs-on:
|
7
|
+
name: Ruby ${{ matrix.ruby }} on ubuntu-18.04
|
8
|
+
runs-on: ubuntu-18.04
|
9
9
|
strategy:
|
10
10
|
fail-fast: false
|
11
11
|
matrix:
|
12
|
-
# Windows started failing
|
13
|
-
|
14
|
-
|
15
|
-
#
|
16
|
-
|
17
|
-
#
|
18
|
-
# Temporarily disable Windows builds to unblock CI.
|
19
|
-
#
|
20
|
-
# platform: [ubuntu-18.04, windows-2019, macOS-10.14]
|
21
|
-
platform: [ubuntu-18.04, macOS-10.14]
|
22
|
-
ruby: [2.3, 2.4, 2.5, 2.6]
|
23
|
-
|
24
|
-
exclude:
|
12
|
+
# Windows on macOS builds started failing, so they are disabled for noew
|
13
|
+
|
14
|
+
ruby: [2.4, 2.5, 2.6]
|
15
|
+
# platform: [windows-2019, macOS-10.14, ubuntu-18.04]
|
16
|
+
|
17
|
+
# exclude:
|
25
18
|
# The Windows environment does not support older Ruby versions. We only test against the latest version
|
26
19
|
# - platform: windows-2019
|
27
20
|
# ruby: 2.3
|
@@ -31,12 +24,12 @@ jobs:
|
|
31
24
|
# ruby: 2.5
|
32
25
|
|
33
26
|
# On macOS, we only test against the Ruby version macOS ships with (2.3)
|
34
|
-
- platform: macOS-10.14
|
35
|
-
|
36
|
-
- platform: macOS-10.14
|
37
|
-
|
38
|
-
- platform: macOS-10.14
|
39
|
-
|
27
|
+
# - platform: macOS-10.14
|
28
|
+
# ruby: 2.4
|
29
|
+
# - platform: macOS-10.14
|
30
|
+
# ruby: 2.5
|
31
|
+
# - platform: macOS-10.14
|
32
|
+
# ruby: 2.6
|
40
33
|
|
41
34
|
steps:
|
42
35
|
- uses: actions/checkout@v1
|
@@ -20,7 +20,7 @@ Style/Alias:
|
|
20
20
|
- prefer_alias
|
21
21
|
- prefer_alias_method
|
22
22
|
|
23
|
-
Layout/
|
23
|
+
Layout/HashAlignment:
|
24
24
|
EnforcedHashRocketStyle: key
|
25
25
|
EnforcedColonStyle: key
|
26
26
|
EnforcedLastArgumentHashStyle: ignore_implicit
|
@@ -30,7 +30,7 @@ Layout/AlignHash:
|
|
30
30
|
- ignore_implicit
|
31
31
|
- ignore_explicit
|
32
32
|
|
33
|
-
Layout/
|
33
|
+
Layout/ParameterAlignment:
|
34
34
|
EnforcedStyle: with_fixed_indentation
|
35
35
|
SupportedStyles:
|
36
36
|
- with_first_parameter
|
@@ -172,7 +172,7 @@ Naming/FileName:
|
|
172
172
|
Regex:
|
173
173
|
IgnoreExecutableScripts: true
|
174
174
|
|
175
|
-
Layout/
|
175
|
+
Layout/FirstArgumentIndentation:
|
176
176
|
EnforcedStyle: consistent
|
177
177
|
SupportedStyles:
|
178
178
|
- consistent
|
@@ -225,7 +225,7 @@ Layout/IndentationConsistency:
|
|
225
225
|
Layout/IndentationWidth:
|
226
226
|
Width: 2
|
227
227
|
|
228
|
-
Layout/
|
228
|
+
Layout/FirstArrayElementIndentation:
|
229
229
|
EnforcedStyle: consistent
|
230
230
|
SupportedStyles:
|
231
231
|
- special_inside_parentheses
|
@@ -233,10 +233,10 @@ Layout/IndentFirstArrayElement:
|
|
233
233
|
- align_brackets
|
234
234
|
IndentationWidth:
|
235
235
|
|
236
|
-
Layout/
|
236
|
+
Layout/AssignmentIndentation:
|
237
237
|
IndentationWidth:
|
238
238
|
|
239
|
-
Layout/
|
239
|
+
Layout/FirstHashElementIndentation:
|
240
240
|
EnforcedStyle: consistent
|
241
241
|
SupportedStyles:
|
242
242
|
- special_inside_parentheses
|
@@ -340,9 +340,9 @@ Style/PercentQLiterals:
|
|
340
340
|
Naming/PredicateName:
|
341
341
|
NamePrefix:
|
342
342
|
- is_
|
343
|
-
|
343
|
+
ForbiddenPrefixes:
|
344
344
|
- is_
|
345
|
-
|
345
|
+
AllowedMethods:
|
346
346
|
- is_a?
|
347
347
|
Exclude:
|
348
348
|
- 'spec/**/*'
|
@@ -467,7 +467,7 @@ Style/TernaryParentheses:
|
|
467
467
|
- require_no_parentheses
|
468
468
|
AllowSafeAssignment: true
|
469
469
|
|
470
|
-
Layout/
|
470
|
+
Layout/TrailingEmptyLines:
|
471
471
|
EnforcedStyle: final_newline
|
472
472
|
SupportedStyles:
|
473
473
|
- final_newline
|
@@ -478,7 +478,7 @@ Style/TrivialAccessors:
|
|
478
478
|
AllowPredicates: true
|
479
479
|
AllowDSLWriters: false
|
480
480
|
IgnoreClassMethods: false
|
481
|
-
|
481
|
+
AllowedMethods:
|
482
482
|
- to_ary
|
483
483
|
- to_a
|
484
484
|
- to_c
|
@@ -561,7 +561,7 @@ Lint/UnusedMethodArgument:
|
|
561
561
|
Naming/AccessorMethodName:
|
562
562
|
Enabled: true
|
563
563
|
|
564
|
-
Layout/
|
564
|
+
Layout/ArrayAlignment:
|
565
565
|
Enabled: true
|
566
566
|
|
567
567
|
Style/ArrayJoin:
|
@@ -840,7 +840,7 @@ Style/WhileUntilDo:
|
|
840
840
|
Style/ZeroLengthPredicate:
|
841
841
|
Enabled: true
|
842
842
|
|
843
|
-
Layout/
|
843
|
+
Layout/HeredocIndentation:
|
844
844
|
EnforcedStyle: squiggly
|
845
845
|
|
846
846
|
Lint/AmbiguousOperator:
|
@@ -864,7 +864,7 @@ Lint/DeprecatedClassMethods:
|
|
864
864
|
Lint/DuplicateMethods:
|
865
865
|
Enabled: true
|
866
866
|
|
867
|
-
Lint/
|
867
|
+
Lint/DuplicateHashKey:
|
868
868
|
Enabled: true
|
869
869
|
|
870
870
|
Lint/EachWithObjectArgument:
|
@@ -891,7 +891,7 @@ Lint/FloatOutOfRange:
|
|
891
891
|
Lint/FormatParameterMismatch:
|
892
892
|
Enabled: true
|
893
893
|
|
894
|
-
Lint/
|
894
|
+
Lint/SuppressedException:
|
895
895
|
AllowComments: true
|
896
896
|
|
897
897
|
Lint/ImplicitStringConcatenation:
|
@@ -947,7 +947,7 @@ Lint/ShadowedException:
|
|
947
947
|
Lint/ShadowingOuterLocalVariable:
|
948
948
|
Enabled: true
|
949
949
|
|
950
|
-
Lint/
|
950
|
+
Lint/RedundantStringCoercion:
|
951
951
|
Enabled: true
|
952
952
|
|
953
953
|
Lint/UnderscorePrefixedVariableName:
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,50 @@ section below.
|
|
6
6
|
|
7
7
|
### Unreleased changes
|
8
8
|
|
9
|
+
_Nothing yet_
|
10
|
+
|
11
|
+
## Version 3.0.0
|
12
|
+
|
13
|
+
This version makes the new client that was added in version 2.6+ the default
|
14
|
+
client, and removes the legacy client.
|
15
|
+
|
16
|
+
- All previously deprecated functionality has been removed (since version 2.5,
|
17
|
+
see below).
|
18
|
+
- Support for the StatSite implementation has been dropped.
|
19
|
+
- Support for Ruby version older than 2.4 has been dropped.
|
20
|
+
- The default implementation has been changed to DataDog. To use the standard
|
21
|
+
StatsD implementation (which was the default in v2), set the
|
22
|
+
`STATSD_IMPLEMENTATION` environment variable to `statsd`.
|
23
|
+
|
24
|
+
To upgrade, follow the following process:
|
25
|
+
|
26
|
+
1. Upgrade to version 2.9.2.
|
27
|
+
2. Switch to the new client by setting the `STATSD_USE_NEW_CLIENT` environment
|
28
|
+
variable to 1.
|
29
|
+
- You may want to use the Rubocop rules that ship with this library, and
|
30
|
+
strict mode to find and fix deprecated usage patterns. See below for more
|
31
|
+
information about strict mode and the available Rubocop rules.
|
32
|
+
3. Upgrade to version 3.0.0, and unset `STATSD_USE_NEW_CLIENT`.
|
33
|
+
|
34
|
+
## Version 2.9.2
|
35
|
+
|
36
|
+
- Allow providing a value as second positional argument to `assert_statsd_*`
|
37
|
+
methods, rather than as keyword argument. This matches the arguments to the
|
38
|
+
StatsD metric call.
|
39
|
+
``` ruby
|
40
|
+
assert_statsd_increment('batch_size', 10) do
|
41
|
+
StatsD.increment('batch_size', 10)
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
## Version 2.9.1
|
46
|
+
|
47
|
+
- The `VOID` object being returned by metric methods (e.g. `StatsD.increment`)
|
48
|
+
is now a subclass of `Object` rather than `BasicObject`, which means that
|
49
|
+
common methods will work as expected (`#class`, `#tap`).
|
50
|
+
|
51
|
+
## Version 2.9.0
|
52
|
+
|
9
53
|
- ⚠️ **DEPRECATION:** The `StatsD.key_value` metric method is deprecated
|
10
54
|
and will be removed in version 3.0. The new client does not have StatSite
|
11
55
|
support. Due to the lack of active contributors that can port this metric
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'bundler/setup'
|
5
|
+
require 'tmpdir'
|
5
6
|
require 'benchmark/ips'
|
6
7
|
|
7
8
|
revision = %x(git rev-parse HEAD).rstrip
|
@@ -25,8 +26,10 @@ report = Benchmark.ips do |bench|
|
|
25
26
|
StatsD.measure('StatsD.measure') { 1 + 1 }
|
26
27
|
StatsD.gauge('StatsD.gauge', 12.0, tags: ["foo:bar", "quc"])
|
27
28
|
StatsD.set('StatsD.set', 'value', tags: { foo: 'bar', baz: 'quc' })
|
28
|
-
StatsD.
|
29
|
-
|
29
|
+
if StatsD.singleton_client.datagram_builder_class == StatsD::Instrument::DogStatsDDatagramBuilder
|
30
|
+
StatsD.event('StasD.event', "12345")
|
31
|
+
StatsD.service_check("StatsD.service_check", "ok")
|
32
|
+
end
|
30
33
|
end
|
31
34
|
|
32
35
|
# Store the results in between runs
|
@@ -3,7 +3,9 @@
|
|
3
3
|
|
4
4
|
require 'bundler/setup'
|
5
5
|
require 'benchmark/ips'
|
6
|
+
require 'tmpdir'
|
6
7
|
require 'socket'
|
8
|
+
require 'statsd-instrument'
|
7
9
|
|
8
10
|
revision = %x(git rev-parse HEAD).rstrip
|
9
11
|
master_revision = %x(git rev-parse origin/master).rstrip
|
@@ -20,11 +22,11 @@ FileUtils.mkdir_p(File.dirname(intermediate_results_filename))
|
|
20
22
|
receiver = UDPSocket.new
|
21
23
|
receiver.bind('localhost', 0)
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
StatsD.singleton_client = StatsD::Instrument::Environment.new(
|
26
|
+
'STATSD_ADDR' => "#{receiver.addr[2]}:#{receiver.addr[1]}",
|
27
|
+
'STATSD_IMPLEMENTATION' => 'dogstatsd',
|
28
|
+
'STATSD_ENV' => 'production',
|
29
|
+
).client
|
28
30
|
|
29
31
|
report = Benchmark.ips do |bench|
|
30
32
|
bench.report("StatsD metrics to local UDP receiver (branch: #{branch}, sha: #{revision[0, 7]})") do
|
@@ -32,7 +34,7 @@ report = Benchmark.ips do |bench|
|
|
32
34
|
StatsD.measure('StatsD.measure') { 1 + 1 }
|
33
35
|
StatsD.gauge('StatsD.gauge', 12.0, tags: ["foo:bar", "quc"])
|
34
36
|
StatsD.set('StatsD.set', 'value', tags: { foo: 'bar', baz: 'quc' })
|
35
|
-
if StatsD.
|
37
|
+
if StatsD.singleton_client.datagram_builder_class == StatsD::Instrument::DogStatsDDatagramBuilder
|
36
38
|
StatsD.event('StasD.event', "12345")
|
37
39
|
StatsD.service_check("StatsD.service_check", "ok")
|
38
40
|
end
|
data/lib/statsd/instrument.rb
CHANGED
@@ -4,90 +4,14 @@ require 'socket'
|
|
4
4
|
require 'logger'
|
5
5
|
require 'forwardable'
|
6
6
|
|
7
|
-
# The StatsD module contains low-level metrics for collecting metrics and
|
7
|
+
# The `StatsD` module contains low-level metrics for collecting metrics and
|
8
|
+
# sending them to the backend.
|
8
9
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# @note This new Client implementation is intended to become the new default in
|
13
|
-
# the next major release of this library. While this class may already be functional,
|
14
|
-
# we provide no guarantees about the API and the behavior may change.
|
15
|
-
#
|
16
|
-
# @!attribute backend
|
17
|
-
# The backend that is being used to emit the metrics.
|
18
|
-
# @return [StatsD::Instrument::Backend] the currently active backend. If there is no active backend
|
19
|
-
# yet, it will call {StatsD::Instrument::Environment#default_backend} to obtain a
|
20
|
-
# default backend for the environment.
|
21
|
-
# @see StatsD::Instrument::Environment#default_backend
|
22
|
-
# @deprecated
|
23
|
-
#
|
24
|
-
# @!attribute prefix
|
25
|
-
# The prefix to apply to metric names. This can be useful to group all the metrics
|
26
|
-
# for an application in a shared StatsD server.
|
27
|
-
#
|
28
|
-
# When using a prefix a dot will be included automatically to separate the prefix
|
29
|
-
# from the metric name.
|
30
|
-
#
|
31
|
-
# @return [String, nil] The prefix, or <tt>nil</tt> when no prefix is used
|
32
|
-
# @see StatsD::Instrument::Metric#name
|
33
|
-
# @deprecated
|
34
|
-
#
|
35
|
-
# @!attribute default_sample_rate
|
36
|
-
# The sample rate to use if the sample rate is unspecified for a metric call.
|
37
|
-
# @return [Float] Default is 1.0.
|
38
|
-
# @deprecated
|
39
|
-
#
|
40
|
-
# @!attribute logger
|
41
|
-
# The logger to use in case of any errors. The logger is also used as default logger
|
42
|
-
# for the LoggerBackend (although this can be overwritten).
|
43
|
-
# @see StatsD::Instrument::Backends::LoggerBackend
|
44
|
-
# @return [Logger]
|
45
|
-
#
|
46
|
-
# @!attribute default_tags
|
47
|
-
# The tags to apply to all metrics.
|
48
|
-
# @return [Array<String>, Hash<String, String>, nil] The default tags, or <tt>nil</tt> when no default tags is used
|
49
|
-
# @deprecated
|
50
|
-
#
|
51
|
-
# @!attribute legacy_singleton_client
|
52
|
-
# @nodoc
|
53
|
-
# @deprecated
|
54
|
-
#
|
55
|
-
# @!attribute singleton_client
|
56
|
-
# @nodoc
|
57
|
-
# @deprecated
|
58
|
-
#
|
59
|
-
# @!method measure(name, value = nil, sample_rate: nil, tags: nil, &block)
|
60
|
-
# (see StatsD::Instrument::LegacyClient#measure)
|
61
|
-
#
|
62
|
-
# @!method increment(name, value = 1, sample_rate: nil, tags: nil)
|
63
|
-
# (see StatsD::Instrument::LegacyClient#increment)
|
64
|
-
#
|
65
|
-
# @!method gauge(name, value, sample_rate: nil, tags: nil)
|
66
|
-
# (see StatsD::Instrument::LegacyClient#gauge)
|
67
|
-
#
|
68
|
-
# @!method set(name, value, sample_rate: nil, tags: nil)
|
69
|
-
# (see StatsD::Instrument::LegacyClient#set)
|
70
|
-
#
|
71
|
-
# @!method histogram(name, value, sample_rate: nil, tags: nil)
|
72
|
-
# (see StatsD::Instrument::LegacyClient#histogram)
|
73
|
-
#
|
74
|
-
# @!method distribution(name, value = nil, sample_rate: nil, tags: nil, &block)
|
75
|
-
# (see StatsD::Instrument::LegacyClient#distribution)
|
76
|
-
#
|
77
|
-
# @!method key_value(name, value)
|
78
|
-
# (see StatsD::Instrument::LegacyClient#key_value)
|
79
|
-
#
|
80
|
-
# @!method event(title, text, tags: nil, hostname: nil, timestamp: nil, aggregation_key: nil, priority: nil, source_type_name: nil, alert_type: nil) # rubocop:disable Metrics/LineLength
|
81
|
-
# (see StatsD::Instrument::LegacyClient#event)
|
82
|
-
#
|
83
|
-
# @!method service_check(name, status, tags: nil, hostname: nil, timestamp: nil, message: nil)
|
84
|
-
# (see StatsD::Instrument::LegacyClient#service_check)
|
85
|
-
#
|
86
|
-
# @see StatsD::Instrument <tt>StatsD::Instrument</tt> contains module to instrument
|
10
|
+
# @see .singleton_client Metric method calls on the `StatsD` singleton will
|
11
|
+
# be handled by the client assigned to `StatsD.singleton_client`.
|
12
|
+
# @see StatsD::Instrument `StatsD::Instrument` contains module to instrument
|
87
13
|
# existing methods with StatsD metrics
|
88
14
|
module StatsD
|
89
|
-
extend self
|
90
|
-
|
91
15
|
# The StatsD::Instrument module provides metaprogramming methods to instrument your methods with
|
92
16
|
# StatsD metrics. E.g., you can create counters on how often a method is called, how often it is
|
93
17
|
# successful, the duration of the methods call, etc.
|
@@ -103,11 +27,11 @@ module StatsD
|
|
103
27
|
end
|
104
28
|
end
|
105
29
|
|
30
|
+
# Generates a metric name for an instrumented method.
|
106
31
|
# @private
|
107
|
-
|
108
|
-
|
109
|
-
name
|
110
|
-
name
|
32
|
+
# @return [String]
|
33
|
+
def self.generate_metric_name(name, callee, *args)
|
34
|
+
name.respond_to?(:call) ? name.call(callee, args).gsub('::', '.') : name.gsub('::', '.')
|
111
35
|
end
|
112
36
|
|
113
37
|
# Even though this method is considered private, and is no longer used internally,
|
@@ -139,21 +63,12 @@ module StatsD
|
|
139
63
|
# callable to dynamically generate a metric name
|
140
64
|
# @param metric_options (see StatsD#measure)
|
141
65
|
# @return [void]
|
142
|
-
def statsd_measure(method, name,
|
143
|
-
as_dist: false, sample_rate: deprecated_sample_rate_arg, tags: deprecated_tags_arg,
|
144
|
-
prefix: nil, no_prefix: false, client: nil)
|
145
|
-
|
146
|
-
if as_dist
|
147
|
-
return statsd_distribution(method, name, # rubocop:disable StatsD/MetricPrefixArgument
|
148
|
-
sample_rate: sample_rate, tags: tags, prefix: prefix, no_prefix: no_prefix)
|
149
|
-
end
|
150
|
-
|
66
|
+
def statsd_measure(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
|
151
67
|
add_to_method(method, name, :measure) do
|
152
68
|
define_method(method) do |*args, &block|
|
153
69
|
client ||= StatsD.singleton_client
|
154
|
-
|
155
|
-
|
156
|
-
client.measure(key, sample_rate: sample_rate, tags: tags, no_prefix: true) do
|
70
|
+
key = StatsD::Instrument.generate_metric_name(name, self, *args)
|
71
|
+
client.measure(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix) do
|
157
72
|
super(*args, &block)
|
158
73
|
end
|
159
74
|
end
|
@@ -168,16 +83,12 @@ module StatsD
|
|
168
83
|
# @param metric_options (see StatsD#measure)
|
169
84
|
# @return [void]
|
170
85
|
# @note Supported by the datadog implementation only (in beta)
|
171
|
-
def statsd_distribution(method, name,
|
172
|
-
sample_rate: deprecated_sample_rate_arg, tags: deprecated_tags_arg,
|
173
|
-
prefix: nil, no_prefix: false, client: nil)
|
174
|
-
|
86
|
+
def statsd_distribution(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
|
175
87
|
add_to_method(method, name, :distribution) do
|
176
88
|
define_method(method) do |*args, &block|
|
177
89
|
client ||= StatsD.singleton_client
|
178
|
-
|
179
|
-
|
180
|
-
client.distribution(key, sample_rate: sample_rate, tags: tags, no_prefix: true) do
|
90
|
+
key = StatsD::Instrument.generate_metric_name(name, self, *args)
|
91
|
+
client.distribution(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix) do
|
181
92
|
super(*args, &block)
|
182
93
|
end
|
183
94
|
end
|
@@ -199,10 +110,7 @@ module StatsD
|
|
199
110
|
# @yieldreturn [Boolean] Return true iff the return value is considered a success, false otherwise.
|
200
111
|
# @return [void]
|
201
112
|
# @see #statsd_count_if
|
202
|
-
def statsd_count_success(method, name,
|
203
|
-
sample_rate: deprecated_sample_rate_arg, tags: deprecated_tags_arg,
|
204
|
-
prefix: nil, no_prefix: false, client: nil)
|
205
|
-
|
113
|
+
def statsd_count_success(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
|
206
114
|
add_to_method(method, name, :count_success) do
|
207
115
|
define_method(method) do |*args, &block|
|
208
116
|
begin
|
@@ -222,10 +130,8 @@ module StatsD
|
|
222
130
|
ensure
|
223
131
|
client ||= StatsD.singleton_client
|
224
132
|
suffix = truthiness == false ? 'failure' : 'success'
|
225
|
-
|
226
|
-
|
227
|
-
client.increment("#{key}.#{suffix}",
|
228
|
-
sample_rate: sample_rate, tags: tags, no_prefix: true)
|
133
|
+
key = StatsD::Instrument.generate_metric_name(name, self, *args)
|
134
|
+
client.increment("#{key}.#{suffix}", sample_rate: sample_rate, tags: tags, no_prefix: no_prefix)
|
229
135
|
end
|
230
136
|
end
|
231
137
|
end
|
@@ -243,10 +149,7 @@ module StatsD
|
|
243
149
|
# @yieldreturn (see #statsd_count_success)
|
244
150
|
# @return [void]
|
245
151
|
# @see #statsd_count_success
|
246
|
-
def statsd_count_if(method, name,
|
247
|
-
sample_rate: deprecated_sample_rate_arg, tags: deprecated_tags_arg,
|
248
|
-
prefix: nil, no_prefix: false, client: nil)
|
249
|
-
|
152
|
+
def statsd_count_if(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
|
250
153
|
add_to_method(method, name, :count_if) do
|
251
154
|
define_method(method) do |*args, &block|
|
252
155
|
begin
|
@@ -266,9 +169,8 @@ module StatsD
|
|
266
169
|
ensure
|
267
170
|
if truthiness
|
268
171
|
client ||= StatsD.singleton_client
|
269
|
-
|
270
|
-
|
271
|
-
client.increment(key, sample_rate: sample_rate, tags: tags, no_prefix: true)
|
172
|
+
key = StatsD::Instrument.generate_metric_name(name, self, *args)
|
173
|
+
client.increment(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix)
|
272
174
|
end
|
273
175
|
end
|
274
176
|
end
|
@@ -284,16 +186,12 @@ module StatsD
|
|
284
186
|
# @param name (see #statsd_measure)
|
285
187
|
# @param metric_options (see #statsd_measure)
|
286
188
|
# @return [void]
|
287
|
-
def statsd_count(method, name,
|
288
|
-
sample_rate: deprecated_sample_rate_arg, tags: deprecated_tags_arg,
|
289
|
-
prefix: nil, no_prefix: false, client: nil)
|
290
|
-
|
189
|
+
def statsd_count(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
|
291
190
|
add_to_method(method, name, :count) do
|
292
191
|
define_method(method) do |*args, &block|
|
293
192
|
client ||= StatsD.singleton_client
|
294
|
-
|
295
|
-
|
296
|
-
client.increment(key, sample_rate: sample_rate, tags: tags, no_prefix: true)
|
193
|
+
key = StatsD::Instrument.generate_metric_name(name, self, *args)
|
194
|
+
client.increment(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix)
|
297
195
|
super(*args, &block)
|
298
196
|
end
|
299
197
|
end
|
@@ -344,9 +242,9 @@ module StatsD
|
|
344
242
|
remove_from_method(method, name, :distribution)
|
345
243
|
end
|
346
244
|
|
347
|
-
VoidClass = Class.new
|
245
|
+
VoidClass = Class.new
|
348
246
|
private_constant :VoidClass
|
349
|
-
VOID = VoidClass.new
|
247
|
+
VOID = VoidClass.new.freeze
|
350
248
|
|
351
249
|
private
|
352
250
|
|
@@ -395,33 +293,68 @@ module StatsD
|
|
395
293
|
end
|
396
294
|
end
|
397
295
|
|
398
|
-
|
399
|
-
|
296
|
+
class << self
|
297
|
+
extend Forwardable
|
400
298
|
|
401
|
-
|
299
|
+
# The logger to use in case of any errors.
|
300
|
+
#
|
301
|
+
# @return [Logger]
|
302
|
+
# @see StatsD::Instrument::LogSink
|
303
|
+
attr_accessor :logger
|
402
304
|
|
403
|
-
|
404
|
-
|
405
|
-
|
305
|
+
# The StatsD client that handles method calls on the StatsD singleton.
|
306
|
+
#
|
307
|
+
# E.g. a call to `StatsD.increment` will be handled by this client.
|
308
|
+
#
|
309
|
+
# @return [StatsD::Instrument::Client]
|
310
|
+
attr_writer :singleton_client
|
406
311
|
|
407
|
-
|
408
|
-
@
|
409
|
-
|
312
|
+
# The StatsD client that handles method calls on the StatsD singleton
|
313
|
+
# @return [StatsD::Instrument::Client]
|
314
|
+
def singleton_client
|
315
|
+
@singleton_client ||= StatsD::Instrument::Environment.current.client
|
316
|
+
end
|
410
317
|
|
411
|
-
|
412
|
-
|
413
|
-
|
318
|
+
# @!method measure(name, value = nil, sample_rate: nil, tags: nil, &block)
|
319
|
+
# (see StatsD::Instrument::Client#measure)
|
320
|
+
#
|
321
|
+
# @!method increment(name, value = 1, sample_rate: nil, tags: nil)
|
322
|
+
# (see StatsD::Instrument::Client#increment)
|
323
|
+
#
|
324
|
+
# @!method gauge(name, value, sample_rate: nil, tags: nil)
|
325
|
+
# (see StatsD::Instrument::Client#gauge)
|
326
|
+
#
|
327
|
+
# @!method set(name, value, sample_rate: nil, tags: nil)
|
328
|
+
# (see StatsD::Instrument::Client#set)
|
329
|
+
#
|
330
|
+
# @!method histogram(name, value, sample_rate: nil, tags: nil)
|
331
|
+
# (see StatsD::Instrument::Client#histogram)
|
332
|
+
#
|
333
|
+
# @!method distribution(name, value = nil, sample_rate: nil, tags: nil, &block)
|
334
|
+
# (see StatsD::Instrument::Client#distribution)
|
335
|
+
#
|
336
|
+
# @!method event(title, text, tags: nil, hostname: nil, timestamp: nil, aggregation_key: nil, priority: nil, source_type_name: nil, alert_type: nil) # rubocop:disable Metrics/LineLength
|
337
|
+
# (see StatsD::Instrument::Client#event)
|
338
|
+
#
|
339
|
+
# @!method service_check(name, status, tags: nil, hostname: nil, timestamp: nil, message: nil)
|
340
|
+
# (see StatsD::Instrument::Client#service_check)
|
414
341
|
|
415
|
-
|
416
|
-
|
417
|
-
|
342
|
+
def_delegators :singleton_client, :increment, :gauge, :set, :measure,
|
343
|
+
:histogram, :distribution, :event, :service_check
|
344
|
+
end
|
418
345
|
end
|
419
346
|
|
420
347
|
require 'statsd/instrument/version'
|
421
|
-
require 'statsd/instrument/metric'
|
422
|
-
require 'statsd/instrument/legacy_client'
|
423
|
-
require 'statsd/instrument/backend'
|
424
348
|
require 'statsd/instrument/client'
|
349
|
+
require 'statsd/instrument/datagram'
|
350
|
+
require 'statsd/instrument/dogstatsd_datagram'
|
351
|
+
require 'statsd/instrument/datagram_builder'
|
352
|
+
require 'statsd/instrument/statsd_datagram_builder'
|
353
|
+
require 'statsd/instrument/dogstatsd_datagram_builder'
|
354
|
+
require 'statsd/instrument/null_sink'
|
355
|
+
require 'statsd/instrument/udp_sink'
|
356
|
+
require 'statsd/instrument/capture_sink'
|
357
|
+
require 'statsd/instrument/log_sink'
|
425
358
|
require 'statsd/instrument/environment'
|
426
359
|
require 'statsd/instrument/helpers'
|
427
360
|
require 'statsd/instrument/assertions'
|