class CI::Queue::Redis::BuildRecord

Attributes

config[R]
redis[R]

Public Class Methods

new(queue, redis, config) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 6
def initialize(queue, redis, config)
  @queue = queue
  @redis = redis
  @config = config
end

Public Instance Methods

error_reports() click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 63
def error_reports
  redis.hgetall(key('error-reports'))
end
failed_tests() click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 20
def failed_tests
  redis.hkeys(key('error-reports'))
end
fetch_stats(stat_names) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 67
def fetch_stats(stat_names)
  counts = redis.pipelined do
    stat_names.each { |c| redis.hvals(key(c)) }
  end
  sum_counts = counts.map do |values|
    values.map(&:to_f).inject(:+).to_f
  end
  stat_names.zip(sum_counts).to_h
end
max_test_failed?() click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 57
def max_test_failed?
  return false if config.max_test_failed.nil?

  @queue.test_failures >= config.max_test_failed
end
pop_warnings() click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 24
def pop_warnings
  warnings = redis.multi do
    redis.lrange(key('warnings'), 0, -1)
    redis.del(key('warnings'))
  end.first

  warnings.map { |p| Marshal.load(p) }
end
progress() click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 12
def progress
  @queue.progress
end
queue_exhausted?() click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 16
def queue_exhausted?
  @queue.exhausted?
end
record_error(id, payload, stats: nil) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 37
def record_error(id, payload, stats: nil)
  redis.pipelined do
    redis.hset(
      key('error-reports'),
      id.dup.force_encoding(Encoding::BINARY),
      payload.dup.force_encoding(Encoding::BINARY),
    )
    record_stats(stats)
  end
  nil
end
record_success(id, stats: nil) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 49
def record_success(id, stats: nil)
  redis.pipelined do
    redis.hdel(key('error-reports'), id.dup.force_encoding(Encoding::BINARY))
    record_stats(stats)
  end
  nil
end
record_warning(type, attributes) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 33
def record_warning(type, attributes)
  redis.rpush(key('warnings'), Marshal.dump([type, attributes]))
end
reset_stats(stat_names) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 77
def reset_stats(stat_names)
  redis.pipelined do
    stat_names.each do |stat_name|
      redis.hdel(key(stat_name), config.worker_id)
    end
  end
end

Private Instance Methods

key(*args) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 96
def key(*args)
  ['build', config.build_id, *args].join(':')
end
record_stats(stats) click to toggle source
# File lib/ci/queue/redis/build_record.rb, line 89
def record_stats(stats)
  return unless stats
  stats.each do |stat_name, stat_value|
    redis.hset(key(stat_name), config.worker_id, stat_value)
  end
end