Sha256: 07060bfc0cece501cbcfb0c36629fa822ac81b02814fcd4d7e472bef794766fc

Contents?: true

Size: 1.44 KB

Versions: 3

Compression:

Stored size: 1.44 KB

Contents

module Sidetiq
  module Middleware
    class History
      def call(worker, msg, queue, &block)
        if worker.kind_of?(Sidetiq::Schedulable)
          call_with_sidetiq_history(worker, msg, queue, &block)
        else
          yield
        end
      end

      private

      def call_with_sidetiq_history(worker, msg, queue)
        entry = new_history_entry
        start_time = Time.now

        yield
      rescue StandardError => e
        entry[:status] = :failure
        entry[:exception] = e.class.to_s
        entry[:error] = e.message
        entry[:backtrace] = e.backtrace

        raise e
      ensure
        entry[:runtime] = (Time.now - start_time)
        save_entry_for_worker(entry, worker)
      end

      def new_history_entry
        {
          status: :success,
          error: "",
          exception: "",
          backtrace: "",
          node: "#{Socket.gethostname}:#{Process.pid}-#{Thread.current.object_id}",
          timestamp: Time.now.iso8601,
          runtime: ""
        }
      end

      def save_entry_for_worker(entry, worker)
        Sidekiq.redis do |redis|
          list_name = "sidetiq:#{worker.class.name}:history"

          redis.lpush(list_name, Sidekiq.dump_json(entry))
          redis.ltrim(list_name, 0, Sidetiq.config.worker_history - 1)
        end
      end
    end
  end
end

Sidekiq.configure_server do |config|
  config.server_middleware do |chain|
    chain.add Sidetiq::Middleware::History
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sidetiq-0.7.2 lib/sidetiq/middleware/history.rb
sidetiq-0.7.1 lib/sidetiq/middleware/history.rb
sidetiq-0.7.0 lib/sidetiq/middleware/history.rb