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