gorgon 0.11.0 → 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -2
  3. data/.rspec +2 -0
  4. data/.travis.yml +10 -0
  5. data/Dockerfile +25 -0
  6. data/Gemfile.lock +20 -15
  7. data/README.md +33 -6
  8. data/Rakefile +5 -0
  9. data/architecture.md +2 -2
  10. data/bin/gorgon +2 -114
  11. data/daemon_with_upstart_and_rvm.md +1 -1
  12. data/docker-compose.yml +28 -0
  13. data/file_server/Dockerfile +8 -0
  14. data/file_server/test_gorgon.pem.pub +1 -0
  15. data/gorgon.gemspec +2 -2
  16. data/gorgon_secret.json.sample +5 -0
  17. data/lib/gorgon/amqp_service.rb +28 -26
  18. data/lib/gorgon/callback_handler.rb +28 -26
  19. data/lib/gorgon/colors.rb +6 -4
  20. data/lib/gorgon/command.rb +145 -0
  21. data/lib/gorgon/configuration.rb +45 -5
  22. data/lib/gorgon/core_ext/hash/deep_merge.rb +21 -0
  23. data/lib/gorgon/crash_reporter.rb +15 -13
  24. data/lib/gorgon/failures_printer.rb +27 -26
  25. data/lib/gorgon/g_logger.rb +19 -17
  26. data/lib/gorgon/gem_command_handler.rb +41 -39
  27. data/lib/gorgon/gem_service.rb +60 -57
  28. data/lib/gorgon/host_state.rb +23 -21
  29. data/lib/gorgon/job.rb +19 -17
  30. data/lib/gorgon/job_definition.rb +23 -21
  31. data/lib/gorgon/job_state.rb +93 -90
  32. data/lib/gorgon/listener.rb +137 -146
  33. data/lib/gorgon/listener_installer.rb +98 -96
  34. data/lib/gorgon/originator.rb +170 -167
  35. data/lib/gorgon/originator_logger.rb +30 -28
  36. data/lib/gorgon/originator_protocol.rb +85 -83
  37. data/lib/gorgon/ping_service.rb +44 -42
  38. data/lib/gorgon/pipe_forker.rb +17 -15
  39. data/lib/gorgon/progress_bar_view.rb +109 -107
  40. data/lib/gorgon/rsync_daemon.rb +56 -54
  41. data/lib/gorgon/runtime_file_reader.rb +28 -27
  42. data/lib/gorgon/runtime_recorder.rb +27 -26
  43. data/lib/gorgon/settings/files_content.rb +27 -25
  44. data/lib/gorgon/settings/initial_files_creator.rb +58 -56
  45. data/lib/gorgon/settings/rails_project_files_content.rb +33 -31
  46. data/lib/gorgon/settings/simple_project_files_content.rb +11 -9
  47. data/lib/gorgon/shutdown_manager.rb +20 -18
  48. data/lib/gorgon/source_tree_syncer.rb +108 -69
  49. data/lib/gorgon/version.rb +1 -1
  50. data/lib/gorgon/worker.rb +130 -128
  51. data/lib/gorgon/worker_manager.rb +139 -137
  52. data/lib/gorgon_amq-protocol/.rspec +3 -0
  53. data/run_dev_environment.sh +3 -0
  54. data/run_gorgon.sh +3 -0
  55. data/run_listener.sh +3 -0
  56. data/run_test.sh +3 -0
  57. data/spec/callback_handler_spec.rb +10 -10
  58. data/spec/command_spec.rb +172 -0
  59. data/spec/configuration_spec.rb +62 -0
  60. data/spec/core_ext/hash/deep_merge_spec.rb +11 -0
  61. data/spec/crash_reporter_spec.rb +10 -10
  62. data/spec/dummy/.gitignore +3 -0
  63. data/spec/dummy/Gemfile +11 -0
  64. data/spec/dummy/Gemfile.lock +76 -0
  65. data/spec/dummy/README.md +23 -0
  66. data/spec/dummy/gorgon.json +30 -0
  67. data/spec/dummy/gorgon_callbacks.rb +68 -0
  68. data/spec/dummy/gorgon_listener.json +8 -0
  69. data/spec/dummy/integration_spec.rb +51 -0
  70. data/spec/{support/mock_app/app/mailers → dummy/log}/.gitkeep +0 -0
  71. data/spec/dummy/rspec_runner.rb +8 -0
  72. data/spec/dummy/spec/1_syntax_error_spec.rb +1 -0
  73. data/spec/dummy/spec/exception_spec.rb +5 -0
  74. data/spec/dummy/spec/failing_spec.rb +11 -0
  75. data/spec/dummy/spec/keeping_rspec_config_spec.rb +5 -0
  76. data/spec/dummy/spec/spec_helper.rb +13 -0
  77. data/spec/dummy/spec/successful_spec.rb +9 -0
  78. data/spec/dummy/spec/using_shared_example_spec.rb +3 -0
  79. data/spec/dummy/test/.rb +15 -0
  80. data/spec/dummy/test/minitest/mini1_test.rb +11 -0
  81. data/spec/dummy/test/minitest/mini2_test.rb +25 -0
  82. data/spec/dummy/test/unit/1_syntax_error_test.rb +9 -0
  83. data/spec/dummy/test/unit/exception_test.rb +14 -0
  84. data/spec/dummy/test/unit/failing_test.rb +17 -0
  85. data/spec/dummy/test/unit/successful_test.rb +9 -0
  86. data/spec/dummy/test_gorgon.pem +27 -0
  87. data/spec/end_to_end_spec.rb +142 -0
  88. data/spec/failures_printer_spec.rb +20 -20
  89. data/spec/gem_command_handler_spec.rb +24 -24
  90. data/spec/gem_service_spec.rb +18 -18
  91. data/spec/gorgon_rspec_formatter_spec.rb +12 -12
  92. data/spec/host_state_spec.rb +8 -8
  93. data/spec/job_definition_spec.rb +3 -3
  94. data/spec/job_state_spec.rb +46 -46
  95. data/spec/listener_spec.rb +67 -73
  96. data/spec/mini_test_runner_spec.rb +7 -7
  97. data/spec/originator_logger_spec.rb +6 -6
  98. data/spec/originator_protocol_spec.rb +38 -38
  99. data/spec/originator_spec.rb +78 -69
  100. data/spec/ping_service_spec.rb +14 -14
  101. data/spec/pipe_forker_spec.rb +13 -13
  102. data/spec/progress_bar_view_spec.rb +32 -32
  103. data/spec/rspec_runner_spec.rb +12 -12
  104. data/spec/rsync_daemon_spec.rb +18 -16
  105. data/spec/runtime_file_reader_spec.rb +12 -12
  106. data/spec/runtime_recorder_spec.rb +19 -19
  107. data/spec/shutdown_manager_spec.rb +9 -9
  108. data/spec/source_tree_syncer_spec.rb +148 -61
  109. data/spec/spec_helper.rb +3 -0
  110. data/spec/support/end_to_end_helpers.rb +16 -0
  111. data/spec/support/stream_helpers.rb +23 -0
  112. data/spec/unknown_runner_spec.rb +1 -1
  113. data/spec/worker_manager_spec.rb +23 -23
  114. data/spec/worker_spec.rb +70 -70
  115. metadata +84 -113
  116. data/spec/acceptance_spec_helper.rb +0 -7
  117. data/spec/support/mock_app/.gitignore +0 -15
  118. data/spec/support/mock_app/Gemfile +0 -39
  119. data/spec/support/mock_app/Gemfile.lock +0 -135
  120. data/spec/support/mock_app/README.rdoc +0 -261
  121. data/spec/support/mock_app/Rakefile +0 -7
  122. data/spec/support/mock_app/app/assets/images/rails.png +0 -0
  123. data/spec/support/mock_app/app/assets/javascripts/application.js +0 -15
  124. data/spec/support/mock_app/app/assets/stylesheets/application.css +0 -13
  125. data/spec/support/mock_app/app/controllers/application_controller.rb +0 -3
  126. data/spec/support/mock_app/app/helpers/application_helper.rb +0 -2
  127. data/spec/support/mock_app/app/models/.gitkeep +0 -0
  128. data/spec/support/mock_app/app/views/layouts/application.html.erb +0 -14
  129. data/spec/support/mock_app/config.ru +0 -4
  130. data/spec/support/mock_app/config/application.rb +0 -62
  131. data/spec/support/mock_app/config/boot.rb +0 -6
  132. data/spec/support/mock_app/config/database.yml +0 -25
  133. data/spec/support/mock_app/config/environment.rb +0 -5
  134. data/spec/support/mock_app/config/environments/development.rb +0 -37
  135. data/spec/support/mock_app/config/environments/production.rb +0 -67
  136. data/spec/support/mock_app/config/environments/test.rb +0 -37
  137. data/spec/support/mock_app/config/initializers/backtrace_silencers.rb +0 -7
  138. data/spec/support/mock_app/config/initializers/inflections.rb +0 -15
  139. data/spec/support/mock_app/config/initializers/mime_types.rb +0 -5
  140. data/spec/support/mock_app/config/initializers/secret_token.rb +0 -7
  141. data/spec/support/mock_app/config/initializers/session_store.rb +0 -8
  142. data/spec/support/mock_app/config/initializers/wrap_parameters.rb +0 -14
  143. data/spec/support/mock_app/config/locales/en.yml +0 -5
  144. data/spec/support/mock_app/config/routes.rb +0 -58
  145. data/spec/support/mock_app/db/seeds.rb +0 -7
  146. data/spec/support/mock_app/doc/README_FOR_APP +0 -2
  147. data/spec/support/mock_app/lib/assets/.gitkeep +0 -0
  148. data/spec/support/mock_app/lib/tasks/.gitkeep +0 -0
  149. data/spec/support/mock_app/log/.gitkeep +0 -0
  150. data/spec/support/mock_app/public/404.html +0 -26
  151. data/spec/support/mock_app/public/422.html +0 -26
  152. data/spec/support/mock_app/public/500.html +0 -25
  153. data/spec/support/mock_app/public/favicon.ico +0 -0
  154. data/spec/support/mock_app/public/index.html +0 -241
  155. data/spec/support/mock_app/public/robots.txt +0 -5
  156. data/spec/support/mock_app/script/rails +0 -6
  157. data/spec/support/mock_app/test/fixtures/.gitkeep +0 -0
  158. data/spec/support/mock_app/test/functional/.gitkeep +0 -0
  159. data/spec/support/mock_app/test/integration/.gitkeep +0 -0
  160. data/spec/support/mock_app/test/performance/browsing_test.rb +0 -12
  161. data/spec/support/mock_app/test/test_helper.rb +0 -13
  162. data/spec/support/mock_app/test/unit/.gitkeep +0 -0
  163. data/spec/support/mock_app/test/unit/passing_test.rb +0 -7
  164. data/spec/support/mock_app/vendor/assets/javascripts/.gitkeep +0 -0
  165. data/spec/support/mock_app/vendor/assets/stylesheets/.gitkeep +0 -0
  166. data/spec/support/mock_app/vendor/plugins/.gitkeep +0 -0
  167. data/spec/support/originator_handler.rb +0 -8
