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.
@@ -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