lib/gorgon/originator.rb in gorgon-0.7.1 vs lib/gorgon/originator.rb in gorgon-0.8.0
- old
+ new
@@ -1,13 +1,15 @@
+require 'gorgon'
require 'gorgon/originator_protocol'
require 'gorgon/configuration'
require 'gorgon/job_state'
require 'gorgon/progress_bar_view'
require 'gorgon/originator_logger'
require 'gorgon/failures_printer'
require 'gorgon/source_tree_syncer'
-require 'gorgon/shutdown_manager.rb'
+require 'gorgon/shutdown_manager'
+require 'gorgon/callback_handler'
require 'awesome_print'
require 'etc'
require 'socket'
@@ -35,12 +37,11 @@
cancel_job
end
end
def cancel_job
- ShutdownManager.new(protocol: @protocol,
- job_state: @job_state).cancel_job
+ ShutdownManager.new(protocol: @protocol, job_state: @job_state).cancel_job
end
def ctrl_c
puts "\nCtrl-C received! Just wait a moment while I clean up..."
cancel_job
@@ -52,35 +53,46 @@
if files.empty?
$stderr.puts "There are no files to test! Quitting."
exit 2
end
+ cluster_id = callback_handler.before_originate
+
push_source_code
- @protocol = OriginatorProtocol.new @logger
+ @protocol = OriginatorProtocol.new(@logger, cluster_id)
EventMachine.run do
- @logger.log "Connecting..."
- @protocol.connect connection_information, :on_closed => method(:on_disconnect)
+ publish_files_and_job
- @logger.log "Publishing files..."
- @protocol.publish_files files
- create_job_state_and_observers
-
- @logger.log "Publishing Job..."
- @protocol.publish_job job_definition
- @logger.log "Job Published"
-
@protocol.receive_payloads do |payload|
handle_reply(payload)
end
end
+
+ callback_handler.after_job_finishes
end
+ def publish_files_and_job
+ @logger.log "Connecting..."
+ @protocol.connect connection_information, :on_closed => method(:on_disconnect)
+
+ @logger.log "Publishing files..."
+ @protocol.publish_files files
+ create_job_state_and_observers
+
+ @logger.log "Publishing Job..."
+ @protocol.publish_job job_definition
+ @logger.log "Job Published"
+ end
+
+ def callback_handler
+ @callback_handler ||= CallbackHandler.new(configuration[:job][:callbacks])
+ end
+
def push_source_code
- syncer = SourceTreeSyncer.new(source_tree_path)
- syncer.exclude = configuration[:job][:sync_exclude]
+ syncer = SourceTreeSyncer.new(sync_configuration)
syncer.push
if syncer.success?
@logger.log "Command '#{syncer.sys_command}' completed successfully."
else
$stderr.puts "Command '#{syncer.sys_command}' failed!"
@@ -123,11 +135,11 @@
def create_job_state_and_observers
@job_state = JobState.new files.count
@progress_bar_view = ProgressBarView.new @job_state
@progress_bar_view.show
- failures_printer = FailuresPrinter.new @job_state
+ FailuresPrinter.new @job_state
end
def on_disconnect
EventMachine.stop
end
@@ -141,23 +153,34 @@
memo.concat(Dir[obj])
end.uniq
end
def job_definition
+ # TODO: remove duplication. Use sync_configuration
job_config = configuration[:job]
- if !job_config.has_key?(:source_tree_path)
- job_config[:source_tree_path] = source_tree_path
- end
+ job_config[:sync] = {} unless job_config.has_key?(:sync)
+ job_config[:sync][:source_tree_path] = source_tree_path(job_config[:sync])
JobDefinition.new(configuration[:job])
end
private
- def source_tree_path
+ def sync_configuration
+ configuration[:job].
+ fetch(:sync, {}).
+ merge(source_tree_path: source_tree_path(configuration[:job][:sync])
+ )
+ end
+
+ def source_tree_path(sync_config)
hostname = Socket.gethostname
source_code_root = File.basename(Dir.pwd)
- "rsync://#{file_server_host}:43434/src/#{hostname}_#{source_code_root}"
+ if sync_config && sync_config[:rsync_transport] == SourceTreeSyncer::RSYNC_TRANSPORT_SSH
+ "#{file_server_host}:#{hostname}_#{source_code_root}"
+ else
+ "rsync://#{file_server_host}:43434/src/#{hostname}_#{source_code_root}"
+ end
end
def file_server_host
if configuration[:file_server].nil?
raise <<-MSG