@@ -15,218 +15,221 @@ require 'awesome_print'
15
15
  require 'etc'
16
16
  require 'socket'
17
17
 
18
- class Originator
19
- include Configuration
18
+ module Gorgon
19
+ class Originator
20
+ include Configuration
20
21
 
21
- SPEC_SUCCESS_EXIT_STATUS = 0
22
- SPEC_FAILURE_EXIT_STATUS = 1
23
- SYNC_ERROR_EXIT_STATUS = 2
24
- ERROR_EXIT_STATUS = 3
22
+ SPEC_SUCCESS_EXIT_STATUS = 0
23
+ SPEC_FAILURE_EXIT_STATUS = 1
24
+ SYNC_ERROR_EXIT_STATUS = 2
25
+ ERROR_EXIT_STATUS = 3
25
26
 
26
27
 
27
- def initialize
28
- @configuration = nil
29
- end
28
+ def initialize
29
+ @configuration = nil
30
+ end
30
31
 
31
- def originate
32
- begin
33
- Signal.trap("INT") { ctrl_c }
34
- Signal.trap("TERM") { ctrl_c }
32
+ def originate
33
+ begin
34
+ Signal.trap("INT") { ctrl_c }
35
+ Signal.trap("TERM") { ctrl_c }
36
+
37
+ exit_status = publish
38
+ @logger.log "Originator finished successfully"
39
+ exit_status
40
+ rescue StandardError
41
+ $stderr.puts "Unhandled exception in originator:"
42
+ $stderr.puts $!.message
43
+ $stderr.puts $!.backtrace.join("\n")
44
+ $stderr.puts "----------------------------------"
45
+ $stderr.puts "Now attempting to cancel the job."
46
+ @logger.log_error "Unhandled Exception!" if @logger
47
+ cancel_job
48
+ exit ERROR_EXIT_STATUS
49
+ end
50
+ end
35
51
 
