Class: Originator
Instance Method Summary
collapse
#load_configuration_from_file
Constructor Details
Returns a new instance of Originator.
21
22
23
|
# File 'lib/gorgon/originator.rb', line 21
def initialize
@configuration = nil
end
|
Instance Method Details
#callback_handler ⇒ Object
90
91
92
|
# File 'lib/gorgon/originator.rb', line 90
def callback_handler
@callback_handler ||= CallbackHandler.new(configuration[:job][:callbacks])
end
|
#cancel_job ⇒ Object
43
44
45
|
# File 'lib/gorgon/originator.rb', line 43
def cancel_job
ShutdownManager.new(protocol: @protocol, job_state: @job_state).cancel_job
end
|
#cleanup_if_job_complete ⇒ Object
107
108
109
110
111
112
|
# File 'lib/gorgon/originator.rb', line 107
def cleanup_if_job_complete
if @job_state.is_job_complete?
@logger.log "Job is done"
@protocol.disconnect
end
end
|
150
151
152
|
# File 'lib/gorgon/originator.rb', line 150
def connection_information
configuration[:connection]
end
|
#create_job_state_and_observers ⇒ Object
138
139
140
141
142
143
144
|
# File 'lib/gorgon/originator.rb', line 138
def create_job_state_and_observers
@job_state = JobState.new files.count
RuntimeRecorder.new @job_state, configuration[:runtime_file]
@progress_bar_view = ProgressBarView.new @job_state
@progress_bar_view.show
FailuresPrinter.new(configuration, @job_state)
end
|
#ctrl_c ⇒ Object
47
48
49
50
|
# File 'lib/gorgon/originator.rb', line 47
def ctrl_c
puts "\nCtrl-C received! Just wait a moment while I clean up..."
cancel_job
end
|
#handle_reply(payload) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# File 'lib/gorgon/originator.rb', line 114
def handle_reply(payload)
payload = Yajl::Parser.new(:symbolize_keys => true).parse(payload)
if payload[:action] == "finish"
@job_state.file_finished payload
elsif payload[:action] == "start"
@job_state.file_started payload
elsif payload[:type] == "crash"
@job_state.gorgon_crash_message payload
elsif payload[:type] == "exception"
ap payload
else
ap payload
end
@logger.log_message payload
cleanup_if_job_complete
end
|
#job_definition ⇒ Object
158
159
160
161
162
163
164
|
# File 'lib/gorgon/originator.rb', line 158
def job_definition
job_config = configuration[:job]
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
|
#on_disconnect ⇒ Object
146
147
148
|
# File 'lib/gorgon/originator.rb', line 146
def on_disconnect
EventMachine.stop
end
|
#originate ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/gorgon/originator.rb', line 25
def originate
begin
Signal.trap("INT") { ctrl_c }
Signal.trap("TERM") { ctrl_c }
publish
@logger.log "Originator finished successfully"
rescue StandardError
puts "Unhandled exception in originator:"
puts $!.message
puts $!.backtrace.join("\n")
puts "----------------------------------"
puts "Now attempting to cancel the job."
@logger.log_error "Unhandled Exception!" if @logger
cancel_job
end
end
|
#publish ⇒ Object
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/gorgon/originator.rb', line 52
def publish
@logger = OriginatorLogger.new configuration[:originator_log_file]
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, cluster_id)
EventMachine.run do
publish_files_and_job
@protocol.receive_payloads do |payload|
handle_reply(payload)
end
end
callback_handler.after_job_finishes
end
|
#publish_files_and_job ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/gorgon/originator.rb', line 77
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
|
#push_source_code ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/gorgon/originator.rb', line 94
def push_source_code
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!"
$stderr.puts "Stdout:\n#{syncer.output}"
$stderr.puts "Stderr:\n#{syncer.errors}"
exit 1
end
end
|