cronping

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
end

Worker

class DatabaseBackupWorker
  include Sidekiq::Worker

  def perform
    Cronping.ping("/start")
    DatabaseBackup.run!
    Cronping.ping
  rescue => e
    Cronping.ping("/fail")
    raise
  end
end

Capture 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
end

Keep Cronping failures non-fatal. Your job should not fail just because the monitoring ping could not be delivered.

On this page