Created
May 18, 2017 14:35
-
-
Save junaid-malik-confiz/c1593e38dedd0147b636fdd5810f4673 to your computer and use it in GitHub Desktop.
sidekiq initializer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "sidekiq/pausable" | |
Sidekiq.configure_client do |config| | |
config.redis = Discourse.sidekiq_redis_config | |
end | |
Sidekiq.configure_server do |config| | |
config.redis = Discourse.sidekiq_redis_config | |
config.failures_max_count = 10000 | |
config.server_middleware do |chain| | |
chain.add Sidekiq::Pausable | |
# ensure statistic middleware is included in case of a fork | |
chain.add Sidekiq::Statistic::Middleware | |
end | |
end | |
if Sidekiq.server? | |
# warm up AR | |
RailsMultisite::ConnectionManagement.each_connection do | |
(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table| | |
table.classify.constantize.first rescue nil | |
end | |
end | |
Rails.application.config.after_initialize do | |
require 'scheduler/scheduler' | |
manager = Scheduler::Manager.new | |
Scheduler::Manager.discover_schedules.each do |schedule| | |
manager.ensure_schedule!(schedule) | |
end | |
Thread.new do | |
while true | |
begin | |
manager.tick | |
rescue => e | |
# the show must go on | |
Discourse.handle_job_exception(e, {message: "While ticking scheduling manager"}) | |
end | |
sleep 1 | |
end | |
end | |
end | |
end | |
Sidekiq.logger.level = Logger::WARN | |
class SidekiqLogsterReporter < Sidekiq::ExceptionHandler::Logger | |
def call(ex, context = {}) | |
return if Jobs::HandledExceptionWrapper === ex | |
# Pass context to Logster | |
fake_env = {} | |
context.each do |key, value| | |
Logster.add_to_env(fake_env, key, value) | |
end | |
text = "Job exception: #{ex}\n" | |
if ex.backtrace | |
Logster.add_to_env(fake_env, :backtrace, ex.backtrace) | |
end | |
Logster.add_to_env(fake_env, :current_hostname, Discourse.current_hostname) | |
Thread.current[Logster::Logger::LOGSTER_ENV] = fake_env | |
Logster.logger.error(text) | |
rescue => e | |
Logster.logger.fatal("Failed to log exception #{ex} #{hash}\nReason: #{e.class} #{e}\n#{e.backtrace.join("\n")}") | |
ensure | |
Thread.current[Logster::Logger::LOGSTER_ENV] = nil | |
end | |
end | |
Sidekiq.error_handlers.clear | |
Sidekiq.error_handlers << SidekiqLogsterReporter.new |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment