sidekiq_alive 2.2.2 → 2.3.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/lib/sidekiq_alive/redis/base.rb +14 -2
- data/lib/sidekiq_alive/redis/redis_client_gem.rb +30 -5
- data/lib/sidekiq_alive/redis/redis_gem.rb +18 -14
- data/lib/sidekiq_alive/version.rb +1 -1
- data/lib/sidekiq_alive.rb +27 -11
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 562294aa960a1c1cd11b0a020b0f7cce26f09ee4c2faeb7044e21fd9bf3be8c5
|
4
|
+
data.tar.gz: c31918f4c756cc551a3dcab2ea0d2c781c394e23e463c0a2c72ae68bfb52cd16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 595baafc8b0499bb8f900cdaf3eac250d623ba3b51d65b4510d311b2913b1e0560fc967c63dbeaf9145cab43527a5d133b7af6127492103e0caf8538b61ed55e
|
7
|
+
data.tar.gz: 05deade6b05eb839fb0c6d1c0d08768b2141cc24c61cdd2edc1aa453338b12bc7b5bce3a8d19692968a7f85939541519fb6c70eb759273c1b2fe5afffce8b413
|
@@ -7,7 +7,19 @@ module SidekiqAlive
|
|
7
7
|
raise(NotImplementedError)
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def zadd(set_key, ex, key)
|
11
|
+
raise(NotImplementedError)
|
12
|
+
end
|
13
|
+
|
14
|
+
def zrange(set_key, start, stop)
|
15
|
+
raise(NotImplementedError)
|
16
|
+
end
|
17
|
+
|
18
|
+
def zrangebyscore(set_key, min, max)
|
19
|
+
raise(NotImplementedError)
|
20
|
+
end
|
21
|
+
|
22
|
+
def zrem(set_key, key)
|
11
23
|
raise(NotImplementedError)
|
12
24
|
end
|
13
25
|
|
@@ -16,7 +28,7 @@ module SidekiqAlive
|
|
16
28
|
end
|
17
29
|
|
18
30
|
def ttl(...)
|
19
|
-
|
31
|
+
redis { |r| r.ttl(...) }
|
20
32
|
end
|
21
33
|
end
|
22
34
|
end
|
@@ -7,20 +7,45 @@ module SidekiqAlive
|
|
7
7
|
# Wrapper for `redis-client` gem used by `sidekiq` > 7
|
8
8
|
# https://github.com/redis-rb/redis-client
|
9
9
|
class RedisClientGem < Base
|
10
|
+
def initialize
|
11
|
+
super
|
12
|
+
|
13
|
+
@capsule = Sidekiq.default_configuration.capsules[CAPSULE_NAME]
|
14
|
+
end
|
15
|
+
|
10
16
|
def set(key, time:, ex:)
|
11
|
-
|
17
|
+
redis { |r| r.call("SET", key, time, ex: ex) }
|
12
18
|
end
|
13
19
|
|
14
20
|
def get(key)
|
15
|
-
|
21
|
+
redis { |r| r.call("GET", key) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def zadd(set_key, ex, key)
|
25
|
+
redis { |r| r.call("ZADD", set_key, ex, key) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def zrange(set_key, start, stop)
|
29
|
+
redis { |r| r.call("ZRANGE", set_key, start, stop) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def zrangebyscore(set_key, min, max)
|
33
|
+
redis { |r| r.call("ZRANGEBYSCORE", set_key, min, max) }
|
16
34
|
end
|
17
35
|
|
18
|
-
def
|
19
|
-
|
36
|
+
def zrem(set_key, key)
|
37
|
+
redis { |r| r.call("ZREM", set_key, key) }
|
20
38
|
end
|
21
39
|
|
22
40
|
def delete(key)
|
23
|
-
|
41
|
+
redis { |r| r.call("DEL", key) }
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def redis(&block)
|
47
|
+
# Default to Sidekiq.redis if capsule is not configured yet but redis adapter is accessed
|
48
|
+
(@capsule || Sidekiq).redis(&block)
|
24
49
|
end
|
25
50
|
end
|
26
51
|
end
|
@@ -8,33 +8,37 @@ module SidekiqAlive
|
|
8
8
|
# https://github.com/redis/redis-rb
|
9
9
|
class RedisGem < Base
|
10
10
|
def set(key, time:, ex:)
|
11
|
-
redis.set(key, time, ex: ex)
|
11
|
+
redis { |r| r.set(key, time, ex: ex) }
|
12
12
|
end
|
13
13
|
|
14
14
|
def get(key)
|
15
|
-
redis.get(key)
|
15
|
+
redis { |r| r.get(key) }
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
18
|
+
def zadd(set_key, ex, key)
|
19
|
+
redis { |r| r.zadd(set_key, ex, key) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def zrange(set_key, start, stop)
|
23
|
+
redis { |r| r.zrange(set_key, start, stop) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def zrangebyscore(set_key, min, max)
|
27
|
+
redis { |r| r.zrangebyscore(set_key, min, max) }
|
28
|
+
end
|
21
29
|
|
22
|
-
|
23
|
-
|
24
|
-
keys += found_keys if found_keys
|
25
|
-
break if cursor.to_i == 0
|
26
|
-
end
|
27
|
-
keys
|
30
|
+
def zrem(set_key, key)
|
31
|
+
redis { |r| r.zrem(set_key, key) }
|
28
32
|
end
|
29
33
|
|
30
34
|
def delete(key)
|
31
|
-
redis.del(key)
|
35
|
+
redis { |r| r.del(key) }
|
32
36
|
end
|
33
37
|
|
34
38
|
private
|
35
39
|
|
36
|
-
def redis
|
37
|
-
Sidekiq.redis
|
40
|
+
def redis(&block)
|
41
|
+
Sidekiq.redis(&block)
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
data/lib/sidekiq_alive.rb
CHANGED
@@ -9,25 +9,28 @@ require "sidekiq_alive/helpers"
|
|
9
9
|
require "sidekiq_alive/redis"
|
10
10
|
|
11
11
|
module SidekiqAlive
|
12
|
+
HOSTNAME_REGISTRY = "sidekiq-alive-hostnames"
|
13
|
+
CAPSULE_NAME = "sidekiq-alive"
|
14
|
+
|
12
15
|
class << self
|
13
16
|
def start
|
14
17
|
Sidekiq.configure_server do |sq_config|
|
15
18
|
sq_config.on(:startup) do
|
16
19
|
SidekiqAlive::Worker.sidekiq_options(queue: current_queue)
|
17
|
-
if Helpers.sidekiq_7
|
18
|
-
sq_config.queues
|
19
|
-
else
|
20
|
-
sq_config.respond_to?(:[]) ? sq_config[:queues] : sq_config.options[:queues]
|
21
|
-
end.unshift(current_queue)
|
22
20
|
|
23
|
-
# If no weight is set, webui might not show this queue for given instance/process.
|
24
21
|
if Helpers.sidekiq_7
|
25
|
-
sq_config.
|
22
|
+
sq_config.capsule(CAPSULE_NAME) do |cap|
|
23
|
+
cap.concurrency = 2
|
24
|
+
cap.queues = [current_queue]
|
25
|
+
end
|
26
|
+
else
|
27
|
+
(sq_config.respond_to?(:[]) ? sq_config[:queues] : sq_config.options[:queues]).unshift(current_queue)
|
26
28
|
end
|
27
29
|
|
28
30
|
logger.info(startup_info)
|
29
31
|
|
30
32
|
register_current_instance
|
33
|
+
|
31
34
|
store_alive_key
|
32
35
|
# Passing the hostname argument it's only for debugging enqueued jobs
|
33
36
|
SidekiqAlive::Worker.perform_async(hostname)
|
@@ -63,11 +66,13 @@ module SidekiqAlive
|
|
63
66
|
# Delete any pending jobs for this instance
|
64
67
|
logger.info(shutdown_info)
|
65
68
|
purge_pending_jobs
|
66
|
-
redis.
|
69
|
+
redis.zrem(HOSTNAME_REGISTRY, current_instance_register_key)
|
67
70
|
end
|
68
71
|
|
69
72
|
def registered_instances
|
70
|
-
|
73
|
+
# before we return we make sure we expire old keys
|
74
|
+
expire_old_keys
|
75
|
+
redis.zrange(HOSTNAME_REGISTRY, 0, -1)
|
71
76
|
end
|
72
77
|
|
73
78
|
def purge_pending_jobs
|
@@ -136,6 +141,7 @@ module SidekiqAlive
|
|
136
141
|
port: config.port,
|
137
142
|
ttl: config.time_to_live,
|
138
143
|
queue: current_queue,
|
144
|
+
register_set: HOSTNAME_REGISTRY,
|
139
145
|
liveness_key: current_lifeness_key,
|
140
146
|
register_key: current_instance_register_key,
|
141
147
|
}
|
@@ -144,11 +150,21 @@ module SidekiqAlive
|
|
144
150
|
end
|
145
151
|
|
146
152
|
def successful_startup_text
|
147
|
-
"Successfully started sidekiq-alive, registered with key:
|
153
|
+
"Successfully started sidekiq-alive, registered with key: "\
|
154
|
+
"#{current_instance_register_key} on set #{HOSTNAME_REGISTRY}"
|
155
|
+
end
|
156
|
+
|
157
|
+
def expire_old_keys
|
158
|
+
# we get every key that should be expired by now
|
159
|
+
keys_to_expire = redis.zrangebyscore(HOSTNAME_REGISTRY, 0, Time.now.to_i)
|
160
|
+
# then we remove it
|
161
|
+
keys_to_expire.each { |key| redis.zrem(HOSTNAME_REGISTRY, key) }
|
148
162
|
end
|
149
163
|
|
150
164
|
def register_instance(instance_name)
|
151
|
-
|
165
|
+
expiration = Time.now.to_i + config.registration_ttl.to_i
|
166
|
+
redis.zadd(HOSTNAME_REGISTRY, expiration, instance_name)
|
167
|
+
expire_old_keys
|
152
168
|
end
|
153
169
|
end
|
154
170
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq_alive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrejs Cunskis
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -87,14 +87,14 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
90
|
+
version: '4.0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
97
|
+
version: '4.0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rubocop-shopify
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,7 +213,7 @@ metadata:
|
|
213
213
|
homepage_uri: https://github.com/arturictus/sidekiq_alive
|
214
214
|
source_code_uri: https://github.com/arturictus/sidekiq_alive
|
215
215
|
changelog_uri: https://github.com/arturictus/sidekiq_alive/releases
|
216
|
-
documentation_uri: https://github.com/arturictus/sidekiq_alive/blob/v2.
|
216
|
+
documentation_uri: https://github.com/arturictus/sidekiq_alive/blob/v2.3.0/README.md
|
217
217
|
bug_tracker_uri: https://github.com/arturictus/sidekiq_alive/issues
|
218
218
|
post_install_message:
|
219
219
|
rdoc_options: []
|