module SidekiqAlive
Constants
- VERSION
Public Class Methods
alive?()
click to toggle source
# File lib/sidekiq_alive.rb, line 91 def self.alive? redis.ttl(current_lifeness_key) != -2 end
config()
click to toggle source
# File lib/sidekiq_alive.rb, line 105 def self.config @config ||= SidekiqAlive::Config.instance end
current_instance_register_key()
click to toggle source
# File lib/sidekiq_alive.rb, line 77 def self.current_instance_register_key "#{config.registered_instance_key}::#{hostname}" end
current_lifeness_key()
click to toggle source
# File lib/sidekiq_alive.rb, line 109 def self.current_lifeness_key "#{config.liveness_key}::#{hostname}" end
current_queue()
click to toggle source
# File lib/sidekiq_alive.rb, line 39 def self.current_queue "#{config.queue_prefix}-#{hostname}" end
deep_scan(keyword, keys = [], cursor = 0)
click to toggle source
# File lib/sidekiq_alive.rb, line 58 def self.deep_scan(keyword, keys = [], cursor = 0) next_cursor, found_keys = *redis { |r| r }.scan(cursor, match: keyword) keys += found_keys return keys if next_cursor == "0" || found_keys.blank? deep_scan(keyword, keys, next_cursor) end
hostname()
click to toggle source
# File lib/sidekiq_alive.rb, line 113 def self.hostname ENV['HOSTNAME'] || 'HOSTNAME_NOT_SET' end
logger()
click to toggle source
# File lib/sidekiq_alive.rb, line 101 def self.logger Sidekiq.logger end
purge_pending_jobs()
click to toggle source
# File lib/sidekiq_alive.rb, line 65 def self.purge_pending_jobs # TODO: # Sidekiq 6 allows better way to find scheduled jobs: # https://github.com/mperham/sidekiq/wiki/API#scan scheduled_set = Sidekiq::ScheduledSet.new jobs = scheduled_set.select { |job| job.klass == 'SidekiqAlive::Worker' && job.queue == current_queue } logger.info("[SidekiqAlive] Purging #{jobs.count} pending for #{hostname}") jobs.each(&:delete) logger.info("[SidekiqAlive] Removing queue #{current_queue}") Sidekiq::Queue.new(current_queue).clear end
redis()
click to toggle source
# File lib/sidekiq_alive.rb, line 87 def self.redis Sidekiq.redis { |r| r } end
register_current_instance()
click to toggle source
# File lib/sidekiq_alive.rb, line 43 def self.register_current_instance register_instance(current_instance_register_key) end
register_instance(instance_name)
click to toggle source
# File lib/sidekiq_alive.rb, line 156 def self.register_instance(instance_name) redis.set(instance_name, Time.now.to_i, ex: config.registration_ttl.to_i) end
registered_instances()
click to toggle source
# File lib/sidekiq_alive.rb, line 54 def self.registered_instances deep_scan("#{config.registered_instance_key}::*") end
setup() { |config| ... }
click to toggle source
CONFIG —————————————
# File lib/sidekiq_alive.rb, line 97 def self.setup yield(config) end
shutdown_info()
click to toggle source
# File lib/sidekiq_alive.rb, line 117 def self.shutdown_info <<~BANNER =================== Shutting down SidekiqAlive ================= Hostname: #{hostname} Liveness key: #{current_lifeness_key} Current instance register key: #{current_instance_register_key} BANNER end
start()
click to toggle source
# File lib/sidekiq_alive.rb, line 8 def self.start SidekiqAlive::Worker.sidekiq_options queue: current_queue Sidekiq.configure_server do |sq_config| sq_config.options[:queues].unshift(current_queue) sq_config.on(:startup) do SidekiqAlive.tap do |sa| sa.logger.info(banner) sa.register_current_instance sa.store_alive_key sa::Worker.perform_async(hostname) @server_pid = fork do sa::Server.run! end sa.logger.info(successful_startup_text) end end sq_config.on(:quiet) do SidekiqAlive.unregister_current_instance end sq_config.on(:shutdown) do Process.kill('TERM', @server_pid) unless @server_pid.nil? Process.wait(@server_pid) unless @server_pid.nil? SidekiqAlive.unregister_current_instance end end end
store_alive_key()
click to toggle source
# File lib/sidekiq_alive.rb, line 81 def self.store_alive_key redis.set(current_lifeness_key, Time.now.to_i, ex: config.time_to_live.to_i) end
successful_startup_text()
click to toggle source
# File lib/sidekiq_alive.rb, line 146 def self.successful_startup_text <<~BANNER Registered instances: - #{registered_instances.join("\n\s\s- ")} =================== SidekiqAlive Ready! ================= BANNER end
unregister_current_instance()
click to toggle source
# File lib/sidekiq_alive.rb, line 47 def self.unregister_current_instance # Delete any pending jobs for this instance logger.info(shutdown_info) purge_pending_jobs redis.del(current_instance_register_key) end