sidekiq-pauzer 4.1.0 → 4.2.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 +4 -4
- data/README.adoc +9 -0
- data/lib/sidekiq/pauzer/queues.rb +32 -19
- data/lib/sidekiq/pauzer/version.rb +1 -1
- data/lib/sidekiq/pauzer.rb +1 -3
- data/web/views/queues.erb +2 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0cfd697bb2a9f06be2bd59ef44bbb4ffc6f5bcf073d67117e5f4df50f04774c
|
4
|
+
data.tar.gz: 1b2712b8d2bec0253e32386d966798b76e7d33f2590833761c3c3d231631bbb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38beb5711a6a1eef4aa51cc538642e4de4dd7c5a51a12c8bd2084430034da09b4b0c6fea78a9da14192372319735fd53ce76ed92a47b9b4a4957ff8112df0fc7
|
7
|
+
data.tar.gz: 052b517478b5cae0f700cf8f94f044c19398519f5d65c285290e08f6117d70a1fb80ec8a984b0d78bfb1a4c9670d139d9d78e431fc54a70e8a74f08d4238c22d
|
data/README.adoc
CHANGED
@@ -30,6 +30,15 @@ Sidekiq::Pauzer.configure do |config|
|
|
30
30
|
end
|
31
31
|
----
|
32
32
|
|
33
|
+
When running in forked environment (e.g., Puma web server), you also need to
|
34
|
+
call `Sidekiq::Pauzer.startup` on fork:
|
35
|
+
|
36
|
+
[source, ruby]
|
37
|
+
----
|
38
|
+
# file: config/puma.rb
|
39
|
+
on_worker_boot { Sidekiq::Pauzer.startup }
|
40
|
+
----
|
41
|
+
|
33
42
|
=== API
|
34
43
|
|
35
44
|
This gem enhances Sidekiq's Queue API with:
|
@@ -1,40 +1,50 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "forwardable"
|
3
4
|
require "concurrent"
|
4
5
|
|
5
6
|
module Sidekiq
|
6
7
|
module Pauzer
|
7
8
|
# @api internal
|
8
9
|
class Queues
|
10
|
+
extend Forwardable
|
9
11
|
include Enumerable
|
10
12
|
|
11
|
-
|
13
|
+
# @!attribute [r] redis_key
|
14
|
+
# @see (Config#redis_key)
|
15
|
+
def_delegators :@config, :redis_key
|
16
|
+
|
17
|
+
# @!attribute [r] refresh_rate
|
18
|
+
# @see (Config#refresh_rate)
|
19
|
+
def_delegators :@config, :refresh_rate
|
12
20
|
|
13
21
|
# @param config [Config]
|
14
22
|
def initialize(config)
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
23
|
+
@names = [].freeze
|
24
|
+
@config = config
|
25
|
+
@init_mutex = Mutex.new
|
26
|
+
@poll_mutex = Mutex.new
|
27
|
+
@refresher = nil
|
19
28
|
end
|
20
29
|
|
21
30
|
def each(&block)
|
22
31
|
return to_enum __method__ unless block
|
23
32
|
|
24
|
-
|
33
|
+
start_refresher unless refresher_running?
|
34
|
+
@poll_mutex.synchronize { @names.dup }.each(&block)
|
25
35
|
|
26
36
|
self
|
27
37
|
end
|
28
38
|
|
29
39
|
# @param name [#to_s]
|
30
40
|
def pause!(name)
|
31
|
-
Sidekiq.redis { |conn| conn.call("SADD",
|
41
|
+
Sidekiq.redis { |conn| conn.call("SADD", redis_key, name.to_s) }
|
32
42
|
refresh
|
33
43
|
end
|
34
44
|
|
35
45
|
# @param name [#to_s]
|
36
46
|
def unpause!(name)
|
37
|
-
Sidekiq.redis { |conn| conn.call("SREM",
|
47
|
+
Sidekiq.redis { |conn| conn.call("SREM", redis_key, name.to_s) }
|
38
48
|
refresh
|
39
49
|
end
|
40
50
|
|
@@ -45,33 +55,36 @@ module Sidekiq
|
|
45
55
|
end
|
46
56
|
|
47
57
|
def start_refresher
|
48
|
-
@
|
58
|
+
@init_mutex.synchronize do
|
59
|
+
@refresher ||= Concurrent::TimerTask.new(execution_interval: refresh_rate, run_now: true) do
|
60
|
+
refresh
|
61
|
+
end
|
62
|
+
|
63
|
+
@refresher.execute
|
64
|
+
end
|
49
65
|
|
50
66
|
self
|
51
67
|
end
|
52
68
|
|
53
69
|
def stop_refresher
|
54
|
-
@
|
70
|
+
@init_mutex.synchronize do
|
71
|
+
@refresher&.shutdown
|
72
|
+
@refresher = nil
|
73
|
+
end
|
55
74
|
|
56
75
|
self
|
57
76
|
end
|
58
77
|
|
59
78
|
def refresher_running?
|
60
|
-
@refresher
|
79
|
+
@init_mutex.synchronize { @refresher&.running? || false }
|
61
80
|
end
|
62
81
|
|
63
82
|
private
|
64
83
|
|
65
|
-
def initialize_refresher(refresh_rate)
|
66
|
-
Refresher.new(execution_interval: refresh_rate, run_now: true) do
|
67
|
-
refresh
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
84
|
def refresh
|
72
|
-
names = Sidekiq.redis { |conn| conn.call("SMEMBERS",
|
85
|
+
names = Sidekiq.redis { |conn| conn.call("SMEMBERS", redis_key).to_a }
|
73
86
|
|
74
|
-
@
|
87
|
+
@poll_mutex.synchronize { @names = names.each(&:freeze).freeze }
|
75
88
|
|
76
89
|
self
|
77
90
|
end
|
data/lib/sidekiq/pauzer.rb
CHANGED
@@ -108,7 +108,7 @@ module Sidekiq
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def startup
|
111
|
-
MUTEX.synchronize {
|
111
|
+
MUTEX.synchronize { reinit_queues.start_refresher }
|
112
112
|
|
113
113
|
self
|
114
114
|
end
|
@@ -122,10 +122,8 @@ module Sidekiq
|
|
122
122
|
private
|
123
123
|
|
124
124
|
def reinit_queues
|
125
|
-
start_refresher = @queues.refresher_running?
|
126
125
|
@queues.stop_refresher
|
127
126
|
@queues = Queues.new(@config)
|
128
|
-
@queues.start_refresher if start_refresher
|
129
127
|
end
|
130
128
|
end
|
131
129
|
end
|
data/web/views/queues.erb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-pauzer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Zapparov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -63,9 +63,9 @@ licenses:
|
|
63
63
|
- MIT
|
64
64
|
metadata:
|
65
65
|
homepage_uri: https://gitlab.com/ixti/sidekiq-pauzer
|
66
|
-
source_code_uri: https://gitlab.com/ixti/sidekiq-pauzer/tree/v4.
|
66
|
+
source_code_uri: https://gitlab.com/ixti/sidekiq-pauzer/tree/v4.2.0
|
67
67
|
bug_tracker_uri: https://gitlab.com/ixti/sidekiq-pauzer/issues
|
68
|
-
changelog_uri: https://gitlab.com/ixti/sidekiq-pauzer/blob/v4.
|
68
|
+
changelog_uri: https://gitlab.com/ixti/sidekiq-pauzer/blob/v4.2.0/CHANGES.md
|
69
69
|
rubygems_mfa_required: 'true'
|
70
70
|
post_install_message:
|
71
71
|
rdoc_options: []
|