sidekiq_unique_digests_cleaner 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 48bf93582c3e38a30fa28b65f809af8a7a9521f7651d81a28f1a88bbc99c1941
4
+ data.tar.gz: 22aa7ea6e3b7a3dea32e2144f3ef0ecd4d663260c3049807246ca4be03d03bda
5
+ SHA512:
6
+ metadata.gz: 837c97acfb260f73c2db60262195734cf7d008136a4773bb8eb289b926c4fec459e44dca1688c8221301cca797a7a8d9b51d5e9fff976594b3263502ab9a185c
7
+ data.tar.gz: 549767d0e7482bd370ec25b74dce9c8c6fbedcb2ff4228ad3a58e20da702b79babe40dc77c9e91960b66e471955dc13bd16e597de4050b5eda0f16686ab7aede
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SidekiqUniqueDigestsCleaner
4
+ def self.clean_unique_digests
5
+ Sidekiq.logger.info('######## Starting cleaning up locked unique digests...')
6
+ digests = stuck_digests
7
+ if digests.any?
8
+ Sidekiq.logger.info('######## Looks like those digests are stuck: ' + digests.join(', '))
9
+ Sidekiq.logger.info('######## Unlocking digests...')
10
+ digests.map { |digest| SidekiqUniqueJobs::Digests.del(digest: digest) }
11
+ Sidekiq.logger.info('######## Unlocked!')
12
+ else
13
+ Sidekiq.logger.info('######## What is the nice day! Nothing to unlock.')
14
+ end
15
+ end
16
+
17
+ def self.stuck_digests
18
+ digests_with_lock = [
19
+ Sidekiq::ScheduledSet.new.map(&:value),
20
+ Sidekiq::RetrySet.new.map(&:value),
21
+ Sidekiq::Queue.all.map { |queue| queue.map(&:value) },
22
+ Sidekiq::Workers.new.map { |_pid, _tid, job| job.value },
23
+ ].flatten.map { |job_value| JSON.parse(job_value, symbolize_names: true)[:unique_digest] }
24
+ SidekiqUniqueJobs::Digests.all - digests_with_lock
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sidekiq_unique_digests_cleaner
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Max Honcharov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sidekiq-unique-jobs
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '6.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '6.0'
27
+ description:
28
+ email: mxgoncharov@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/sidekiq_unique_digests_cleaner.rb
34
+ homepage: https://rubygems.org/gems/sidekiq_unique_digests_cleaner
35
+ licenses:
36
+ - MIT
37
+ metadata:
38
+ source_code_uri: https://github.com/mxhoncharov/sidekiq_unique_digests_cleaner
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubygems_version: 3.0.6
55
+ signing_key:
56
+ specification_version: 4
57
+ summary: Tool for cleaning unique digests which were stuck because of SIGKILL or any
58
+ other accident.
59
+ test_files: []