waterdrop 2.0.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ci.yml +33 -6
- data/.ruby-version +1 -1
- data/CHANGELOG.md +80 -0
- data/Gemfile +0 -2
- data/Gemfile.lock +36 -87
- data/MIT-LICENSE +18 -0
- data/README.md +180 -46
- data/certs/mensfeld.pem +21 -21
- data/config/errors.yml +29 -5
- data/docker-compose.yml +2 -1
- data/lib/{water_drop → waterdrop}/config.rb +47 -19
- data/lib/waterdrop/contracts/config.rb +40 -0
- data/lib/waterdrop/contracts/message.rb +60 -0
- data/lib/waterdrop/instrumentation/callbacks/delivery.rb +30 -0
- data/lib/waterdrop/instrumentation/callbacks/error.rb +36 -0
- data/lib/waterdrop/instrumentation/callbacks/statistics.rb +41 -0
- data/lib/waterdrop/instrumentation/callbacks/statistics_decorator.rb +77 -0
- data/lib/waterdrop/instrumentation/callbacks_manager.rb +39 -0
- data/lib/{water_drop/instrumentation/stdout_listener.rb → waterdrop/instrumentation/logger_listener.rb} +17 -26
- data/lib/waterdrop/instrumentation/monitor.rb +20 -0
- data/lib/{water_drop/instrumentation/monitor.rb → waterdrop/instrumentation/notifications.rb} +12 -13
- data/lib/waterdrop/instrumentation/vendors/datadog/dashboard.json +1 -0
- data/lib/waterdrop/instrumentation/vendors/datadog/listener.rb +210 -0
- data/lib/waterdrop/instrumentation.rb +20 -0
- data/lib/waterdrop/patches/rdkafka/bindings.rb +42 -0
- data/lib/waterdrop/patches/rdkafka/producer.rb +28 -0
- data/lib/{water_drop → waterdrop}/producer/async.rb +2 -2
- data/lib/{water_drop → waterdrop}/producer/buffer.rb +15 -8
- data/lib/waterdrop/producer/builder.rb +28 -0
- data/lib/{water_drop → waterdrop}/producer/sync.rb +2 -2
- data/lib/{water_drop → waterdrop}/producer.rb +29 -15
- data/lib/{water_drop → waterdrop}/version.rb +1 -1
- data/lib/waterdrop.rb +33 -2
- data/waterdrop.gemspec +12 -10
- data.tar.gz.sig +0 -0
- metadata +64 -97
- metadata.gz.sig +0 -0
- data/.github/FUNDING.yml +0 -1
- data/LICENSE +0 -165
- data/lib/water_drop/contracts/config.rb +0 -26
- data/lib/water_drop/contracts/message.rb +0 -41
- data/lib/water_drop/instrumentation.rb +0 -7
- data/lib/water_drop/producer/builder.rb +0 -63
- data/lib/water_drop/producer/statistics_decorator.rb +0 -71
- data/lib/water_drop.rb +0 -30
- /data/lib/{water_drop → waterdrop}/contracts.rb +0 -0
- /data/lib/{water_drop → waterdrop}/errors.rb +0 -0
- /data/lib/{water_drop → waterdrop}/producer/dummy_client.rb +0 -0
- /data/lib/{water_drop → waterdrop}/producer/status.rb +0 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WaterDrop
|
4
|
+
# Patches to external components
|
5
|
+
module Patches
|
6
|
+
# Rdkafka related patches
|
7
|
+
module Rdkafka
|
8
|
+
# Rdkafka::Producer patches
|
9
|
+
module Producer
|
10
|
+
# Adds a method that allows us to get the native kafka producer name
|
11
|
+
# @return [String] producer instance name
|
12
|
+
def name
|
13
|
+
unless @_native
|
14
|
+
version = ::Gem::Version.new(::Rdkafka::VERSION)
|
15
|
+
change = ::Gem::Version.new('0.12.0')
|
16
|
+
# 0.12.0 changed how the native producer client reference works.
|
17
|
+
# This code supports both older and newer versions of rdkafka
|
18
|
+
@_native = version >= change ? @client.native : @native_kafka
|
19
|
+
end
|
20
|
+
|
21
|
+
::Rdkafka::Bindings.rd_kafka_name(@_native)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
::Rdkafka::Producer.include ::WaterDrop::Patches::Rdkafka::Producer
|
@@ -19,7 +19,7 @@ module WaterDrop
|
|
19
19
|
|
20
20
|
@monitor.instrument(
|
21
21
|
'message.produced_async',
|
22
|
-
|
22
|
+
producer_id: id,
|
23
23
|
message: message
|
24
24
|
) { client.produce(**message) }
|
25
25
|
end
|
@@ -40,7 +40,7 @@ module WaterDrop
|
|
40
40
|
|
41
41
|
@monitor.instrument(
|
42
42
|
'messages.produced_async',
|
43
|
-
|
43
|
+
producer_id: id,
|
44
44
|
messages: messages
|
45
45
|
) do
|
46
46
|
messages.map { |message| client.produce(**message) }
|
@@ -23,8 +23,9 @@ module WaterDrop
|
|
23
23
|
|
24
24
|
@monitor.instrument(
|
25
25
|
'message.buffered',
|
26
|
-
|
27
|
-
message: message
|
26
|
+
producer_id: id,
|
27
|
+
message: message,
|
28
|
+
buffer: @messages
|
28
29
|
) { @messages << message }
|
29
30
|
end
|
30
31
|
|
@@ -40,8 +41,9 @@ module WaterDrop
|
|
40
41
|
|
41
42
|
@monitor.instrument(
|
42
43
|
'messages.buffered',
|
43
|
-
|
44
|
-
messages: messages
|
44
|
+
producer_id: id,
|
45
|
+
messages: messages,
|
46
|
+
buffer: @messages
|
45
47
|
) do
|
46
48
|
messages.each { |message| @messages << message }
|
47
49
|
messages
|
@@ -56,7 +58,7 @@ module WaterDrop
|
|
56
58
|
|
57
59
|
@monitor.instrument(
|
58
60
|
'buffer.flushed_async',
|
59
|
-
|
61
|
+
producer_id: id,
|
60
62
|
messages: @messages
|
61
63
|
) { flush(false) }
|
62
64
|
end
|
@@ -69,7 +71,7 @@ module WaterDrop
|
|
69
71
|
|
70
72
|
@monitor.instrument(
|
71
73
|
'buffer.flushed_sync',
|
72
|
-
|
74
|
+
producer_id: id,
|
73
75
|
messages: @messages
|
74
76
|
) { flush(true) }
|
75
77
|
end
|
@@ -103,8 +105,13 @@ module WaterDrop
|
|
103
105
|
)
|
104
106
|
end
|
105
107
|
rescue *RESCUED_ERRORS => e
|
106
|
-
|
107
|
-
|
108
|
+
@monitor.instrument(
|
109
|
+
'error.occurred',
|
110
|
+
error: e,
|
111
|
+
producer_id: id,
|
112
|
+
dispatched: dispatched,
|
113
|
+
type: sync ? 'buffer.flushed_sync.error' : 'buffer.flush_async.error'
|
114
|
+
)
|
108
115
|
|
109
116
|
raise Errors::FlushFailureError.new(dispatched)
|
110
117
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WaterDrop
|
4
|
+
class Producer
|
5
|
+
# Class used to construct the rdkafka producer client
|
6
|
+
class Builder
|
7
|
+
# @param producer [Producer] not yet configured producer for which we want to
|
8
|
+
# build the client
|
9
|
+
# @param config [Object] dry-configurable based configuration object
|
10
|
+
# @return [Rdkafka::Producer, Producer::DummyClient] raw rdkafka producer or a dummy producer
|
11
|
+
# when we don't want to dispatch any messages
|
12
|
+
def call(producer, config)
|
13
|
+
return DummyClient.new unless config.deliver
|
14
|
+
|
15
|
+
client = Rdkafka::Config.new(config.kafka.to_h).producer
|
16
|
+
|
17
|
+
# This callback is not global and is per client, thus we do not have to wrap it with a
|
18
|
+
# callbacks manager to make it work
|
19
|
+
client.delivery_callback = Instrumentation::Callbacks::Delivery.new(
|
20
|
+
producer.id,
|
21
|
+
config.monitor
|
22
|
+
)
|
23
|
+
|
24
|
+
client
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -21,7 +21,7 @@ module WaterDrop
|
|
21
21
|
|
22
22
|
@monitor.instrument(
|
23
23
|
'message.produced_sync',
|
24
|
-
|
24
|
+
producer_id: id,
|
25
25
|
message: message
|
26
26
|
) do
|
27
27
|
client
|
@@ -49,7 +49,7 @@ module WaterDrop
|
|
49
49
|
ensure_active!
|
50
50
|
messages.each { |message| validate_message!(message) }
|
51
51
|
|
52
|
-
@monitor.instrument('messages.produced_sync',
|
52
|
+
@monitor.instrument('messages.produced_sync', producer_id: id, messages: messages) do
|
53
53
|
messages
|
54
54
|
.map { |message| client.produce(**message) }
|
55
55
|
.map! do |handler|
|
@@ -70,15 +70,29 @@ module WaterDrop
|
|
70
70
|
|
71
71
|
# We undefine all the finalizers, in case it was a fork, so the finalizers from the parent
|
72
72
|
# process don't leak
|
73
|
-
ObjectSpace.undefine_finalizer(
|
73
|
+
ObjectSpace.undefine_finalizer(id)
|
74
74
|
# Finalizer tracking is needed for handling shutdowns gracefully.
|
75
75
|
# I don't expect everyone to remember about closing all the producers all the time, thus
|
76
76
|
# this approach is better. Although it is still worth keeping in mind, that this will
|
77
|
-
# block GC from removing a no longer used producer unless closed properly
|
78
|
-
|
77
|
+
# block GC from removing a no longer used producer unless closed properly but at least
|
78
|
+
# won't crash the VM upon closing the process
|
79
|
+
ObjectSpace.define_finalizer(id, proc { close })
|
79
80
|
|
80
81
|
@pid = Process.pid
|
81
82
|
@client = Builder.new.call(self, @config)
|
83
|
+
|
84
|
+
# Register statistics runner for this particular type of callbacks
|
85
|
+
::WaterDrop::Instrumentation.statistics_callbacks.add(
|
86
|
+
@id,
|
87
|
+
Instrumentation::Callbacks::Statistics.new(@id, @client.name, @config.monitor)
|
88
|
+
)
|
89
|
+
|
90
|
+
# Register error tracking callback
|
91
|
+
::WaterDrop::Instrumentation.error_callbacks.add(
|
92
|
+
@id,
|
93
|
+
Instrumentation::Callbacks::Error.new(@id, @client.name, @config.monitor)
|
94
|
+
)
|
95
|
+
|
82
96
|
@status.connected!
|
83
97
|
end
|
84
98
|
|
@@ -92,21 +106,27 @@ module WaterDrop
|
|
92
106
|
|
93
107
|
@monitor.instrument(
|
94
108
|
'producer.closed',
|
95
|
-
|
109
|
+
producer_id: id
|
96
110
|
) do
|
97
111
|
@status.closing!
|
98
112
|
|
99
113
|
# No need for auto-gc if everything got closed by us
|
100
114
|
# This should be used only in case a producer was not closed properly and forgotten
|
101
|
-
ObjectSpace.undefine_finalizer(
|
115
|
+
ObjectSpace.undefine_finalizer(id)
|
102
116
|
|
103
|
-
# Flush has
|
117
|
+
# Flush has its own buffer mutex but even if it is blocked, flushing can still happen
|
104
118
|
# as we close the client after the flushing (even if blocked by the mutex)
|
105
|
-
flush(
|
119
|
+
flush(true)
|
106
120
|
|
107
121
|
# We should not close the client in several threads the same time
|
108
122
|
# It is safe to run it several times but not exactly the same moment
|
109
|
-
|
123
|
+
# We also mark it as closed only if it was connected, if not, it would trigger a new
|
124
|
+
# connection that anyhow would be immediately closed
|
125
|
+
client.close if @client
|
126
|
+
|
127
|
+
# Remove callbacks runners that were registered
|
128
|
+
::WaterDrop::Instrumentation.statistics_callbacks.delete(@id)
|
129
|
+
::WaterDrop::Instrumentation.error_callbacks.delete(@id)
|
110
130
|
|
111
131
|
@status.closed!
|
112
132
|
end
|
@@ -130,13 +150,7 @@ module WaterDrop
|
|
130
150
|
# @param message [Hash] message we want to send
|
131
151
|
# @raise [Karafka::Errors::MessageInvalidError]
|
132
152
|
def validate_message!(message)
|
133
|
-
|
134
|
-
return if result.success?
|
135
|
-
|
136
|
-
raise Errors::MessageInvalidError, [
|
137
|
-
result.errors.to_h,
|
138
|
-
message
|
139
|
-
]
|
153
|
+
@contract.validate!(message, Errors::MessageInvalidError)
|
140
154
|
end
|
141
155
|
end
|
142
156
|
end
|
data/lib/waterdrop.rb
CHANGED
@@ -1,4 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
|
3
|
+
# External components
|
4
|
+
# delegate should be removed because we don't need it, we just add it because of ruby-kafka
|
5
|
+
%w[
|
6
|
+
karafka-core
|
7
|
+
forwardable
|
8
|
+
rdkafka
|
9
|
+
json
|
10
|
+
zeitwerk
|
11
|
+
securerandom
|
12
|
+
].each { |lib| require lib }
|
13
|
+
|
14
|
+
# WaterDrop library
|
15
|
+
module WaterDrop
|
16
|
+
class << self
|
17
|
+
# @return [String] root path of this gem
|
18
|
+
def gem_root
|
19
|
+
Pathname.new(File.expand_path('..', __dir__))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
loader = Zeitwerk::Loader.for_gem
|
25
|
+
loader.inflector.inflect('waterdrop' => 'WaterDrop')
|
26
|
+
# Do not load vendors instrumentation components. Those need to be required manually if needed
|
27
|
+
loader.ignore("#{__dir__}/waterdrop/instrumentation/vendors/**/*.rb")
|
28
|
+
loader.setup
|
29
|
+
loader.eager_load
|
30
|
+
|
31
|
+
# Rdkafka uses a single global callback for things. We bypass that by injecting a manager for
|
32
|
+
# each callback type. Callback manager allows us to register more than one callback
|
33
|
+
# @note Those managers are also used by Karafka for consumer related statistics
|
34
|
+
Rdkafka::Config.statistics_callback = WaterDrop::Instrumentation.statistics_callbacks
|
35
|
+
Rdkafka::Config.error_callback = WaterDrop::Instrumentation.error_callbacks
|
data/waterdrop.gemspec
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
lib = File.expand_path('lib', __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
|
6
|
-
require '
|
6
|
+
require 'waterdrop/version'
|
7
7
|
|
8
8
|
Gem::Specification.new do |spec|
|
9
9
|
spec.name = 'waterdrop'
|
@@ -11,19 +11,16 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.platform = Gem::Platform::RUBY
|
12
12
|
spec.authors = ['Maciej Mensfeld']
|
13
13
|
spec.email = %w[maciej@mensfeld.pl]
|
14
|
-
spec.homepage = 'https://
|
14
|
+
spec.homepage = 'https://karafka.io'
|
15
15
|
spec.summary = 'Kafka messaging made easy!'
|
16
16
|
spec.description = spec.summary
|
17
|
-
spec.license = '
|
17
|
+
spec.license = 'MIT'
|
18
18
|
|
19
|
-
spec.add_dependency '
|
20
|
-
spec.add_dependency '
|
21
|
-
spec.add_dependency '
|
22
|
-
spec.add_dependency 'dry-validation', '~> 1.3'
|
23
|
-
spec.add_dependency 'rdkafka', '>= 0.6.0'
|
24
|
-
spec.add_dependency 'zeitwerk', '~> 2.1'
|
19
|
+
spec.add_dependency 'karafka-core', '~> 2.0'
|
20
|
+
spec.add_dependency 'rdkafka', '>= 0.10'
|
21
|
+
spec.add_dependency 'zeitwerk', '~> 2.3'
|
25
22
|
|
26
|
-
spec.required_ruby_version = '>= 2.
|
23
|
+
spec.required_ruby_version = '>= 2.7'
|
27
24
|
|
28
25
|
if $PROGRAM_NAME.end_with?('gem')
|
29
26
|
spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
|
@@ -33,4 +30,9 @@ Gem::Specification.new do |spec|
|
|
33
30
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
|
34
31
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
35
32
|
spec.require_paths = %w[lib]
|
33
|
+
|
34
|
+
spec.metadata = {
|
35
|
+
'source_code_uri' => 'https://github.com/karafka/waterdrop',
|
36
|
+
'rubygems_mfa_required' => 'true'
|
37
|
+
}
|
36
38
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: waterdrop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Mensfeld
|
@@ -11,115 +11,73 @@ cert_chain:
|
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIEODCCAqCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhtYWNp
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
14
|
+
ZWovREM9bWVuc2ZlbGQvREM9cGwwHhcNMjEwODExMTQxNTEzWhcNMjIwODExMTQx
|
15
|
+
NTEzWjAjMSEwHwYDVQQDDBhtYWNpZWovREM9bWVuc2ZlbGQvREM9cGwwggGiMA0G
|
16
|
+
CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDV2jKH4Ti87GM6nyT6D+ESzTI0MZDj
|
17
|
+
ak2/TEwnxvijMJyCCPKT/qIkbW4/f0VHM4rhPr1nW73sb5SZBVFCLlJcOSKOBdUY
|
18
|
+
TMY+SIXN2EtUaZuhAOe8LxtxjHTgRHvHcqUQMBENXTISNzCo32LnUxweu66ia4Pd
|
19
|
+
1mNRhzOqNv9YiBZvtBf7IMQ+sYdOCjboq2dlsWmJiwiDpY9lQBTnWORnT3mQxU5x
|
20
|
+
vPSwnLB854cHdCS8fQo4DjeJBRZHhEbcE5sqhEMB3RZA3EtFVEXOxlNxVTS3tncI
|
21
|
+
qyNXiWDaxcipaens4ObSY1C2HTV7OWb7OMqSCIybeYTSfkaSdqmcl4S6zxXkjH1J
|
22
|
+
tnjayAVzD+QVXGijsPLE2PFnJAh9iDET2cMsjabO1f6l1OQNyAtqpcyQcgfnyW0z
|
23
|
+
g7tGxTYD+6wJHffM9d9txOUw6djkF6bDxyqB8lo4Z3IObCx18AZjI9XPS9QG7w6q
|
24
|
+
LCWuMG2lkCcRgASqaVk9fEf9yMc2xxz5o3kCAwEAAaN3MHUwCQYDVR0TBAIwADAL
|
25
|
+
BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFBqUFCKCOe5IuueUVqOB991jyCLLMB0GA1Ud
|
26
26
|
EQQWMBSBEm1hY2llakBtZW5zZmVsZC5wbDAdBgNVHRIEFjAUgRJtYWNpZWpAbWVu
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
27
|
+
c2ZlbGQucGwwDQYJKoZIhvcNAQELBQADggGBADD0/UuTTFgW+CGk2U0RDw2RBOca
|
28
|
+
W2LTF/G7AOzuzD0Tc4voc7WXyrgKwJREv8rgBimLnNlgmFJLmtUCh2U/MgxvcilH
|
29
|
+
yshYcbseNvjkrtYnLRlWZR4SSB6Zei5AlyGVQLPkvdsBpNegcG6w075YEwzX/38a
|
30
|
+
8V9B/Yri2OGELBz8ykl7BsXUgNoUPA/4pHF6YRLz+VirOaUIQ4JfY7xGj6fSOWWz
|
31
|
+
/rQ/d77r6o1mfJYM/3BRVg73a3b7DmRnE5qjwmSaSQ7u802pJnLesmArch0xGCT/
|
32
|
+
fMmRli1Qb+6qOTl9mzD6UDMAyFR4t6MStLm0mIEqM0nBO5nUdUWbC7l9qXEf8XBE
|
33
|
+
2DP28p3EqSuS+lKbAWKcqv7t0iRhhmaod+Yn9mcrLN1sa3q3KSQ9BCyxezCD4Mk2
|
34
|
+
R2P11bWoCtr70BsccVrN8jEhzwXngMyI2gVt750Y+dbTu1KgRqZKp/ECe7ZzPzXj
|
35
|
+
pIy9vHxTANKYVyI4qj8OrFdEM5BQNu8oQpL0iQ==
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date:
|
37
|
+
date: 2022-07-28 00:00:00.000000000 Z
|
38
38
|
dependencies:
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
|
-
name:
|
41
|
-
requirement: !ruby/object:Gem::Requirement
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '1.1'
|
46
|
-
type: :runtime
|
47
|
-
prerelease: false
|
48
|
-
version_requirements: !ruby/object:Gem::Requirement
|
49
|
-
requirements:
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: '1.1'
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: dry-configurable
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '0.8'
|
60
|
-
type: :runtime
|
61
|
-
prerelease: false
|
62
|
-
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
requirements:
|
64
|
-
- - "~>"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: '0.8'
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: dry-monitor
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - "~>"
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '0.3'
|
74
|
-
type: :runtime
|
75
|
-
prerelease: false
|
76
|
-
version_requirements: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - "~>"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0.3'
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: dry-validation
|
40
|
+
name: karafka-core
|
83
41
|
requirement: !ruby/object:Gem::Requirement
|
84
42
|
requirements:
|
85
43
|
- - "~>"
|
86
44
|
- !ruby/object:Gem::Version
|
87
|
-
version: '
|
45
|
+
version: '2.0'
|
88
46
|
type: :runtime
|
89
47
|
prerelease: false
|
90
48
|
version_requirements: !ruby/object:Gem::Requirement
|
91
49
|
requirements:
|
92
50
|
- - "~>"
|
93
51
|
- !ruby/object:Gem::Version
|
94
|
-
version: '
|
52
|
+
version: '2.0'
|
95
53
|
- !ruby/object:Gem::Dependency
|
96
54
|
name: rdkafka
|
97
55
|
requirement: !ruby/object:Gem::Requirement
|
98
56
|
requirements:
|
99
57
|
- - ">="
|
100
58
|
- !ruby/object:Gem::Version
|
101
|
-
version: 0.
|
59
|
+
version: '0.10'
|
102
60
|
type: :runtime
|
103
61
|
prerelease: false
|
104
62
|
version_requirements: !ruby/object:Gem::Requirement
|
105
63
|
requirements:
|
106
64
|
- - ">="
|
107
65
|
- !ruby/object:Gem::Version
|
108
|
-
version: 0.
|
66
|
+
version: '0.10'
|
109
67
|
- !ruby/object:Gem::Dependency
|
110
68
|
name: zeitwerk
|
111
69
|
requirement: !ruby/object:Gem::Requirement
|
112
70
|
requirements:
|
113
71
|
- - "~>"
|
114
72
|
- !ruby/object:Gem::Version
|
115
|
-
version: '2.
|
73
|
+
version: '2.3'
|
116
74
|
type: :runtime
|
117
75
|
prerelease: false
|
118
76
|
version_requirements: !ruby/object:Gem::Requirement
|
119
77
|
requirements:
|
120
78
|
- - "~>"
|
121
79
|
- !ruby/object:Gem::Version
|
122
|
-
version: '2.
|
80
|
+
version: '2.3'
|
123
81
|
description: Kafka messaging made easy!
|
124
82
|
email:
|
125
83
|
- maciej@mensfeld.pl
|
@@ -129,7 +87,6 @@ extra_rdoc_files: []
|
|
129
87
|
files:
|
130
88
|
- ".coditsu/ci.yml"
|
131
89
|
- ".diffend.yml"
|
132
|
-
- ".github/FUNDING.yml"
|
133
90
|
- ".github/workflows/ci.yml"
|
134
91
|
- ".gitignore"
|
135
92
|
- ".rspec"
|
@@ -138,36 +95,46 @@ files:
|
|
138
95
|
- CHANGELOG.md
|
139
96
|
- Gemfile
|
140
97
|
- Gemfile.lock
|
141
|
-
- LICENSE
|
98
|
+
- MIT-LICENSE
|
142
99
|
- README.md
|
143
100
|
- certs/mensfeld.pem
|
144
101
|
- config/errors.yml
|
145
102
|
- docker-compose.yml
|
146
|
-
- lib/water_drop.rb
|
147
|
-
- lib/water_drop/config.rb
|
148
|
-
- lib/water_drop/contracts.rb
|
149
|
-
- lib/water_drop/contracts/config.rb
|
150
|
-
- lib/water_drop/contracts/message.rb
|
151
|
-
- lib/water_drop/errors.rb
|
152
|
-
- lib/water_drop/instrumentation.rb
|
153
|
-
- lib/water_drop/instrumentation/monitor.rb
|
154
|
-
- lib/water_drop/instrumentation/stdout_listener.rb
|
155
|
-
- lib/water_drop/producer.rb
|
156
|
-
- lib/water_drop/producer/async.rb
|
157
|
-
- lib/water_drop/producer/buffer.rb
|
158
|
-
- lib/water_drop/producer/builder.rb
|
159
|
-
- lib/water_drop/producer/dummy_client.rb
|
160
|
-
- lib/water_drop/producer/statistics_decorator.rb
|
161
|
-
- lib/water_drop/producer/status.rb
|
162
|
-
- lib/water_drop/producer/sync.rb
|
163
|
-
- lib/water_drop/version.rb
|
164
103
|
- lib/waterdrop.rb
|
104
|
+
- lib/waterdrop/config.rb
|
105
|
+
- lib/waterdrop/contracts.rb
|
106
|
+
- lib/waterdrop/contracts/config.rb
|
107
|
+
- lib/waterdrop/contracts/message.rb
|
108
|
+
- lib/waterdrop/errors.rb
|
109
|
+
- lib/waterdrop/instrumentation.rb
|
110
|
+
- lib/waterdrop/instrumentation/callbacks/delivery.rb
|
111
|
+
- lib/waterdrop/instrumentation/callbacks/error.rb
|
112
|
+
- lib/waterdrop/instrumentation/callbacks/statistics.rb
|
113
|
+
- lib/waterdrop/instrumentation/callbacks/statistics_decorator.rb
|
114
|
+
- lib/waterdrop/instrumentation/callbacks_manager.rb
|
115
|
+
- lib/waterdrop/instrumentation/logger_listener.rb
|
116
|
+
- lib/waterdrop/instrumentation/monitor.rb
|
117
|
+
- lib/waterdrop/instrumentation/notifications.rb
|
118
|
+
- lib/waterdrop/instrumentation/vendors/datadog/dashboard.json
|
119
|
+
- lib/waterdrop/instrumentation/vendors/datadog/listener.rb
|
120
|
+
- lib/waterdrop/patches/rdkafka/bindings.rb
|
121
|
+
- lib/waterdrop/patches/rdkafka/producer.rb
|
122
|
+
- lib/waterdrop/producer.rb
|
123
|
+
- lib/waterdrop/producer/async.rb
|
124
|
+
- lib/waterdrop/producer/buffer.rb
|
125
|
+
- lib/waterdrop/producer/builder.rb
|
126
|
+
- lib/waterdrop/producer/dummy_client.rb
|
127
|
+
- lib/waterdrop/producer/status.rb
|
128
|
+
- lib/waterdrop/producer/sync.rb
|
129
|
+
- lib/waterdrop/version.rb
|
165
130
|
- log/.gitkeep
|
166
131
|
- waterdrop.gemspec
|
167
|
-
homepage: https://
|
132
|
+
homepage: https://karafka.io
|
168
133
|
licenses:
|
169
|
-
-
|
170
|
-
metadata:
|
134
|
+
- MIT
|
135
|
+
metadata:
|
136
|
+
source_code_uri: https://github.com/karafka/waterdrop
|
137
|
+
rubygems_mfa_required: 'true'
|
171
138
|
post_install_message:
|
172
139
|
rdoc_options: []
|
173
140
|
require_paths:
|
@@ -176,14 +143,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
176
143
|
requirements:
|
177
144
|
- - ">="
|
178
145
|
- !ruby/object:Gem::Version
|
179
|
-
version: 2.
|
146
|
+
version: '2.7'
|
180
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
148
|
requirements:
|
182
149
|
- - ">="
|
183
150
|
- !ruby/object:Gem::Version
|
184
151
|
version: '0'
|
185
152
|
requirements: []
|
186
|
-
rubygems_version: 3.
|
153
|
+
rubygems_version: 3.3.7
|
187
154
|
signing_key:
|
188
155
|
specification_version: 4
|
189
156
|
summary: Kafka messaging made easy!
|
metadata.gz.sig
CHANGED
Binary file
|
data/.github/FUNDING.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
open_collective: karafka
|