hanami-events-cloud_pubsub 3.1.1 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49a7d1c90e1e14b61aed89764e006780686f58394810ed4f58ae2be580325fed
4
- data.tar.gz: 9839accaae0d4057c2b2acdeb8a88f35958343510f05d16edd97fc41c523bfe4
3
+ metadata.gz: cedb970c9a8160f1d3b1e1c41dd87b5bfb8d35cb29872694af944110f681b7fc
4
+ data.tar.gz: 277273b17749ba058a545f1caadc3819688964c9fccaaf34a1774b7445f4b86f
5
5
  SHA512:
6
- metadata.gz: 1fcf93deb007707ebb82693a764cffa7d866056a28c56dd0c74b653ee80a29ca4e9ab71e6e9f35a6c883bfa45c7f87572eff63902ce27139807fc53345c72d65
7
- data.tar.gz: 3ea0abe9e5bbab02d93c6ad649c29a7e091abdb22cfae66b50fcbee1735cc044966280664ef69475f47bcf1ac254c1406f8fed855ee38f87939a2baf0c83b51a
6
+ metadata.gz: 2f76c43c7a07b590e9c9f6b7e8839d5ab37266c4b353099bfc1a872308db646c5a4421a3185c13e20d55a80e7a67242fac975824b29de4f0afee51a6af1e2d6f
7
+ data.tar.gz: af41acad939eabcf399b7f7936b54a99f173a00da497991929de64ebb00dbd3b0da8f48f917dfc1f8b818227671744631b6d6e260c4706c4a901086d479d1f1f
@@ -54,7 +54,7 @@ module Hanami
54
54
  # @param id [String] A unique identifier for the subscriber
55
55
  # @param subscriber_opts [String] Additional options for the subscriber
56
56
  # @param block [Block] to execute when event is broadcasted
57
- def subscribe(name, id:, **subscriber_opts, &block)
57
+ def subscribe(name, id:, auto_ack: true, **subscriber_opts, &block)
58
58
  event_name = namespaced(name)
59
59
  namespaced_id = namespaced(id)
60
60
 
@@ -64,7 +64,7 @@ module Hanami
64
64
  @subscribers << sub
65
65
  topic = topic_for event_name
66
66
 
67
- register_listener(event_name, topic, namespaced_id, subscriber_opts)
67
+ register_listener(event_name, topic, namespaced_id, auto_ack, subscriber_opts)
68
68
  end
69
69
 
70
70
  def flush_messages
@@ -76,7 +76,7 @@ module Hanami
76
76
 
77
77
  attr_reader :logger
78
78
 
79
- def register_listener(event_name, topic, subscriber_id, subscriber_opts)
79
+ def register_listener(event_name, topic, subscriber_id, auto_ack, subscriber_opts)
80
80
  listener = ::Hanami::Events::CloudPubsub::Listener.new(
81
81
  subscriber_id: subscriber_id,
82
82
  event_name: event_name,
@@ -84,7 +84,8 @@ module Hanami
84
84
  logger: logger,
85
85
  topic: topic,
86
86
  subscriber_opts: subscriber_opts,
87
- dead_letter_topic: dead_letter_topic
87
+ dead_letter_topic: dead_letter_topic,
88
+ auto_ack: auto_ack
88
89
  )
89
90
 
90
91
  @listeners << listener
@@ -7,7 +7,6 @@ require 'hanami/events/cloud_pubsub/middleware/stack'
7
7
  require 'hanami/events/cloud_pubsub/middleware/logging'
8
8
  require 'hanami/events/cloud_pubsub/runner'
9
9
  require 'hanami/events/cloud_pubsub/errors'
10
- require 'google/cloud/pubsub'
11
10
  require 'dry-configurable'
12
11
 
13
12
  module Hanami
@@ -97,6 +96,7 @@ module Hanami
97
96
  end
98
97
 
99
98
  def self.finalize_settings!
99
+ require 'google/cloud/pubsub'
100
100
  conf_hash = config.pubsub
101
101
  conf_hash.each { |key, val| Google::Cloud::Pubsub.configure[key] = val }
102
102
  end
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'hanami/cli'
4
- require 'hanami/events/cloud_pubsub'
5
- require 'hanami/events/cloud_pubsub/health_check_server'
6
4
 
7
5
  module Hanami
8
6
  module Events
@@ -55,6 +53,7 @@ module Hanami
55
53
  end
56
54
 
57
55
  def start_server
56
+ require 'hanami/events/cloud_pubsub/health_check_server'
58
57
  server = HealthCheckServer.new(runner, logger)
59
58
  on_shutdown = proc { @event_queue << proc { shutdown } }
60
59
  server.run_in_background(on_shutdown: on_shutdown)
@@ -77,6 +76,7 @@ module Hanami
77
76
  def start_runner
78
77
  logger.debug 'Running in emulator mode' if @emulator
79
78
  logger.info "Starting worker (pid: #{Process.pid})"
79
+ GC.compact if GC.respond_to?(:compact)
80
80
  runner.start
81
81
  end
82
82
 
@@ -86,13 +86,14 @@ module Hanami
86
86
  end
87
87
 
88
88
  def build_runner
89
+ require 'hanami/events/cloud_pubsub'
89
90
  Hanami::Components.resolve 'events'
