sbmt-outbox 6.15.0 → 6.16.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 89c324ebe083d7dece71ae19ee9011a8da91843b31997ddbde85722e9f8209a5
4
- data.tar.gz: fedd73ddecdfc54da1728bf19cdce13632e40ada5c94047a783d15a7e82370f1
3
+ metadata.gz: 86044914d6babd961a882ecfd9394875e0b67f74a2b92f44db48480bb5096448
4
+ data.tar.gz: 3ae09e5801c2dcacc9096bae5c2428f2c57445394dd5a3d036c58b1fa63121d2
5
5
  SHA512:
6
- metadata.gz: 671f178a2b39285be8adb846ce823652cf1c6f2a68f4ce7e7e327015ea69b22858f95bd8403a637bd38c8ebd981e1423341d420bd308f2fae0d8f9bf151550cb
7
- data.tar.gz: bea9bbb10ced61b77814e708528deada7058cf7afc8c90726d3d2c4068c619a1ddecb39e5caa836b9620dcfa9fda28cc20e3d4a083e8a83163f6146d9b28b00b
6
+ metadata.gz: 9f180114bce2540c91f6c942195fa59c51bcfea67bd984ee5b7db19fd95653933492ce30f7890833e879469b2bb08ca5bcfad2b5a8efa8221eae904b2839a42f
7
+ data.tar.gz: e9aeadbc87d76a0f86c7b7c9ddad157c45851e3941901bf4ff249c116a7d32827645157ed644709ba59756569af0d9637e0b66c0c9b0c10937ba6b5878ac740d
data/README.md CHANGED
@@ -493,6 +493,7 @@ You can wrap item processing within middlewares. There are three types:
493
493
  - server middlewares – triggered inside a daemon; divided into two types:
494
494
  - batch middlewares – executed alongside a batch being fetched from the database
495
495
  - item middlewares – execute alongside an item during processing
496
+ - polling middlewares - execute with element during pooling
496
497
 
497
498
  The order of execution depends on the order specified in the outbox configuration:
498
499
 
@@ -580,6 +581,25 @@ class MyItemMiddleware
580
581
  end
581
582
  ```
582
583
 
584
+ Example of an polling middleware:
585
+
586
+ ```ruby
587
+ # config/initializers/outbox.rb
588
+ Rails.application.config.outbox.tap do |config|
589
+ config.polling_item_middlewares.push(
590
+ 'MyItemMiddleware'
591
+ )
592
+ end
593
+
594
+ # my_create_polling_middleware.rb
595
+ class MyPollingItemMiddleware
596
+ def call(item)
597
+ # your code
598
+ yield
599
+ # your code
600
+ end
601
+ end
602
+
583
603
  ## Tracing
584
604
 
585
605
  The gem is optionally integrated with OpenTelemetry. If your main application has `opentelemetry-*` gems, the tracing will be configured automatically.
@@ -64,6 +64,7 @@ module Sbmt
64
64
  c.item_process_middlewares = []
65
65
  c.create_item_middlewares = []
66
66
  c.create_batch_middlewares = []
67
+ c.polling_item_middlewares = []
67
68
 
68
69
  if defined?(::Sentry)
69
70
  c.batch_process_middlewares.push("Sbmt::Outbox::Middleware::Sentry::TracingBatchProcessMiddleware")
@@ -10,9 +10,9 @@ module Sbmt
10
10
  module Outbox
11
11
  module V2
12
12
  class Poller < BoxProcessor
13
- delegate :poller_config, :logger, to: "Sbmt::Outbox"
13
+ delegate :poller_config, :polling_item_middlewares, :logger, to: "Sbmt::Outbox"
14
14
  delegate :box_worker, to: "Yabeda"
15
- attr_reader :partitions_count, :lock_timeout, :regular_items_batch_size, :retryable_items_batch_size, :max_buffer_size, :max_batch_size, :throttler
15
+ attr_reader :partitions_count, :lock_timeout, :regular_items_batch_size, :retryable_items_batch_size, :max_buffer_size, :max_batch_size, :throttler, :middleware_builder
16
16
 
17
17
  def initialize(
18
18
  boxes,
@@ -35,6 +35,7 @@ module Sbmt
35
35
  super(boxes: boxes, threads_count: threads_count || poller_config.threads_count, name: "poller", redis: redis)
36
36
 
37
37
  @throttler = PollThrottler.build(throttler_tactic || poller_config.tactic || "default", self.redis, poller_config)
38
+ @middleware_builder = Middleware::Builder.new(polling_item_middlewares)
38
39
  end
39
40
 
40
41
  def throttle(worker_number, poll_task, result)
@@ -42,7 +43,7 @@ module Sbmt
42
43
  end
43
44
 
44
45
  def process_task(_worker_number, task)
45
- poll(task)
46
+ middleware_builder.call(task) { poll(task) }
46
47
  end
47
48
 
48
49
  private
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sbmt
4
4
  module Outbox
5
- VERSION = "6.15.0"
5
+ VERSION = "6.16.0"
6
6
  end
7
7
  end
data/lib/sbmt/outbox.rb CHANGED
@@ -170,5 +170,9 @@ module Sbmt
170
170
  def create_batch_middlewares
171
171
  @create_batch_middlewares ||= config.create_batch_middlewares.map(&:constantize)
172
172
  end
173
+
174
+ def polling_item_middlewares
175
+ @polling_item_middlewares ||= config.polling_item_middlewares.map(&:constantize)
176
+ end
173
177
  end
174
178
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sbmt-outbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.15.0
4
+ version: 6.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sbermarket Ruby-Platform Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-23 00:00:00.000000000 Z
11
+ date: 2025-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool