Class: Originator
Instance Method Summary
collapse
#load_configuration_from_file
Constructor Details
Returns a new instance of Originator.
17
18
19
|
# File 'lib/gorgon/originator.rb', line 17
def initialize
@configuration = nil
end
|
Instance Method Details
#cancel_job ⇒ Object
39
40
41
42
|
# File 'lib/gorgon/originator.rb', line 39
def cancel_job
ShutdownManager.new(protocol: @protocol,
job_state: @job_state).cancel_job
end
|
#cleanup_if_job_complete ⇒ Object
93
94
95
96
97
98
|
# File 'lib/gorgon/originator.rb', line 93
def cleanup_if_job_complete
if @job_state.is_job_complete?
@logger.log "Job is done"
@protocol.disconnect
end
end
|
135
136
137
|
# File 'lib/gorgon/originator.rb', line 135
def connection_information
configuration[:connection]
end
|
#create_job_state_and_observers ⇒ Object
124
125
126
127
128
129
|
# File 'lib/gorgon/originator.rb', line 124
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
end
|
#ctrl_c ⇒ Object
44
45
46
47
|
# File 'lib/gorgon/originator.rb', line 44
def ctrl_c
puts "\nCtrl-C received! Just wait a moment while I clean up..."
cancel_job
end
|
#files ⇒ Object
139
140
141
142
143
|
# File 'lib/gorgon/originator.rb', line 139
def files
@files ||= configuration[:files].reduce([]) do |memo, obj|
memo.concat(Dir[obj])
end.uniq
end
|
#handle_reply(payload) ⇒ Object
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/gorgon/originator.rb', line 100
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
145
146
147
148
149
150
151
|
# File 'lib/gorgon/originator.rb', line 145
def job_definition
job_config = configuration[:job]
if !job_config.has_key?(:source_tree_path)
job_config[:source_tree_path] = source_tree_path
end
JobDefinition.new(configuration[:job])
end
|
#on_disconnect ⇒ Object
131
132
133
|
# File 'lib/gorgon/originator.rb', line 131
def on_disconnect
EventMachine.stop
end
|
#originate ⇒ Object
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/gorgon/originator.rb', line 21
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/gorgon/originator.rb', line 49
def publish
@logger = OriginatorLogger.new configuration[:originator_log_file]
if files.empty?
$stderr.puts "There are no files to test! Quitting."
exit 2
end
push_source_code
@protocol = OriginatorProtocol.new @logger
EventMachine.run do
@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"
@protocol.receive_payloads do |payload|
handle_reply(payload)
end
end
end
|
#push_source_code ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/gorgon/originator.rb', line 79
def push_source_code
syncer = SourceTreeSyncer.new(source_tree_path)
syncer.exclude = configuration[:job][:sync_exclude]
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
|