class BgResults::Batch

Constants

RESULT_TTL

Public Class Methods

new(bid) click to toggle source
# File lib/bg_results/batch.rb, line 4
def initialize bid
  @bid = bid
  @key = "RESULTS-#{@bid}"
end

Public Instance Methods

clear_results!() click to toggle source
# File lib/bg_results/batch.rb, line 46
def clear_results!
  BgResults.redis do |conn|
    conn.del @key
  end
end
results() click to toggle source
# File lib/bg_results/batch.rb, line 9
def results
  data, _ = BgResults.redis do |conn|
    conn.multi do
      conn.hgetall @key
      conn.expire @key, RESULT_TTL
    end
  end
  parse_results data
end
results_each() { |jid, res| ... } click to toggle source
# File lib/bg_results/batch.rb, line 31
def results_each
  return unless block_given?
  results_in_batches do |batch|
    batch.each do |jid, res|
      yield jid, res
    end
  end
end
results_in_batches() { |data| ... } click to toggle source
# File lib/bg_results/batch.rb, line 19
def results_in_batches
  count = 100
  cursor = 0
  loop do
    cursor, data = scan cursor, count
    data = parse_results data.to_h
    yield data
    break if cursor == 0
  end
  set_results_expire
end
set_results_expire(exp=RESULT_TTL) click to toggle source
# File lib/bg_results/batch.rb, line 40
def set_results_expire exp=RESULT_TTL
  BgResults.redis do |conn|
    conn.expire @key, exp
  end
end

Private Instance Methods

parse_results(data) click to toggle source
# File lib/bg_results/batch.rb, line 60
def parse_results data
  data = data.map do |k,v|
    payload = JSON.parse v
    [k, payload["result"]]
  end.to_h
end
scan(cursor, count) click to toggle source
# File lib/bg_results/batch.rb, line 53
def scan cursor, count
  new_cursor, data = BgResults.redis do |conn|
    conn.hscan @key, cursor, count: count
  end
  [new_cursor.to_i, data]
end