sbmt-outbox 6.14.0 → 6.15.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: 2616bf630410714a263f3eea95a7c98af5568018386d0792b8af8ac8de9572b2
4
- data.tar.gz: 711b190d7c2d45ae1e66f07e60d9742fea6d2f9d0eae07431756da99bbc71e83
3
+ metadata.gz: 89c324ebe083d7dece71ae19ee9011a8da91843b31997ddbde85722e9f8209a5
4
+ data.tar.gz: fedd73ddecdfc54da1728bf19cdce13632e40ada5c94047a783d15a7e82370f1
5
5
  SHA512:
6
- metadata.gz: 8af881dffaa9802491a6764f471a6fedaac2ea5766e1f2c6749a1b6f5523f74f5f2239025b6d1e48fd985243556569b1670ed80d5aeb92f0a40ae67c2254a777
7
- data.tar.gz: 543ad28b03629931934332ef0f62a6190a90159c0aa45ef3800c09472a824bfd474f270a5c9d27df2879ace34d2f03bbc92206381476568313254cf8db34a70a
6
+ metadata.gz: 671f178a2b39285be8adb846ce823652cf1c6f2a68f4ce7e7e327015ea69b22858f95bd8403a637bd38c8ebd981e1423341d420bd308f2fae0d8f9bf151550cb
7
+ data.tar.gz: bea9bbb10ced61b77814e708528deada7058cf7afc8c90726d3d2c4068c619a1ddecb39e5caa836b9620dcfa9fda28cc20e3d4a083e8a83163f6146d9b28b00b
data/README.md CHANGED
@@ -439,6 +439,42 @@ outbox_items:
439
439
  partition_strategy: hash
