Sidekiq
Monitor Sidekiq scheduled jobs with Cronping.
Use a small helper module to ping Cronping from scheduled Sidekiq workers.
Helper
# config/initializers/cronping.rb
require "net/http"
require "uri"
module Cronping
def self.ping(path = "")
url = ENV["CRONPING_URL"]
return unless url
Net::HTTP.get(URI("#{url}#{path}"))
rescue => e
Rails.logger.warn("Cronping ping failed: #{e.class}: #{e.message}")
end
endWorker
class DatabaseBackupWorker
include Sidekiq::Worker
def perform
Cronping.ping("/start")
DatabaseBackup.run!
Cronping.ping
rescue => e
Cronping.ping("/fail")
raise
end
endCapture failure output
module Cronping
def self.post(path, body)
url = ENV["CRONPING_URL"]
return unless url
uri = URI("#{url}#{path}")
Net::HTTP.post(uri, body.to_s, "Content-Type" => "text/plain")
rescue => e
Rails.logger.warn("Cronping post failed: #{e.class}: #{e.message}")
end
end
class ReportWorker
include Sidekiq::Worker
def perform
Cronping.ping("/start")
ReportGenerator.run!
Cronping.ping
rescue => e
Cronping.post("/fail", "#{e.class}: #{e.message}\n#{e.backtrace&.join("\n")}")
raise
end
endKeep Cronping failures non-fatal. Your job should not fail just because the monitoring ping could not be delivered.