class ZSpec::Tracker
Attributes
alltime_failures_hash_name[R]
current_failures_hash_name[R]
runtimes_hash_name[R]
threshold[R]
Public Class Methods
new(build_prefix:, sink:, threshold:, hostname:)
click to toggle source
# File lib/zspec/tracker.rb, line 5 def initialize(build_prefix:, sink:, threshold:, hostname:) @sink = sink @threshold = threshold @hostname = hostname @runtimes_hash_name = "runtimes:v1" @alltime_failures_hash_name = "failures:v1" @current_failures_hash_name = build_prefix + ":failures" @sequence_hash_name = build_prefix + ":sequence" end
Public Instance Methods
all_runtimes()
click to toggle source
# File lib/zspec/tracker.rb, line 36 def all_runtimes @sink.hgetall(@runtimes_hash_name) end
alltime_failures()
click to toggle source
# File lib/zspec/tracker.rb, line 40 def alltime_failures parse_failures( @sink.hgetall(@alltime_failures_hash_name) ) .select(&method(:filter_by_threshold)) .sort_by(&method(:failure_count)) .reverse end
cleanup(expire_seconds = EXPIRE_SECONDS)
click to toggle source
# File lib/zspec/tracker.rb, line 57 def cleanup(expire_seconds = EXPIRE_SECONDS) @sink.expire(@current_failures_hash_name, expire_seconds) @sink.expire(@sequence_hash_name, expire_seconds) end
count_key(message)
click to toggle source
# File lib/zspec/tracker.rb, line 66 def count_key(message) "#{message}:count" end
current_failures()
click to toggle source
# File lib/zspec/tracker.rb, line 49 def current_failures parse_failures( @sink.hgetall(@current_failures_hash_name) ) .sort_by(&method(:failure_count)) .reverse end
sequence_key(message)
click to toggle source
# File lib/zspec/tracker.rb, line 70 def sequence_key(message) "#{message}:sequence" end
time_key(message)
click to toggle source
# File lib/zspec/tracker.rb, line 62 def time_key(message) "#{message}:time" end
track_failures(failures)
click to toggle source
# File lib/zspec/tracker.rb, line 25 def track_failures(failures) failures.map { |h| h[:id] }.each do |message| @sink.hincrby(@alltime_failures_hash_name, count_key(message), 1) @sink.hset(@alltime_failures_hash_name, time_key(message), @sink.time.first) @sink.hincrby(@current_failures_hash_name, count_key(message), 1) @sink.hset(@current_failures_hash_name, time_key(message), @sink.time.first) @sink.hset(@current_failures_hash_name, sequence_key(message), sequence) end end
track_runtime(message, runtime)
click to toggle source
# File lib/zspec/tracker.rb, line 21 def track_runtime(message, runtime) @sink.hset(@runtimes_hash_name, message, runtime) end
track_sequence(message)
click to toggle source
# File lib/zspec/tracker.rb, line 15 def track_sequence(message) sequence = (@sink.hget(@sequence_hash_name, @hostname) || "").split(",") sequence << message @sink.hset(@sequence_hash_name, @hostname, sequence.join(",")) end
Private Instance Methods
failure_count(failure)
click to toggle source
# File lib/zspec/tracker.rb, line 97 def failure_count(failure) failure["count"].to_i end
filter_by_threshold(failure)
click to toggle source
# File lib/zspec/tracker.rb, line 93 def filter_by_threshold(failure) (@sink.time.first - failure["last_failure"].to_i) < @threshold end
parse_failures(failures)
click to toggle source
# File lib/zspec/tracker.rb, line 80 def parse_failures(failures) memo = {} failures.each do |key, value| message = key.gsub(/\:time|\:count|\:sequence/, '') memo[message] ||= {} memo[message]["message"] = message memo[message]["count"] = value.to_i if key.end_with?(":count") memo[message]["last_failure"] = value.to_i if key.end_with?(":time") memo[message]["sequence"] = value.split(",") if key.end_with?(":sequence") end memo.values end
sequence()
click to toggle source
# File lib/zspec/tracker.rb, line 76 def sequence @sink.hget(@sequence_hash_name, @hostname) || "" end