lib/chicanery/servers.rb in chicanery-0.1.7 vs lib/chicanery/servers.rb in chicanery-0.1.8
- old
+ new
@@ -1,36 +1,67 @@
require 'chicanery/collections'
require 'chicanery/handlers'
+require 'chicanery/debug'
module Chicanery
module Servers
include Collections
include Handlers
+ include Debug
def check_servers current_state, previous_state
current_state[:servers] = {}
+ verbose_blue "Execution #{Time.now}"
servers.each do |server|
+ verbose "examining server #{server.name}"
current_jobs = server.jobs
- compare_jobs current_jobs, previous_state[:servers][server.name] if previous_state[:servers]
+ if previous_state[:servers] && previous_state[:servers][server.name]
+ compare_jobs current_jobs, previous_state[:servers][server.name]
+ else
+ verbose "\tno past server #{server.name} state for comparison"
+ end
current_state[:servers][server.name] = current_jobs
end
end
def compare_jobs current_jobs, previous_jobs
- return unless previous_jobs
current_jobs.each do |job_name, job|
- compare_job job_name, job, previous_jobs[job_name] if previous_jobs[job_name]
+ verbose "\texamining job #{job_name} (now #{job[:activity]}, was #{job[:last_build_status]})"
+ if previous_jobs[job_name]
+ compare_job job_name, job, previous_jobs[job_name]
+ else
+ verbose "\tno past job #{job_name} state for comparison"
+ end
end
end
def compare_job name, current, previous
- if current[:activity] == :building and previous[:activity] == :sleeping
- notify_started_handlers name, current
+ if current[:activity] == :building
+ verbose "\t\tcurrently building"
+ hack_for_forgetful_ci current, previous
+ if previous[:activity] == :sleeping
+ notify_started_handlers name, current
+ end
+ return
end
- return unless current[:last_build_time] != previous[:last_build_time]
+ unless current[:last_build_time] != previous[:last_build_time] || current[:last_build_status] != previous[:last_build_status]
+ verbose "\t\tno change in timestamp or build status"
+ return
+ end
+ verbose "\t\t#{previous[:last_build_status]} -> #{current[:last_build_status]}"
notify_succeeded_handlers name, current if current[:last_build_status] == :success
notify_failed_handlers name, current if current[:last_build_status] == :failure
- notify_broken_handlers name, current if current[:last_build_status] == :failure and previous[:last_build_status] == :success
- notify_fixed_handlers name, current if current[:last_build_status] == :success and previous[:last_build_status] == :failure
+ notify_broken_handlers name, current if current[:last_build_status] == :failure && previous[:last_build_status] == :success
+ notify_fixed_handlers name, current if current[:last_build_status] == :success && previous[:last_build_status] == :failure
+ end
+
+ def hack_for_forgetful_ci current, previous
+ # the following unfortunate hack is to compensate for cctray implementations (semaphore) which lose last build information when building
+ return if current[:last_build_time] > 0
+ verbose "\t\tcopying previous build content"
+ %w(build_time build_status label).each do |property|
+ key = "last_#{property}".to_sym
+ current[key] = previous[key]
+ end
end
end
end
\ No newline at end of file