delivery_boy 1.3.1 → 2.0.0.alpha.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/CODEOWNERS +4 -0
- data/.github/workflows/ci.yml +12 -10
- data/.rspec +1 -1
- data/.standard.yml +1 -0
- data/CHANGELOG +50 -1
- data/Gemfile +6 -0
- data/README.md +93 -45
- data/Rakefile +6 -1
- data/SECURITY.md +5 -0
- data/delivery_boy.gemspec +11 -12
- data/lib/delivery_boy/config.rb +74 -7
- data/lib/delivery_boy/config_error.rb +0 -1
- data/lib/delivery_boy/datadog.rb +192 -0
- data/lib/delivery_boy/fake.rb +3 -4
- data/lib/delivery_boy/instance.rb +301 -68
- data/lib/delivery_boy/instrumenter.rb +26 -0
- data/lib/delivery_boy/railtie.rb +10 -5
- data/lib/delivery_boy/version.rb +1 -1
- data/lib/delivery_boy.rb +23 -13
- metadata +15 -10
data/lib/delivery_boy/version.rb
CHANGED
data/lib/delivery_boy.rb
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "logger"
|
|
2
|
-
require "kafka"
|
|
3
4
|
require "delivery_boy/version"
|
|
5
|
+
require "delivery_boy/instrumenter"
|
|
4
6
|
require "delivery_boy/instance"
|
|
5
7
|
require "delivery_boy/fake"
|
|
6
8
|
require "delivery_boy/config"
|
|
7
9
|
require "delivery_boy/config_error"
|
|
8
10
|
require "delivery_boy/railtie" if defined?(Rails::Railtie)
|
|
11
|
+
require "rdkafka"
|
|
9
12
|
|
|
10
13
|
module DeliveryBoy
|
|
11
14
|
class << self
|
|
12
|
-
|
|
13
15
|
# Write a message to a specified Kafka topic synchronously.
|
|
14
16
|
#
|
|
15
17
|
# Keep in mind that the client will block until the message has been
|
|
@@ -23,20 +25,19 @@ module DeliveryBoy
|
|
|
23
25
|
# @param partition_key [String, nil] a key used to deterministically assign
|
|
24
26
|
# a partition to the message.
|
|
25
27
|
# @return [nil]
|
|
26
|
-
# @raise [
|
|
27
|
-
# @raise [Kafka::DeliveryFailed] if delivery failed for some reason.
|
|
28
|
+
# @raise [Rdkafka::RdkafkaError] if delivery failed for some reason.
|
|
28
29
|
def deliver(value, topic:, **options)
|
|
29
30
|
instance.deliver(value, topic: topic, **options)
|
|
30
31
|
end
|
|
31
32
|
|
|
32
|
-
# Like {.deliver_async!}, but handles +
|
|
33
|
+
# Like {.deliver_async!}, but handles +Rdkafka::RdkafkaError+ errors
|
|
33
34
|
# by logging them and just going on with normal business.
|
|
34
35
|
#
|
|
35
36
|
# @return [nil]
|
|
36
37
|
def deliver_async(value, topic:, **options)
|
|
37
38
|
deliver_async!(value, topic: topic, **options)
|
|
38
|
-
rescue
|
|
39
|
-
logger.error "Message for `#{topic}` dropped due to
|
|
39
|
+
rescue Rdkafka::RdkafkaError => e
|
|
40
|
+
logger.error "Message for `#{topic}` dropped due to error: #{e.message}"
|
|
40
41
|
end
|
|
41
42
|
|
|
42
43
|
# Like {.deliver}, but returns immediately.
|
|
@@ -48,14 +49,14 @@ module DeliveryBoy
|
|
|
48
49
|
instance.deliver_async!(value, topic: topic, **options)
|
|
49
50
|
end
|
|
50
51
|
|
|
51
|
-
# Like {.produce!}, but handles +
|
|
52
|
+
# Like {.produce!}, but handles +Rdkafka::RdkafkaError+ errors
|
|
52
53
|
# by logging them and just going on with normal business.
|
|
53
54
|
#
|
|
54
55
|
# @return [nil]
|
|
55
56
|
def produce(value, topic:, **options)
|
|
56
57
|
produce!(value, topic: topic, **options)
|
|
57
|
-
rescue
|
|
58
|
-
logger.error "Message for `#{topic}` dropped due to
|
|
58
|
+
rescue Rdkafka::RdkafkaError => e
|
|
59
|
+
logger.error "Message for `#{topic}` dropped due to error: #{e.message}"
|
|
59
60
|
end
|
|
60
61
|
|
|
61
62
|
# Appends the given message to the producer buffer but does not send it until {.deliver_messages} is called.
|
|
@@ -68,7 +69,7 @@ module DeliveryBoy
|
|
|
68
69
|
# @param partition_key [String, nil] a key used to deterministically assign
|
|
69
70
|
# a partition to the message.
|
|
70
71
|
# @return [nil]
|
|
71
|
-
# @raise [
|
|
72
|
+
# @raise [Rdkafka::RdkafkaError] if the producer's buffer is full.
|
|
72
73
|
def produce!(value, topic:, **options)
|
|
73
74
|
instance.produce(value, topic: topic, **options)
|
|
74
75
|
end
|
|
@@ -76,7 +77,7 @@ module DeliveryBoy
|
|
|
76
77
|
# Delivers the items currently in the producer buffer.
|
|
77
78
|
#
|
|
78
79
|
# @return [nil]
|
|
79
|
-
# @raise [
|
|
80
|
+
# @raise [Rdkafka::RdkafkaError] if delivery failed for some reason.
|
|
80
81
|
def deliver_messages
|
|
81
82
|
instance.deliver_messages
|
|
82
83
|
end
|
|
@@ -114,6 +115,15 @@ module DeliveryBoy
|
|
|
114
115
|
|
|
115
116
|
attr_writer :logger
|
|
116
117
|
|
|
118
|
+
# The instrumenter used by DeliveryBoy for emitting metrics.
|
|
119
|
+
#
|
|
120
|
+
# @return [DeliveryBoy::Instrumenter, DeliveryBoy::NullInstrumenter]
|
|
121
|
+
def instrumenter
|
|
122
|
+
@instrumenter ||= NullInstrumenter.new
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
attr_writer :instrumenter
|
|
126
|
+
|
|
117
127
|
# The configuration used by DeliveryBoy.
|
|
118
128
|
#
|
|
119
129
|
# @return [DeliveryBoy::Config]
|
|
@@ -150,7 +160,7 @@ module DeliveryBoy
|
|
|
150
160
|
private
|
|
151
161
|
|
|
152
162
|
def instance
|
|
153
|
-
@instance ||= Instance.new(config, logger)
|
|
163
|
+
@instance ||= Instance.new(config, logger, instrumenter: instrumenter)
|
|
154
164
|
end
|
|
155
165
|
end
|
|
156
166
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: delivery_boy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0.alpha.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Schierbeck
|
|
@@ -10,33 +10,33 @@ cert_chain: []
|
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
|
-
name:
|
|
13
|
+
name: king_konf
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '1.
|
|
18
|
+
version: '1.0'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '1.
|
|
25
|
+
version: '1.0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
|
-
name:
|
|
27
|
+
name: rdkafka
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
|
-
- - "
|
|
30
|
+
- - ">"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '0.11'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- - "
|
|
37
|
+
- - ">"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
39
|
+
version: '0.11'
|
|
40
40
|
description: A simple way to produce messages to Kafka from Ruby applications
|
|
41
41
|
email:
|
|
42
42
|
- daniel.schierbeck@gmail.com
|
|
@@ -44,16 +44,19 @@ executables: []
|
|
|
44
44
|
extensions: []
|
|
45
45
|
extra_rdoc_files: []
|
|
46
46
|
files:
|
|
47
|
+
- ".github/CODEOWNERS"
|
|
47
48
|
- ".github/workflows/ci.yml"
|
|
48
49
|
- ".github/workflows/publish.yml"
|
|
49
50
|
- ".github/workflows/stale.yml"
|
|
50
51
|
- ".gitignore"
|
|
51
52
|
- ".rspec"
|
|
53
|
+
- ".standard.yml"
|
|
52
54
|
- CHANGELOG
|
|
53
55
|
- Gemfile
|
|
54
56
|
- LICENSE.txt
|
|
55
57
|
- README.md
|
|
56
58
|
- Rakefile
|
|
59
|
+
- SECURITY.md
|
|
57
60
|
- bin/console
|
|
58
61
|
- bin/setup
|
|
59
62
|
- delivery_boy.gemspec
|
|
@@ -62,8 +65,10 @@ files:
|
|
|
62
65
|
- lib/delivery_boy.rb
|
|
63
66
|
- lib/delivery_boy/config.rb
|
|
64
67
|
- lib/delivery_boy/config_error.rb
|
|
68
|
+
- lib/delivery_boy/datadog.rb
|
|
65
69
|
- lib/delivery_boy/fake.rb
|
|
66
70
|
- lib/delivery_boy/instance.rb
|
|
71
|
+
- lib/delivery_boy/instrumenter.rb
|
|
67
72
|
- lib/delivery_boy/railtie.rb
|
|
68
73
|
- lib/delivery_boy/rspec.rb
|
|
69
74
|
- lib/delivery_boy/version.rb
|
|
@@ -87,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
87
92
|
- !ruby/object:Gem::Version
|
|
88
93
|
version: '0'
|
|
89
94
|
requirements: []
|
|
90
|
-
rubygems_version: 3.6.
|
|
95
|
+
rubygems_version: 3.6.9
|
|
91
96
|
specification_version: 4
|
|
92
97
|
summary: A simple way to produce messages to Kafka from Ruby applications
|
|
93
98
|
test_files: []
|