Sha256: f667d2db95031ea4007f1670aea7a47121ee1eb64a11cd708f72902438dd5050

Contents?: true

Size: 1003 Bytes

Versions: 2

Compression:

Stored size: 1003 Bytes

Contents

module SidekiqMiddlewares
  class Benchmarker

    def initialize(opts = {})
      @logger = opts[:logger] || raise(ArgumentError, 'missing keyword: logger')
      @formatter = opts[:formatter] || proc { |message| message }
    end

    def call(_worker, job, _queue)
      start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
      yield
    ensure
      elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time
      @logger.info(@formatter.call(message_to_log(job, elapsed_time)))
    end

    private

    def message_to_log(job, measurement)
      base_by(job).merge(results_by(measurement))
    end

    def base_by(job)
      {
        'jid' => job['jid'],
        'queue' => job['queue'],
        'worker_class' => job['class'],
        'args' => job['args'].inspect,
        'created_at' => job['created_at'],
        'enqueued_at' => job['enqueued_at']
      }
    end

    def results_by(elapsed_time)
      {'execution_time_sec' => elapsed_time}
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sidekiq_middlewares-0.3.3 lib/sidekiq_middlewares/benchmarker.rb
sidekiq_middlewares-0.3.2 lib/sidekiq_middlewares/benchmarker.rb