sidekiq-alive-next 3.1.1 → 3.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.md +41 -19
- data/lib/sidekiq_alive/config.rb +12 -4
- data/lib/sidekiq_alive/helpers.rb +53 -0
- data/lib/sidekiq_alive/redis/base.rb +35 -0
- data/lib/sidekiq_alive/redis/redis_client_gem.rb +52 -0
- data/lib/sidekiq_alive/redis/redis_gem.rb +45 -0
- data/lib/sidekiq_alive/redis.rb +15 -0
- data/lib/sidekiq_alive/server/base.rb +52 -0
- data/lib/sidekiq_alive/server/default.rb +79 -0
- data/lib/sidekiq_alive/server/http_server.rb +140 -0
- data/lib/sidekiq_alive/server/rack.rb +67 -0
- data/lib/sidekiq_alive/server.rb +13 -29
- data/lib/sidekiq_alive/version.rb +1 -1
- data/lib/sidekiq_alive/worker.rb +14 -7
- data/lib/sidekiq_alive.rb +174 -0
- metadata +69 -48
- data/lib/sidekiq-alive-next.rb +0 -142
data/lib/sidekiq-alive-next.rb
DELETED
@@ -1,142 +0,0 @@
|
|
1
|
-
# rubocop:disable Naming/FileName
|
2
|
-
|
3
|
-
# frozen_string_literal: true
|
4
|
-
|
5
|
-
require "sidekiq"
|
6
|
-
require "sidekiq/api"
|
7
|
-
require "singleton"
|
8
|
-
require "sidekiq_alive/version"
|
9
|
-
require "sidekiq_alive/config"
|
10
|
-
|
11
|
-
module SidekiqAlive
|
12
|
-
class << self
|
13
|
-
def start
|
14
|
-
Sidekiq.configure_server do |sq_config|
|
15
|
-
sq_config.on(:startup) do
|
16
|
-
SidekiqAlive::Worker.sidekiq_options(queue: current_queue)
|
17
|
-
sq_config.queues.unshift(current_queue)
|
18
|
-
|
19
|
-
logger.info(startup_info)
|
20
|
-
|
21
|
-
register_current_instance
|
22
|
-
store_alive_key
|
23
|
-
SidekiqAlive::Worker.perform_async(hostname)
|
24
|
-
@server_pid = fork { SidekiqAlive::Server.run! }
|
25
|
-
|
26
|
-
logger.info(successful_startup_text)
|
27
|
-
end
|
28
|
-
|
29
|
-
sq_config.on(:quiet) do
|
30
|
-
unregister_current_instance
|
31
|
-
config.shutdown_callback.call
|
32
|
-
end
|
33
|
-
|
34
|
-
sq_config.on(:shutdown) do
|
35
|
-
Process.kill("TERM", @server_pid) unless @server_pid.nil?
|
36
|
-
Process.wait(@server_pid) unless @server_pid.nil?
|
37
|
-
|
38
|
-
unregister_current_instance
|
39
|
-
config.shutdown_callback.call
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def current_queue
|
45
|
-
"#{config.queue_prefix}-#{hostname}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def register_current_instance
|
49
|
-
register_instance(current_instance_register_key)
|
50
|
-
end
|
51
|
-
|
52
|
-
def unregister_current_instance
|
53
|
-
# Delete any pending jobs for this instance
|
54
|
-
logger.info(shutdown_info)
|
55
|
-
purge_pending_jobs
|
56
|
-
redis.call("DEL", current_instance_register_key)
|
57
|
-
end
|
58
|
-
|
59
|
-
def registered_instances
|
60
|
-
redis.scan("MATCH", "#{config.registered_instance_key}::*").map { |key| key }
|
61
|
-
end
|
62
|
-
|
63
|
-
def purge_pending_jobs
|
64
|
-
jobs = Sidekiq::ScheduledSet.new.scan('"class":"SidekiqAlive::Worker"')
|
65
|
-
logger.info("[SidekiqAlive] Purging #{jobs.count} pending for #{hostname}")
|
66
|
-
jobs.each(&:delete)
|
67
|
-
|
68
|
-
logger.info("[SidekiqAlive] Removing queue #{current_queue}")
|
69
|
-
Sidekiq::Queue.new(current_queue).clear
|
70
|
-
end
|
71
|
-
|
72
|
-
def current_instance_register_key
|
73
|
-
"#{config.registered_instance_key}::#{hostname}"
|
74
|
-
end
|
75
|
-
|
76
|
-
def store_alive_key
|
77
|
-
redis.call("SET", current_lifeness_key, Time.now.to_i, ex: config.time_to_live.to_i)
|
78
|
-
end
|
79
|
-
|
80
|
-
def redis
|
81
|
-
Sidekiq.redis { |r| r }
|
82
|
-
end
|
83
|
-
|
84
|
-
def alive?
|
85
|
-
redis.ttl(current_lifeness_key) != -2
|
86
|
-
end
|
87
|
-
|
88
|
-
# CONFIG ---------------------------------------
|
89
|
-
|
90
|
-
def setup
|
91
|
-
yield(config)
|
92
|
-
end
|
93
|
-
|
94
|
-
def logger
|
95
|
-
config.logger || Sidekiq.logger
|
96
|
-
end
|
97
|
-
|
98
|
-
def config
|
99
|
-
@config ||= SidekiqAlive::Config.instance
|
100
|
-
end
|
101
|
-
|
102
|
-
def current_lifeness_key
|
103
|
-
"#{config.liveness_key}::#{hostname}"
|
104
|
-
end
|
105
|
-
|
106
|
-
def hostname
|
107
|
-
ENV["HOSTNAME"] || "HOSTNAME_NOT_SET"
|
108
|
-
end
|
109
|
-
|
110
|
-
def shutdown_info
|
111
|
-
"Shutting down sidekiq-alive!"
|
112
|
-
end
|
113
|
-
|
114
|
-
def startup_info
|
115
|
-
info = {
|
116
|
-
hostname: hostname,
|
117
|
-
port: config.port,
|
118
|
-
ttl: config.time_to_live,
|
119
|
-
queue: current_queue,
|
120
|
-
liveness_key: current_lifeness_key,
|
121
|
-
register_key: current_instance_register_key,
|
122
|
-
}
|
123
|
-
|
124
|
-
"Starting sidekiq-alive: #{info}"
|
125
|
-
end
|
126
|
-
|
127
|
-
def successful_startup_text
|
128
|
-
"Successfully started sidekiq-alive, registered instances: #{registered_instances.join("\n\s\s- ")}"
|
129
|
-
end
|
130
|
-
|
131
|
-
def register_instance(instance_name)
|
132
|
-
redis.call("SET", instance_name, Time.now.to_i, ex: config.registration_ttl.to_i)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
require "sidekiq_alive/worker"
|
138
|
-
require "sidekiq_alive/server"
|
139
|
-
|
140
|
-
SidekiqAlive.start unless ENV.fetch("DISABLE_SIDEKIQ_ALIVE", "").casecmp("true").zero?
|
141
|
-
|
142
|
-
# rubocop:enable Naming/FileName
|