Sha256: e954aacac921622441b2885ab08bbe60e8ba3f1b087291c914a763ef233d3dc4

Contents?: true

Size: 1.1 KB

Versions: 3

Compression:

Stored size: 1.1 KB

Contents

module Sidekiq::QueueMetrics
  class Storage
    FAILED_JOBS_KEY = 'failed_jobs'.freeze

    class << self
      def set_stats(key = stats_key, value)
        Sidekiq.redis_pool.with do |conn|
          conn.set(key, value)
        end
      end

      def get_stats(key = stats_key)
        Sidekiq.redis_pool.with do |conn|
          conn.get(key)
        end
      end

      def add_failed_job(job, max_count = Sidekiq::QueueMetrics.max_recently_failed_jobs)
        Sidekiq.redis_pool.with do |conn|
          queue = job['queue']
          failed_jobs = JSON.parse(conn.get("#{FAILED_JOBS_KEY}:#{queue}") || '[]')

          if failed_jobs.size >= max_count
            (failed_jobs.size - max_count + 1).times {failed_jobs.shift}
          end

          conn.set("#{FAILED_JOBS_KEY}:#{queue}", (failed_jobs << job).to_json)
        end
      end

      def failed_jobs(queue)
        Sidekiq.redis_pool.with do |conn|
          JSON.parse(conn.get("#{FAILED_JOBS_KEY}:#{queue}") || '[]')
        end
      end

      def stats_key
        Sidekiq::QueueMetrics.storage_location || 'queue_stats'
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sidekiq_queue_metrics-2.1.1 lib/sidekiq_queue_metrics/storage.rb
sidekiq_queue_metrics-2.1 lib/sidekiq_queue_metrics/storage.rb
sidekiq_queue_metrics-2.0 lib/sidekiq_queue_metrics/storage.rb