lib/gorgon/job_state.rb in gorgon-0.11.0 vs lib/gorgon/job_state.rb in gorgon-0.11.1
- old
+ new
@@ -1,126 +1,129 @@
require 'gorgon/host_state'
require 'observer'
-class JobState
- include Observable
+module Gorgon
+ class JobState
+ include Observable
- attr_reader :total_files, :remaining_files_count, :state, :crashed_hosts
+ attr_reader :total_files, :remaining_files_count, :state, :crashed_hosts
- def initialize total_files
- @total_files = total_files
- @remaining_files_count = total_files
- @failed_tests = []
- @crashed_hosts = []
- @hosts = {}
+ def initialize total_files
+ @total_files = total_files
+ @remaining_files_count = total_files
+ @failed_tests = []
+ @crashed_hosts = []
+ @hosts = {}
- if @remaining_files_count > 0
- @state = :starting
- else
- @state = :complete
+ if @remaining_files_count > 0
+ @state = :starting
+ else
+ @state = :complete
+ end
end
- end
- def failed_files_count
- @failed_tests.count
- end
+ def failed_files_count
+ @failed_tests.count
+ end
- def finished_files_count
- total_files - remaining_files_count
- end
+ def finished_files_count
+ total_files - remaining_files_count
+ end
- def file_started payload
- raise_if_completed
+ def file_started payload
+ raise_if_completed
- if @state == :starting
- @state = :running
- end
+ if @state == :starting
+ @state = :running
+ end
- file_started_update_host_state payload
+ file_started_update_host_state payload
- changed
- notify_observers payload
- end
+ changed
+ notify_observers payload
+ end
- def file_finished payload
- raise_if_completed
+ def file_finished payload
+ raise_if_completed
- @remaining_files_count -= 1
- @state = :complete if @remaining_files_count == 0
+ @remaining_files_count -= 1
+ @state = :complete if @remaining_files_count == 0
- handle_failed_test payload if failed_test?(payload)
+ handle_failed_test payload if failed_test?(payload)
- @hosts[payload[:hostname]].file_finished payload[:worker_id], payload[:filename]
+ @hosts[payload[:hostname]].file_finished payload[:worker_id], payload[:filename]
- changed
- notify_observers payload
- end
+ changed
+ notify_observers payload
+ end
- def gorgon_crash_message payload
- @crashed_hosts << payload[:hostname]
- changed
- notify_observers payload
- end
+ def gorgon_crash_message payload
+ @crashed_hosts << payload[:hostname]
+ changed
+ notify_observers payload
+ end
- def cancel
- @remaining_files_count = 0
- @state = :cancelled
- changed
- notify_observers({})
- end
+ def cancel
+ @remaining_files_count = 0
+ @state = :cancelled
+ changed
+ notify_observers({})
+ end
- def each_failed_test
- @failed_tests.each do |test|
- yield test
+ def each_failed_test
+ @failed_tests.each do |test|
+ yield test
+ end
end
- end
- def each_running_file
- @hosts.each do |hostname, host|
- host.each_running_file do |filename|
- yield hostname, filename
+ def each_running_file
+ @hosts.each do |hostname, host|
+ host.each_running_file do |filename|
+ yield hostname, filename
+ end
end
end
- end
- def total_running_hosts
- @hosts.size
- end
+ def total_running_hosts
+ @hosts.size
+ end
- def total_running_workers
- result = 0
- @hosts.each do |hostname, host|
- result += host.total_running_workers
+ def total_running_workers
+ result = 0
+ @hosts.each do |hostname, host|
+ result += host.total_running_workers
+ end
+ result
end
- result
- end
- def is_job_complete?
- @state == :complete
- end
+ def is_job_complete?
+ @state == :complete
+ end
- def is_job_cancelled?
- @state == :cancelled
- end
+ def is_job_cancelled?
+ @state == :cancelled
+ end
- private
+ private
- def file_started_update_host_state payload
- hostname = payload[:hostname]
- @hosts[hostname] = HostState.new if @hosts[hostname].nil?
- @hosts[hostname].file_started payload[:worker_id], payload[:filename]
- end
+ def file_started_update_host_state payload
+ hostname = payload[:hostname]
+ @hosts[hostname] = HostState.new if @hosts[hostname].nil?
+ @hosts[hostname].file_started payload[:worker_id], payload[:filename]
+ end
- def handle_failed_test payload
- @failed_tests << payload
- end
+ def handle_failed_test payload
+ @failed_tests << payload
+ end
- def raise_if_completed
- raise "JobState#file_finished called when job was already complete" if is_job_complete?
- puts "NOTICE: JobState#file_finished called after job was cancelled" if is_job_cancelled?
- end
+ def raise_if_completed
+ # TODO: Following should raise a specific error instead of a generic RuntimeError
+ raise "JobState#file_finished called when job was already complete" if is_job_complete?
+ puts "NOTICE: JobState#file_finished called after job was cancelled" if is_job_cancelled?
+ end
- def failed_test? payload
- payload[:type] == "fail" || payload[:type] == "crash"
+ def failed_test? payload
+ payload[:type] == "fail" || payload[:type] == "crash"
+ end
end
end