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.
@@ -1,3 +1,3 @@
1
1
  module DeliveryBoy
2
- VERSION = "1.3.1"
2
+ VERSION = "2.0.0.alpha.2"
3
3
  end
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 [Kafka::BufferOverflow] if the producer's buffer is full.
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 +Kafka::BufferOverflow+ errors
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 Kafka::BufferOverflow
39
- logger.error "Message for `#{topic}` dropped due to buffer overflow"
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 +Kafka::BufferOverflow+ errors
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 Kafka::BufferOverflow
58
- logger.error "Message for `#{topic}` dropped due to buffer overflow"
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 [Kafka::BufferOverflow] if the producer's buffer is full.
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 [Kafka::DeliveryFailed] if delivery failed for some reason.
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: 1.3.1
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: ruby-kafka
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.5'
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.5'
25
+ version: '1.0'
26
26
  - !ruby/object:Gem::Dependency
27
- name: king_konf
27
+ name: rdkafka
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "~>"
30
+ - - ">"
31
31
  - !ruby/object:Gem::Version
32
- version: '1.0'
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: '1.0'
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.7
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: []