dogstatsd-ruby 5.3.1 → 5.3.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/lib/datadog/statsd/version.rb +1 -1
- metadata +13 -11
- data/lib/datadog/statsd/threaded_sender.rb +0 -132
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfde2027b6fb73eee85ed0c612db51df707c2b01bec2266a3f2049acc34990f1
|
4
|
+
data.tar.gz: 5b1bb3263af1cbdde2bb84cf4d92f2e84ad7e0a0b3eaa5ad67f048750c062c46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b563e322f2eaff18eeb07f786d6277290c032e94859d89d856a7bc2512a278424ab5ec9f94f8bf477a222e9ef00075ad2e0293b29dbb0021a5b6551f836b3c9
|
7
|
+
data.tar.gz: 787b04cc62a139289784a9b1992a152ca74fafa3d97afa68944dea95121ff6d3af80164b551b5430d50b263f0d0c8f702d22c1450faaaebdbc4bc69f09c331fe
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dogstatsd-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.3.
|
4
|
+
version: 5.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rein Henrichs
|
8
8
|
- Karim Bogtob
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-11-03 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A Ruby DogStatsd client
|
15
15
|
email: code@datadoghq.com
|
@@ -34,7 +34,6 @@ files:
|
|
34
34
|
- lib/datadog/statsd/serialization/tag_serializer.rb
|
35
35
|
- lib/datadog/statsd/single_thread_sender.rb
|
36
36
|
- lib/datadog/statsd/telemetry.rb
|
37
|
-
- lib/datadog/statsd/threaded_sender.rb
|
38
37
|
- lib/datadog/statsd/udp_connection.rb
|
39
38
|
- lib/datadog/statsd/uds_connection.rb
|
40
39
|
- lib/datadog/statsd/version.rb
|
@@ -43,10 +42,14 @@ licenses:
|
|
43
42
|
- MIT
|
44
43
|
metadata:
|
45
44
|
bug_tracker_uri: https://github.com/DataDog/dogstatsd-ruby/issues
|
46
|
-
changelog_uri: https://github.com/DataDog/dogstatsd-ruby/blob/v5.3.
|
47
|
-
documentation_uri: https://www.rubydoc.info/gems/dogstatsd-ruby/5.3.
|
48
|
-
source_code_uri: https://github.com/DataDog/dogstatsd-ruby/tree/v5.3.
|
49
|
-
post_install_message:
|
45
|
+
changelog_uri: https://github.com/DataDog/dogstatsd-ruby/blob/v5.3.2/CHANGELOG.md
|
46
|
+
documentation_uri: https://www.rubydoc.info/gems/dogstatsd-ruby/5.3.2
|
47
|
+
source_code_uri: https://github.com/DataDog/dogstatsd-ruby/tree/v5.3.2
|
48
|
+
post_install_message: |2+
|
49
|
+
|
50
|
+
If you are upgrading from v4.x of the dogstatsd-ruby library, note the major change to the threading model:
|
51
|
+
https://github.com/DataDog/dogstatsd-ruby#migrating-from-v4x-to-v5x
|
52
|
+
|
50
53
|
rdoc_options: []
|
51
54
|
require_paths:
|
52
55
|
- lib
|
@@ -61,9 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
64
|
- !ruby/object:Gem::Version
|
62
65
|
version: '0'
|
63
66
|
requirements: []
|
64
|
-
|
65
|
-
|
66
|
-
signing_key:
|
67
|
+
rubygems_version: 3.2.22
|
68
|
+
signing_key:
|
67
69
|
specification_version: 4
|
68
70
|
summary: A Ruby DogStatsd client
|
69
71
|
test_files: []
|
@@ -1,132 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
class FlushQueue < Queue
|
5
|
-
end
|
6
|
-
class CloseQueue < Queue
|
7
|
-
end
|
8
|
-
class Statsd
|
9
|
-
# Sender is using a background thread to flush and pack messages
|
10
|
-
# in a `MessageBuffer`.
|
11
|
-
# The communication with this thread is done using a `Queue`.
|
12
|
-
# If the thread is dead, it is starting a new one to avoid having a blocked
|
13
|
-
# Sender with no background thread to communicate with (most of the time,
|
14
|
-
# having a dead background thread means that a fork just happened and that we
|
15
|
-
# are running in the child process).
|
16
|
-
class Sender
|
17
|
-
CLOSEABLE_QUEUES = Queue.instance_methods.include?(:close)
|
18
|
-
|
19
|
-
def initialize(message_buffer, logger: nil)
|
20
|
-
@message_buffer = message_buffer
|
21
|
-
@logger = logger
|
22
|
-
|
23
|
-
# communication and synchronization with the background thread
|
24
|
-
# @mux is also used to not having multiple threads fighting for
|
25
|
-
# closing the Sender or creating a new background thread
|
26
|
-
@channel = Queue.new
|
27
|
-
@mux = Mutex.new
|
28
|
-
|
29
|
-
@is_closed = false
|
30
|
-
|
31
|
-
# start background thread immediately
|
32
|
-
@sender_thread = Thread.new(&method(:send_loop))
|
33
|
-
end
|
34
|
-
|
35
|
-
def flush(sync: false)
|
36
|
-
@mux.synchronize {
|
37
|
-
# we don't want to send a flush action to the bg thread if:
|
38
|
-
# - there is no bg thread running
|
39
|
-
# - the sender has been closed
|
40
|
-
return if !sender_thread.alive? || @is_closed
|
41
|
-
|
42
|
-
if sync
|
43
|
-
# blocking flush
|
44
|
-
blocking_queue = FlushQueue.new
|
45
|
-
channel << blocking_queue
|
46
|
-
blocking_queue.pop # wait for the bg thread to finish its work
|
47
|
-
blocking_queue.close if CLOSEABLE_QUEUES
|
48
|
-
else
|
49
|
-
# asynchronous flush
|
50
|
-
channel << :flush
|
51
|
-
end
|
52
|
-
}
|
53
|
-
end
|
54
|
-
|
55
|
-
def add(message)
|
56
|
-
return if @is_closed # don't send a message to the bg thread if the sender has been closed
|
57
|
-
|
58
|
-
# the bg thread is not running anymore, this is happening if the main process has forked and
|
59
|
-
# we are running in the child, we will spawn a bg thread and reset buffers (containing parents' messages)
|
60
|
-
if !sender_thread.alive?
|
61
|
-
@mux.synchronize {
|
62
|
-
return if @is_closed
|
63
|
-
# test if a call from another thread has already re-created
|
64
|
-
# the background thread before this one acquired the lock
|
65
|
-
break if sender_thread.alive?
|
66
|
-
|
67
|
-
# re-create the channel of communication since we will spawn a new bg thread
|
68
|
-
channel.close if CLOSEABLE_QUEUES
|
69
|
-
@channel = Queue.new
|
70
|
-
message_buffer.reset # don't use messages appended by another fork
|
71
|
-
@sender_thread = Thread.new(&method(:send_loop))
|
72
|
-
}
|
73
|
-
end
|
74
|
-
|
75
|
-
channel << message
|
76
|
-
end
|
77
|
-
|
78
|
-
# Compatibility with `Sender`
|
79
|
-
def start()
|
80
|
-
end
|
81
|
-
|
82
|
-
def stop()
|
83
|
-
return if @is_closed
|
84
|
-
# use this lock to both: not having another thread stopping this instance nor
|
85
|
-
# having a #add call creating a new thread
|
86
|
-
@mux.synchronize {
|
87
|
-
@is_closed = true
|
88
|
-
if sender_thread.alive? # no reasons to stop the bg thread is none is running already
|
89
|
-
blocking_queue = CloseQueue.new
|
90
|
-
channel << blocking_queue
|
91
|
-
blocking_queue.pop # wait for the bg thread to finish its work
|
92
|
-
blocking_queue.close if CLOSEABLE_QUEUES
|
93
|
-
sender_thread.join(3) # wait for completion, timeout after 3 seconds
|
94
|
-
# TODO(remy): should I close `channel` here?
|
95
|
-
end
|
96
|
-
}
|
97
|
-
end
|
98
|
-
|
99
|
-
private
|
100
|
-
|
101
|
-
attr_reader :message_buffer
|
102
|
-
attr_reader :channel
|
103
|
-
attr_reader :mux
|
104
|
-
attr_reader :sender_thread
|
105
|
-
|
106
|
-
def send_loop
|
107
|
-
until (message = channel.pop).nil? && (CLOSEABLE_QUEUES && channel.closed?)
|
108
|
-
# skip if message is nil, e.g. when the channel is empty and closed
|
109
|
-
next unless message
|
110
|
-
|
111
|
-
case message
|
112
|
-
# if a FlushQueue is received, the background thread has to flush the message
|
113
|
-
# buffer and to send an :unblock to let the caller know that it has finished
|
114
|
-
when FlushQueue
|
115
|
-
message_buffer.flush
|
116
|
-
message << :unblock
|
117
|
-
# if a :flush is received, the background thread has to flush asynchronously
|
118
|
-
when :flush
|
119
|
-
message_buffer.flush
|
120
|
-
# if a CloseQueue is received, the background thread has to do a last flush
|
121
|
-
# and to send an :unblock to let the caller know that it has finished
|
122
|
-
when CloseQueue
|
123
|
-
message << :unblock
|
124
|
-
return
|
125
|
-
else
|
126
|
-
message_buffer.add(message)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|