440
440
  ```
441
441
 
442
+ ## Rake tasks
443
+
444
+ ```shell
445
+ rake outbox:delete_items
446
+ rake outbox:update_status_items
447
+ ```
448
+
449
+ Example run:
450
+ ```shell
451
+ rake outbox:delete_items[OutboxItem,1] # Mandatory parameters box class and status
452
+ rake outbox:update_status_items[OutboxItem,0,3] # Mandatory parameters box class, current status and new status
453
+
454
+ ```
455
+
456
+ Both tasks have optional parameters:
457
+ ```ruby
458
+ - start_time # boxes are younger than the specified time, by default nil, time is specified in the format "2025-01-05T23:59:59"
459
+ - end_time # boxes are older than the specified time, by default 6.hours.ago, time is specified in the format "2025-01-05T23:59:59"
460
+ - batch_size # batch size, by default 1_000
461
+ - sleep_time # sleep time between batches, by default 0.5
462
+ ```
463
+
464
+ Example with optional parameters:
465
+ - format optional parameters:
466
+ ```shell
467
+ rake outbox:delete_items[klass_name,status,start_time,end_time,batch_size,sleep_time]
468
+
469
+ rake outbox:update_status_items[klass_name,status,new_status,start_time,end_time,batch_size,sleep_time]
470
+ ```
471
+ - example:
472
+ ```shell
473
+ rake outbox:delete_items[OutboxItem,1,"2025-01-05T23:59:59","2025-01-05T00:00:00",10_000,5]
474
+
475
+ rake outbox:update_status_items[OutboxItem,0,3,"2025-01-05T23:59:59","2025-01-05T00:00:00",10_000,5]
476
+ ```
477
+
442
478
  ## Concurrency
443
479
 
444
480
  The worker process consists of a poller and a processor, each of which has its own thread pool.
@@ -79,6 +79,8 @@ module Sbmt
79
79
  rake_tasks do
80
80
  load "sbmt/outbox/tasks/retry_failed_items.rake"
81
81
  load "sbmt/outbox/tasks/delete_failed_items.rake"
82
+ load "sbmt/outbox/tasks/delete_items.rake"
83
+ load "sbmt/outbox/tasks/update_status_items.rake"
82
84
  end
83
85
  end
84
86
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :outbox do
4
+ desc "Delete outbox/inbox items"
5
+ task :delete_items, [:klass_name, :status, :start_time, :end_time, :batch_size, :sleep_time] => :environment do |_, args|
6
+ args.with_defaults(start_time: nil, end_time: 6.hours.ago, batch_size: 1000, sleep_time: 0.5)
7
+
8
+ klass_name = args[:klass_name]
9
+ status = args[:status]
10
+ start_time = args[:start_time]
11
+ end_time = args[:end_time]
12
+ batch_size = args[:batch_size]
13
+ sleep_time = args[:sleep_time]
14
+
15
+ unless klass_name && status
16
+ raise "Error: Class and status must be specified. Example: rake outbox:delete_items[OutboxItem,1]"
17
+ end
18
+
19
+ klass_name = klass_name.constantize
20
+ query = klass_name.where(status: status)
21
+
22
+ if start_time && end_time
23
+ query = query.where(created_at: start_time..end_time)
24
+ elsif start_time
25
+ query = query.where(created_at: start_time..)
26
+ elsif end_time
27
+ query = query.where(created_at: ..end_time)
28
+ end
29
+
30
+ total_deleted = 0
31
+ query.in_batches(of: batch_size) do |batch|
32
+ deleted_count = batch.delete_all
33
+
34
+ Rails.logger.info("Batch items deleted: #{deleted_count}")
35
+
36
+ total_deleted += deleted_count
37
+
38
+ sleep sleep_time
39
+ end
40
+
41
+ Rails.logger.info("Total items deleted: #{total_deleted}")
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :outbox do
4
+ desc "Update status of outbox/inbox items"
5
+ task :update_status_items, [:klass_name, :status, :new_status, :start_time, :end_time, :batch_size, :sleep_time] => :environment do |_, args|
6
+ args.with_defaults(start_time: nil, end_time: 6.hours.ago, batch_size: 1000, sleep_time: 0.5)
7
+
8
+ klass_name = args[:klass_name]
9
+ status = args[:status]
10
+ new_status = args[:new_status]
11
+ start_time = args[:start_time]
12
+ end_time = args[:end_time]
13
+ batch_size = args[:batch_size]
14
+ sleep_time = args[:sleep_time]
15
+
16
+ unless klass_name && status && new_status
17
+ raise "Error: Class, current status, and new status must be specified. Example: rake outbox:update_status_items[OutboxItem,0,3]"
18
+ end
19
+
20
+ klass_name = klass_name.constantize
21
+ query = klass_name.where(status: status)
22
+
23
+ if start_time && end_time
24
+ query = query.where(created_at: start_time..end_time)
25
+ elsif start_time
26
+ query = query.where(created_at: start_time..)
27
+ elsif end_time
28
+ query = query.where(created_at: ..end_time)
29
+ end
30
+
31
+ total_updated = 0
32
+ query.in_batches(of: batch_size) do |batch|
33
+ updated_count = batch.update_all(status: new_status)
34
+
35
+ Rails.logger.info("Batch items updated: #{updated_count}")
36
+
37
+ total_updated += updated_count
38
+ sleep sleep_time
39
+ end
40
+
41
+ Rails.logger.info("Total items updated: #{total_updated}")
42
+ end
43
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sbmt
4
4
  module Outbox
5
- VERSION = "6.14.0"
5
+ VERSION = "6.15.0"
6
6
  end
7
7
  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.14.0
4
+ version: 6.15.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-20 00:00:00.000000000 Z
11
+ date: 2025-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool
@@ -582,7 +582,9 @@ files:
582
582
  - lib/sbmt/outbox/probes/probe.rb
583
583
  - lib/sbmt/outbox/redis_client_factory.rb
584
584
  - lib/sbmt/outbox/tasks/delete_failed_items.rake
585
+ - lib/sbmt/outbox/tasks/delete_items.rake
585
586
  - lib/sbmt/outbox/tasks/retry_failed_items.rake
587
+ - lib/sbmt/outbox/tasks/update_status_items.rake
586
588
  - lib/sbmt/outbox/v1/thread_pool.rb
587
589
  - lib/sbmt/outbox/v1/throttler.rb
588
590
  - lib/sbmt/outbox/v1/worker.rb