36
- exit_status = publish
37
- @logger.log "Originator finished successfully"
38
- exit_status
39
- rescue StandardError
40
- $stderr.puts "Unhandled exception in originator:"
41
- $stderr.puts $!.message
42
- $stderr.puts $!.backtrace.join("\n")
43
- $stderr.puts "----------------------------------"
44
- $stderr.puts "Now attempting to cancel the job."
45
- @logger.log_error "Unhandled Exception!" if @logger
46
- cancel_job
47
- exit ERROR_EXIT_STATUS
52
+ def cancel_job
53
+ ShutdownManager.new(protocol: @protocol, job_state: @job_state).cancel_job
48
54
  end
49
- end
50
55
 
51
- def cancel_job
52
- ShutdownManager.new(protocol: @protocol, job_state: @job_state).cancel_job
53
- end
56
+ def ctrl_c
57
+ puts "\nCtrl-C received! Just wait a moment while I clean up..."
58
+ cancel_job
59
+ end
54
60
 
55
- def ctrl_c
56
- puts "\nCtrl-C received! Just wait a moment while I clean up..."
57
- cancel_job
58
- end
61
+ def publish
62
+ exit_status = SPEC_SUCCESS_EXIT_STATUS
59
63
 
60
- def publish
61
- exit_status = SPEC_SUCCESS_EXIT_STATUS
64
+ @logger = OriginatorLogger.new configuration[:originator_log_file]
62
65
 
63
- @logger = OriginatorLogger.new configuration[:originator_log_file]
66
+ if files.empty?
67
+ $stderr.puts "There are no files to test! Quitting."
68
+ exit ERROR_EXIT_STATUS
69
+ end
64
70
 
65
- if files.empty?
66
- $stderr.puts "There are no files to test! Quitting."
67
- exit ERROR_EXIT_STATUS
68
- end
71
+ cluster_id = callback_handler.before_originate
69
72
 
70
- cluster_id = callback_handler.before_originate
73
+ push_source_code
71
74
 
72
- push_source_code
75
+ @protocol = OriginatorProtocol.new(@logger, cluster_id)
73
76
 
74
- @protocol = OriginatorProtocol.new(@logger, cluster_id)
77
+ EventMachine.run do
78
+ publish_files_and_job
75
79
 
76
- EventMachine.run do
77
- publish_files_and_job
80
+ @protocol.receive_payloads do |payload|
81
+ exit_status |= handle_reply(payload)
82
+ end
78
83
 
79
- @protocol.receive_payloads do |payload|
80
- exit_status |= handle_reply(payload)
84
+ @protocol.receive_new_listener_notifications do |payload|
85
+ handle_new_listener_notification(payload)
86
+ end
81
87
  end
82
88
 
83
- @protocol.receive_new_listener_notifications do |payload|
84
- handle_new_listener_notification(payload)
85
- end
89
+ callback_handler.after_job_finishes
90
+ exit_status
86
91
  end
87
92
 
88
- callback_handler.after_job_finishes
89
- exit_status
90
- end
91
-
92
- def publish_files_and_job
93
- @logger.log "Connecting..."
94
- @protocol.connect connection_information, :on_closed => method(:on_disconnect)
93
+ def publish_files_and_job
94
+ @logger.log "Connecting..."
95
+ @protocol.connect connection_information, :on_closed => method(:on_disconnect)
95
96
 
96
- @logger.log "Publishing files..."
97
- @protocol.publish_files files
98
- create_job_state_and_observers
97
+ @logger.log "Publishing files..."
98
+ @protocol.publish_files files
99
+ create_job_state_and_observers
99
100
 
100
- @logger.log "Publishing Job..."
101
- @protocol.publish_job_to_all job_definition
102
- @logger.log "Job Published"
103
- end
101
+ @logger.log "Publishing Job..."
102
+ @protocol.publish_job_to_all job_definition
103
+ @logger.log "Job Published"
104
+ end
104
105
 
105
- def callback_handler
106
- @callback_handler ||= CallbackHandler.new(configuration[:job][:callbacks])
107
- end
106
+ def callback_handler
107
+ @callback_handler ||= CallbackHandler.new(configuration[:job][:callbacks])
108
+ end
108
109
 
109
- def push_source_code
110
- syncer = SourceTreeSyncer.new(sync_configuration)
111
- syncer.push
112
- if syncer.success?
113
- @logger.log "Command '#{syncer.sys_command}' completed successfully."
114
- else
115
- $stderr.puts "Command '#{syncer.sys_command}' failed!"
116
- $stderr.puts "Stdout:\n#{syncer.output}"
117
- $stderr.puts "Stderr:\n#{syncer.errors}"
118
- exit SYNC_ERROR_EXIT_STATUS
110
+ def push_source_code
111
+ syncer = SourceTreeSyncer.new(sync_configuration)
112
+ execution_context = syncer.push
113
+ if execution_context.success
114
+ @logger.log "Command '#{execution_context.command}' completed successfully."
115
+ else
116
+ $stderr.puts "Command '#{execution_context.command}' failed!"
117
+ $stderr.puts "Stdout:\n#{execution_context.output}"
118
+ $stderr.puts "Stderr:\n#{execution_context.errors}"
119
+ exit SYNC_ERROR_EXIT_STATUS
120
+ end
119
121
  end
120
- end
121
122
 
122
- def cleanup_if_job_complete
123
- if @job_state.is_job_complete?
124
- @logger.log "Job is done"
125
- @protocol.disconnect
123
+ def cleanup_if_job_complete
124
+ if @job_state.is_job_complete?
125
+ @logger.log "Job is done"
126
+ @protocol.disconnect
127
+ end
126
128
  end
127
- end
128
129
 
129
- def handle_reply(payload)
130
- payload = Yajl::Parser.new(:symbolize_keys => true).parse(payload)
131
-
132
- # at some point this will probably need to be fancy polymorphic type based responses, or at least a nice switch statement
133
- if payload[:action] == "finish"
134
- @job_state.file_finished payload
135
- elsif payload[:action] == "start"
136
- @job_state.file_started payload
137
- elsif payload[:type] == "crash"
138
- @job_state.gorgon_crash_message payload
139
- elsif payload[:type] == "exception"
140
- # TODO
141
- ap payload
142
- else
143
- ap payload
144
- end
145
-
146
- @logger.log_message payload
147
- # Uncomment this to see each message received by originator
148
- # ap payload
149
-
150
- cleanup_if_job_complete
151
- exit_status(payload)
152
- end
130
+ def handle_reply(payload)
131
+ payload = Yajl::Parser.new(:symbolize_keys => true).parse(payload)
132
+
133
+ # at some point this will probably need to be fancy polymorphic type based responses, or at least a nice switch statement
134
+ if payload[:action] == "finish"
135
+ @job_state.file_finished payload
136
+ elsif payload[:action] == "start"
137
+ @job_state.file_started payload
138
+ elsif payload[:type] == "crash"
139
+ @job_state.gorgon_crash_message payload
140
+ elsif payload[:type] == "exception"
141
+ # TODO
142
+ ap payload
143
+ else
144
+ ap payload
145
+ end
153
146
 
154
- def handle_new_listener_notification(payload)
155
- payload = Yajl::Parser.new(:symbolize_keys => true).parse(payload)
147
+ @logger.log_message payload
148
+ # Uncomment this to see each message received by originator
149
+ # ap payload
156
150
 
157
- if payload[:listener_queue_name]
158
- @protocol.publish_job_to_one(job_definition, payload[:listener_queue_name])
159
- else
160
- puts "Received unexpected payload on originator queue"
161
- ap payload
151
+ cleanup_if_job_complete
152
+ exit_status(payload)
162
153
  end
163
- end
164
154
 
165
- def create_job_state_and_observers
166
- @job_state = JobState.new files.count
167
- RuntimeRecorder.new @job_state, configuration[:runtime_file]
168
- @progress_bar_view = ProgressBarView.new @job_state
169
- @progress_bar_view.show
170
- FailuresPrinter.new(configuration, @job_state)
171
- end
155
+ def handle_new_listener_notification(payload)
156
+ payload = Yajl::Parser.new(:symbolize_keys => true).parse(payload)
172
157
 
173
- def on_disconnect
174
- EventMachine.stop
175
- end
158
+ if payload[:listener_queue_name]
159
+ @protocol.publish_job_to_one(job_definition, payload[:listener_queue_name])
160
+ else
161
+ puts "Received unexpected payload on originator queue"
162
+ ap payload
163
+ end
164
+ end
176
165
 
177
- def connection_information
178
- configuration[:connection]
179
- end
166
+ def create_job_state_and_observers
167
+ @job_state = JobState.new files.count
168
+ RuntimeRecorder.new @job_state, configuration[:runtime_file]
169
+ @progress_bar_view = ProgressBarView.new @job_state
170
+ @progress_bar_view.show
171
+ FailuresPrinter.new(configuration, @job_state)
172
+ end
180
173
 
181
- def files
182
- @files ||= RuntimeFileReader.new(configuration).sorted_files
183
- end
174
+ def on_disconnect
175
+ EventMachine.stop
176
+ end
184
177
 
185
- def job_definition
186
- # TODO: remove duplication. Use sync_configuration
187
- job_config = configuration[:job]
188
- job_config[:sync] = {} unless job_config.has_key?(:sync)
189
- job_config[:sync][:source_tree_path] = source_tree_path(job_config[:sync])
190
- JobDefinition.new(configuration[:job])
191
- end
178
+ def connection_information
179
+ configuration[:connection]
180
+ end
192
181
 
193
- private
182
+ def files
183
+ @files ||= RuntimeFileReader.new(configuration).sorted_files
184
+ end
194
185
 
195
- def exit_status(payload)
196
- return SPEC_FAILURE_EXIT_STATUS if ["crash", "exception", "fail"].include?(payload[:type])
197
- SPEC_SUCCESS_EXIT_STATUS
198
- end
186
+ def job_definition
187
+ # TODO: remove duplication. Use sync_configuration
188
+ job_config = configuration[:job]
189
+ job_config[:sync] = {} unless job_config.has_key?(:sync)
190
+ job_config[:sync][:source_tree_path] = source_tree_path(job_config[:sync])
191
+ JobDefinition.new(configuration[:job])
192
+ end
199
193
 
200
- def sync_configuration
201
- configuration[:job].
202
- fetch(:sync, {}).
203
- merge(source_tree_path: source_tree_path(configuration[:job][:sync])
204
- )
205
- end
194
+ private
206
195
 
207
- def source_tree_path(sync_config)
208
- hostname = Socket.gethostname
209
- source_code_root = File.basename(Dir.pwd)
196
+ def exit_status(payload)
197
+ return SPEC_FAILURE_EXIT_STATUS if ["crash", "exception", "fail"].include?(payload[:type])
198
+ SPEC_SUCCESS_EXIT_STATUS
199
+ end
210
200
 
211
- if sync_config && sync_config[:rsync_transport] == SourceTreeSyncer::RSYNC_TRANSPORT_SSH
212
- "#{file_server_host}:#{hostname}_#{source_code_root}"
213
- else
214
- "rsync://#{file_server_host}:43434/src/#{hostname}_#{source_code_root}"
201
+ def sync_configuration
202
+ configuration[:job].
203
+ fetch(:sync, {}).
204
+ merge(source_tree_path: source_tree_path(configuration[:job][:sync])
205
+ )
215
206
  end
216
- end
217
207
 
218
- def file_server_host
219
- if configuration[:file_server].nil?
220
- raise <<-MSG
221
- Missing file_server configuration.
222
- See https://github.com/Fitzsimmons/Gorgon/blob/master/gorgon.json.sample for a sample configuration
223
- MSG
208
+ def source_tree_path(sync_config)
209
+ hostname = Socket.gethostname
210
+ source_code_root = File.basename(Dir.pwd)
211
+
212
+ if sync_config && sync_config[:rsync_transport] == SourceTreeSyncer::RSYNC_TRANSPORT_SSH
213
+ "#{file_server_host}:#{hostname}_#{source_code_root}"
214
+ else
215
+ "rsync://#{file_server_host}:43434/src/#{hostname}_#{source_code_root}"
216
+ end
224
217
  end
225
218
 
226
- configuration[:file_server][:host]
227
- end
219
+ def file_server_host
220
+ if configuration[:file_server].nil?
221
+ raise <<-MSG
222
+ Missing file_server configuration.
223
+ See https://github.com/nulogy/Gorgon/blob/master/gorgon.json.sample for a sample configuration
224
+ MSG
225
+ end
226
+
227
+ configuration[:file_server][:host]
228
+ end
228
229
 
229
- def configuration
230
- @configuration ||= load_configuration_from_file("gorgon.json")
230
+ def configuration
231
+ @configuration ||= load_configuration_from_file("gorgon.json", merge: "gorgon_secret.json")
232
+ end
231
233
  end
232
234
  end
235
+
@@ -1,39 +1,41 @@
1
1
  require 'gorgon/g_logger'
2
2
 
3
- class OriginatorLogger
4
- include GLogger
3
+ module Gorgon
4
+ class OriginatorLogger
5
+ include GLogger
5
6
 
6
- def initialize log_file
7
- initialize_logger log_file
8
- end
7
+ def initialize log_file
8
+ initialize_logger log_file
9
+ end
9
10
 
10
- def log_message(payload)
11
- if payload[:action] == "start"
12
- log("Started running '#{payload[:filename]}' at '#{payload[:hostname]}:#{payload[:worker_id]}'")
13
- elsif payload[:action] == "finish"
14
- print_finish(payload)
15
- elsif payload[:type] == "crash" || payload[:type] == "exception"
16
- # TODO: improve logging of these messages
17
- log(payload)
18
- else # to be removed
19
- ap payload
11
+ def log_message(payload)
12
+ if payload[:action] == "start"
13
+ log("Started running '#{payload[:filename]}' at '#{payload[:hostname]}:#{payload[:worker_id]}'")
14
+ elsif payload[:action] == "finish"
15
+ print_finish(payload)
16
+ elsif payload[:type] == "crash" || payload[:type] == "exception"
17
+ # TODO: improve logging of these messages
18
+ log(payload)
19
+ else # to be removed
20
+ ap payload
21
+ end
20
22
  end
21
- end
22
23
 
23
- private
24
+ private
24
25
 
25
- def print_finish(payload)
26
- msg = "Finished running '#{payload[:filename]}' at '#{payload[:hostname]}:#{payload[:worker_id]}'"
27
- msg << failure_message(payload[:failures]) if payload[:type] == "fail"
28
- log msg
29
- end
26
+ def print_finish(payload)
27
+ msg = "Finished running '#{payload[:filename]}' at '#{payload[:hostname]}:#{payload[:worker_id]}'"
28
+ msg << failure_message(payload[:failures]) if payload[:type] == "fail"
29
+ log msg
30
+ end
30
31
 
31
- def failure_message(failures)
32
- msg = []
33
- failures.each do |failure|
34
- msg << failure
32
+ def failure_message(failures)
33
+ msg = []
34
+ failures.each do |failure|
35
+ msg << failure
36
+ end
37
+ msg << ''
38
+ msg.join("\n")
35
39
  end
36
- msg << ''
37
- msg.join("\n")
38
40
  end
39
41
  end