class DaysSinceMasterFailureRepository

Provides all persistence logic for the DaysSinceMasterFailure handler, insulating the handler from any knowledge of redis

Public Class Methods

new(redis, pipeline_name) click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 6
def initialize(redis, pipeline_name)
  @redis = redis
  @last_failure_key = "last-failure-at-#{pipeline_name}"
  @last_reported_days_key = "last-reported-days-#{pipeline_name}"
  @most_successful_days_key = "most-successful-days-#{pipeline_name}"

  initialise_last_failure_at_if_not_set
  initialise_most_successful_days_if_not_set
end

Public Instance Methods

record_result(event) { |message| ... } click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 16
def record_result(event, &block)
  touch_last_failure_at if !event.passed?
  touch_most_successful_days if !event.passed? && new_record?

  BuildStatusReport.new(event, days_since_last_failure, last_reported_days, most_successful_days) do |message|
    yield message
  end

  touch_last_reported_days
end

Private Instance Methods

days_since_last_failure() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 37
def days_since_last_failure
  seconds_to_days(::Time.now.to_i - fetch_last_failure_at)
end
fetch_last_failure_at() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 53
def fetch_last_failure_at
  @redis.get(@last_failure_key).to_i
end
initialise_last_failure_at_if_not_set() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 73
def initialise_last_failure_at_if_not_set
  @redis.setnx(@last_failure_key, ::Time.now.to_i)
end
initialise_most_successful_days_if_not_set() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 77
def initialise_most_successful_days_if_not_set
  @redis.setnx(@most_successful_days_key, days_since_last_failure)
end
last_reported_days() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 65
def last_reported_days
  @redis.get(@last_reported_days_key).to_i
end
most_successful_days() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 69
def most_successful_days
  @redis.get(@most_successful_days_key).to_i
end
new_record?() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 29
def new_record?
  last_reported_days > most_successful_days
end
seconds_to_days(secs) click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 33
def seconds_to_days(secs)
  secs.to_i / 60 / 60 / 24
end
set_last_reported_days(days) click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 57
def set_last_reported_days(days)
  @redis.set(@last_reported_days_key, days.to_i)
end
set_most_successful_days(days) click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 61
def set_most_successful_days(days)
  @redis.set(@most_successful_days_key, days.to_i)
end
touch_last_failure_at() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 41
def touch_last_failure_at
  @redis.set(@last_failure_key, ::Time.now.to_i)
end
touch_last_reported_days() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 45
def touch_last_reported_days
  set_last_reported_days(days_since_last_failure)
end
touch_most_successful_days() click to toggle source
# File lib/lita/days_since_master_failure_repository.rb, line 49
def touch_most_successful_days
  set_most_successful_days(last_reported_days)
end