2015-12-31 15:33:35 -08:00
|
|
|
# frozen_string_literal: true
|
2019-04-01 18:20:41 +02:00
|
|
|
|
|
|
|
require "socket"
|
|
|
|
require "securerandom"
|
|
|
|
require "sidekiq/exception_handler"
|
2012-08-02 20:46:06 -07:00
|
|
|
|
2012-01-22 11:32:38 -08:00
|
|
|
module Sidekiq
|
2012-02-17 13:39:36 -08:00
|
|
|
##
|
|
|
|
# This module is part of Sidekiq core and not intended for extensions.
|
|
|
|
#
|
2012-01-22 11:32:38 -08:00
|
|
|
module Util
|
2012-08-02 20:46:06 -07:00
|
|
|
include ExceptionHandler
|
2012-01-22 11:32:38 -08:00
|
|
|
|
|
|
|
def watchdog(last_words)
|
|
|
|
yield
|
2012-08-29 20:20:20 -07:00
|
|
|
rescue Exception => ex
|
2019-04-01 18:20:41 +02:00
|
|
|
handle_exception(ex, {context: last_words})
|
2013-09-22 14:05:29 -07:00
|
|
|
raise ex
|
2012-01-22 11:32:38 -08:00
|
|
|
end
|
|
|
|
|
2015-10-02 15:44:29 -07:00
|
|
|
def safe_thread(name, &block)
|
|
|
|
Thread.new do
|
2019-08-02 09:54:52 -07:00
|
|
|
Thread.current.name = name
|
2015-10-02 15:44:29 -07:00
|
|
|
watchdog(name, &block)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-02-14 09:00:26 -08:00
|
|
|
def logger
|
2012-05-15 19:44:35 -07:00
|
|
|
Sidekiq.logger
|
2012-01-22 16:01:46 -08:00
|
|
|
end
|
2012-02-10 23:16:12 -08:00
|
|
|
|
2012-03-14 09:56:13 -07:00
|
|
|
def redis(&block)
|
|
|
|
Sidekiq.redis(&block)
|
2012-02-10 23:16:12 -08:00
|
|
|
end
|
2012-02-15 12:30:31 -08:00
|
|
|
|
2018-12-29 07:54:05 -08:00
|
|
|
def tid
|
2019-04-01 18:20:41 +02:00
|
|
|
Thread.current["sidekiq_tid"] ||= (Thread.current.object_id ^ ::Process.pid).to_s(36)
|
2018-12-29 07:54:05 -08:00
|
|
|
end
|
|
|
|
|
2012-09-16 07:27:49 -07:00
|
|
|
def hostname
|
2019-04-01 18:20:41 +02:00
|
|
|
ENV["DYNO"] || Socket.gethostname
|
2012-09-16 07:27:49 -07:00
|
|
|
end
|
2014-03-02 16:36:00 -08:00
|
|
|
|
2014-12-31 01:25:55 +00:00
|
|
|
def process_nonce
|
2019-04-26 12:36:33 -07:00
|
|
|
@@process_nonce ||= SecureRandom.hex(6)
|
2014-12-31 01:25:55 +00:00
|
|
|
end
|
|
|
|
|
2014-03-02 16:36:00 -08:00
|
|
|
def identity
|
2019-04-26 12:36:33 -07:00
|
|
|
@@identity ||= "#{hostname}:#{::Process.pid}:#{process_nonce}"
|
2014-03-02 16:36:00 -08:00
|
|
|
end
|
2014-05-13 21:41:40 -07:00
|
|
|
|
2019-04-01 18:20:41 +02:00
|
|
|
def fire_event(event, options = {})
|
2018-01-11 09:37:55 -08:00
|
|
|
reverse = options[:reverse]
|
|
|
|
reraise = options[:reraise]
|
|
|
|
|
2015-06-02 20:33:01 -07:00
|
|
|
arr = Sidekiq.options[:lifecycle_events][event]
|
|
|
|
arr.reverse! if reverse
|
|
|
|
arr.each do |block|
|
2019-04-01 18:20:41 +02:00
|
|
|
block.call
|
|
|
|
rescue => ex
|
|
|
|
handle_exception(ex, {context: "Exception during Sidekiq lifecycle event.", event: event})
|
|
|
|
raise ex if reraise
|
2014-05-13 21:41:40 -07:00
|
|
|
end
|
2015-10-13 09:46:06 -07:00
|
|
|
arr.clear
|
2014-05-13 21:41:40 -07:00
|
|
|
end
|
2012-01-22 11:32:38 -08:00
|
|
|
end
|
|
|
|
end
|