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