90
91
  events = Hanami::Components['events']
91
92
  @runner = Runner.new(logger: logger, adapter: events.adapter)
92
93
  end
93
94
 
94
95
  def logger
95
- CloudPubsub.logger
96
+ Hanami::Events::CloudPubsub.logger
96
97
  end
97
98
 
98
99
  def setup_signal_handlers
@@ -54,7 +54,6 @@ module Hanami
54
54
 
55
55
  Rack::Builder.new do |builder|
56
56
  builder.use Rack::Deflater
57
- require 'pry'
58
57
  builder.use Yabeda::Prometheus::Exporter if defined?(Yabeda::Prometheus::Exporter)
59
58
 
60
59
  builder.run health_endpoint_app
@@ -33,11 +33,10 @@ module Hanami
33
33
  conf.cloud_pubsub.each { |blk| blk.call(config) }
34
34
  end
35
35
 
36
- ::Hanami::Events.initialize(
37
- :cloud_pubsub,
38
- pubsub: Google::Cloud::Pubsub.new,
39
- logger: Hanami::Components['logger']
40
- )
36
+ require 'google/cloud/pubsub'
37
+
38
+ opts = { pubsub: Google::Cloud::Pubsub.new, logger: Hanami::Components['logger'] }
39
+ ::Hanami::Events.initialize(:cloud_pubsub, **opts)
41
40
  end
42
41
  end
43
42
  end
@@ -26,6 +26,7 @@ module Hanami
26
26
  subscriber_id:,
27
27
  subscriber_opts: {},
28
28
  middleware: CloudPubsub.config.middleware,
29
+ auto_ack: true,
29
30
  dead_letter_topic: nil)
30
31
  @topic = topic
31
32
  @logger = logger
@@ -35,12 +36,13 @@ module Hanami
35
36
  @input_subscriber_opts = subscriber_opts
36
37
  @middleware = middleware
37
38
  @dead_letter_topic = dead_letter_topic
39
+ @auto_ack = auto_ack
38
40
  end
39
41
  # rubocop:enable Metrics/ParameterLists
40
42
 
41
43
  def register
42
44
  subscription = subscription_for(subscriber_id)
43
- apply_retry_options(subscription)
45
+ apply_subscription_options(subscription)
44
46
  listener = subscription.listen(**subscriber_options) { |m| handle_message(m) }
45
47
  logger.debug("Registered listener for #{subscriber_id} with: #{subscriber_options}")
46
48
 
@@ -86,7 +88,7 @@ module Hanami
86
88
 
87
89
  def run_handler(message)
88
90
  middleware.invoke(message) { handler.call(message) }
89
- message.ack!
91
+ message.ack! if @auto_ack
90
92
  rescue StandardError => e
91
93
  run_error_handlers(e, message.message_id.to_s)
92
94
  message.nack! if CloudPubsub.config.auto_retry.enabled
@@ -133,21 +135,38 @@ module Hanami
133
135
  }
134
136
  end
135
137
 
136
- def apply_retry_options(sub)
137
- retry_policy = build_retry_policy
138
+ def apply_subscription_options(sub)
139
+ apply_deadline_options(sub)
140
+ apply_retry_options(sub)
141
+ apply_dead_letter_options(sub)
142
+ rescue StandardError => e
143
+ run_error_handlers(e, nil)
144
+ end
145
+
146
+ def apply_deadline_options(sub)
147
+ sub.deadline = subscriber_options[:deadline] if sub.deadline != subscriber_options[:deadline]
148
+ rescue StandardError => e
149
+ run_error_handlers(e, nil)
150
+ end
151
+
152
+ def apply_dead_letter_options(sub)
138
153
  attempts = CloudPubsub.config.auto_retry.max_attempts
139
154
 
140
- sub.retry_policy = retry_policy if sub.retry_policy&.to_grpc != retry_policy&.to_grpc
141
155
  sub.dead_letter_topic = dead_letter_topic if sub.dead_letter_topic&.name != dead_letter_topic&.name
142
156
  sub.dead_letter_max_delivery_attempts = attempts if sub.dead_letter_topic&.name != dead_letter_topic&.name
157
+ rescue StandardError => e
158
+ run_error_handlers(e, nil)
159
+ end
143
160
 
144
- sub
161
+ def apply_retry_options(sub)
162
+ retry_policy = build_retry_policy
163
+ sub.retry_policy = retry_policy if sub.retry_policy&.to_grpc != retry_policy&.to_grpc
145
164
  rescue StandardError => e
146
165
  run_error_handlers(e, nil)
147
166
  end
148
167
 
149
168
  def build_retry_policy
150
- return unless CloudPubsub.config.auto_retry.enabled
169
+ return unless Hanami::Events::CloudPubsub.config.auto_retry.enabled
151
170
 
152
171
  Google::Cloud::PubSub::RetryPolicy.new(
153
172
  minimum_backoff: CloudPubsub.config.auto_retry.minimum_backoff,
@@ -3,7 +3,7 @@
3
3
  module Hanami
4
4
  module Events
5
5
  module CloudPubsub
6
- VERSION = '3.1.1'
6
+ VERSION = '3.2.1'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-events-cloud_pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Ker-Seymer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-26 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-configurable