class SidekiqUniqueJobs::Changelog

Class Changelogs provides access to the changelog entries

@author Mikael Henriksson <mikael@mhenrixon.com>

Constants

DEFAULT_COUNT

@return [Integer] the number of matches to return by default

SCAN_PATTERN

@return [String] the default pattern to use for matching

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/sidekiq_unique_jobs/changelog.rb, line 17
def initialize
  super(CHANGELOGS)
end

Public Instance Methods

add(message:, digest:, job_id:, script:) click to toggle source

Adds a new changelog entry

@param [String] message a descriptive message about the entry @param [String] digest a unique digest @param [String] job_id a Sidekiq JID @param [String] script the name of the script adding the entry

@return [void]

# File lib/sidekiq_unique_jobs/changelog.rb, line 31
def add(message:, digest:, job_id:, script:)
  message = dump_json(message: message, digest: digest, job_id: job_id, script: script)
  redis { |conn| conn.zadd(key, now_f, message) }
end
entries(pattern: SCAN_PATTERN, count: DEFAULT_COUNT) click to toggle source

The change log entries

@param [String] pattern the pattern to match @param [Integer] count the number of matches to return

@return [Array<Hash>] an array of entries

# File lib/sidekiq_unique_jobs/changelog.rb, line 44
def entries(pattern: SCAN_PATTERN, count: DEFAULT_COUNT)
  options = {}
  options[:match] = pattern
  options[:count] = count

  redis do |conn|
    conn.zscan_each(key, **options).to_a.map { |entry| load_json(entry[0]) }
  end
end
page(cursor: 0, pattern: "*", page_size: 100) click to toggle source

Paginate the changelog entries

@param [Integer] cursor the cursor for this iteration @param [String] pattern “*” the pattern to match @param [Integer] page_size 100 the number of matches to return

@return [Array<Integer, Integer, Array<Hash>] the total size, next cursor and changelog entries

# File lib/sidekiq_unique_jobs/changelog.rb, line 63
def page(cursor: 0, pattern: "*", page_size: 100)
  redis do |conn|
    total_size, result = conn.multi do
      conn.zcard(key)
      conn.zscan(key, cursor, match: pattern, count: page_size)
    end

    [
      total_size.to_i,
      result[0].to_i, # next_cursor
      result[1].map { |entry| load_json(entry[0]) }, # entries
    ]
  end
end