Class: CapistranoMulticonfigParallel::Job
- Inherits:
-
Object
- Object
- CapistranoMulticonfigParallel::Job
show all
- Extended by:
- Forwardable
- Includes:
- ApplicationHelper
- Defined in:
- lib/capistrano_multiconfig_parallel/classes/job.rb
Overview
class used for defining the job class
Instance Attribute Summary collapse
Instance Method Summary
collapse
action_confirmed?, fetch_parsed_string, fetch_remaining_arguments, find_remaining_args, get_question_details, message_from_bundler?, message_is_about_a_task?, message_is_for_stdout?, msg_for_stdin?, parse_json, parse_task_string, percent_of, regex_last_match, setup_command_line_standard, truncate, wrap_string
env_key_format, env_prefix, filtered_env_keys_format, setup_flags_for_job, trace_flag
Methods included from GemHelper
fetch_gem_version, find_loaded_gem, find_loaded_gem_property, format_gem_version, get_parsed_version, verify_gem_version
app_names_from_stages, application_supports_multi_apps?, check_stage_path, checks_paths, configuration_has_valid_path?, fetch_apps_from_file, fetch_paths_from_file, fetch_stages_app, fetch_stages_paths, independent_deploy?, multi_apps?, sorted_paths, stages, stages_paths, stages_root
check_hash_set, check_numeric, strip_characters_from_string, value_is_array?, verify_array_of_strings, verify_empty_options, warn_array_without_strings
Methods included from CoreHelper
app_debug_enabled?, ask_confirm, ask_stdout_confirmation, check_terminal_tty, debug_websocket?, development_debug?, error_filtered?, execute_with_rescue, find_worker_log, force_confirmation, format_error, log_error, log_output_error, log_to_file, multi_fetch_argv, print_to_log_file, rescue_error, rescue_interrupt, setup_filename_logger, setup_logger_formatter, show_warning, terminal_actor, terminal_errors?, websocket_config, websocket_server_config
arg_is_in_default_config?, check_file, create_log_file, custom_commands, default_config_keys, default_internal_config, default_internal_configuration_params, detect_root, enable_main_log_file, fail_capfile_not_found, fetch_default_internal_config, find_config_type, find_env_multi_cap_root, find_file_by_names, find_file_in_directory, get_current_gem_name, internal_config_directory, internal_config_file, log_directory, main_log_file, multi_level_prop, pathname_is_root?, pwd_directory, pwd_parent_dir, root, setup_default_configuration_types, sliced_default_config, try_detect_file, try_detect_file_in_dir
Constructor Details
#initialize(application, options) ⇒ Job
Returns a new instance of Job.
15
16
17
18
19
20
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 15
def initialize(application, options)
@options = options.stringify_keys
@application = application
@manager = @application.manager
@gitflow ||= command.gitflow_enabled?
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object
188
189
190
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 188
def method_missing(sym, *args, &block)
command.public_send(sym, *args, &block)
end
|
Instance Attribute Details
#application ⇒ Object
Returns the value of attribute application.
9
10
11
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 9
def application
@application
end
|
#bundler_check_status ⇒ Object
Returns the value of attribute bundler_check_status.
9
10
11
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 9
def bundler_check_status
@bundler_check_status
end
|
#bundler_status ⇒ Object
Returns the value of attribute bundler_status.
9
10
11
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 9
def bundler_status
@bundler_status
end
|
#exit_status=(value) ⇒ Object
Sets the attribute exit_status
10
11
12
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 10
def exit_status=(value)
@exit_status = value
end
|
#manager ⇒ Object
Returns the value of attribute manager.
9
10
11
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 9
def manager
@manager
end
|
#new_jobs_dispatched=(value) ⇒ Object
Sets the attribute new_jobs_dispatched
10
11
12
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 10
def new_jobs_dispatched=(value)
@new_jobs_dispatched = value
end
|
#options ⇒ Object
Returns the value of attribute options.
9
10
11
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 9
def options
@options
end
|
#status=(value) ⇒ Object
Sets the attribute status
10
11
12
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 10
def status=(value)
@status = value
end
|
#will_dispatch_new_job=(value) ⇒ Object
Sets the attribute will_dispatch_new_job
10
11
12
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 10
def will_dispatch_new_job=(value)
@will_dispatch_new_job = value
end
|
Instance Method Details
#bundler_check_terminal_row ⇒ Object
59
60
61
62
63
64
65
66
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 59
def bundler_check_terminal_row
[
{ value: id.to_s },
{ value: wrap_string(File.basename(job.job_path)) },
{ value: "bundle check || bundle install" },
{ value: bundler_check_status.to_s }
]
end
|
#bundler_terminal_row ⇒ Object
68
69
70
71
72
73
74
75
76
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 68
def bundler_terminal_row
[
{ value: id.to_s },
{ value: wrap_string(job_stage_for_terminal) },
{ value: "Preparing app...setting up gems" },
{ value: terminal_env_variables.map { |str| wrap_string(str) }.join("\n") },
{ value: wrap_string(status.to_s.green) }
]
end
|
#crashed? ⇒ Boolean
156
157
158
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 156
def crashed?
worker_died? || failed? || exit_status.present?
end
|
#dead? ⇒ Boolean
160
161
162
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 160
def dead?
status.present? && status.to_s.downcase == 'dead'
end
|
#failed? ⇒ Boolean
132
133
134
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 132
def failed?
['deploy:failed'].include?(status)
end
|
#finished? ⇒ Boolean
128
129
130
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 128
def finished?
status == 'finished'
end
|
#id ⇒ Object
96
97
98
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 96
def id
@id ||= @options.fetch('id', SecureRandom.uuid)
end
|
#inspect ⇒ Object
172
173
174
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 172
def inspect
to_s
end
|
#mark_for_dispatching_new_job ⇒ Object
140
141
142
143
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 140
def mark_for_dispatching_new_job
return if rolling_back?
self.will_dispatch_new_job = new_jobs_dispatched.size + 1
end
|
#marked_for_dispatching_new_job? ⇒ Boolean
145
146
147
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 145
def marked_for_dispatching_new_job?
will_dispatch_new_job.to_i != new_jobs_dispatched.size
end
|
#new_jobs_dispatched_finished? ⇒ Boolean
149
150
151
152
153
154
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 149
def new_jobs_dispatched_finished?
if marked_for_dispatching_new_job?
sleep(0.1) until will_dispatch_new_job.to_i == new_jobs_dispatched.size
end
true
end
|
#respond_to_missing?(method_name, include_private = false) ⇒ Boolean
192
193
194
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 192
def respond_to_missing?(method_name, include_private = false)
command.public_methods.include?(method_name) || super
end
|
#rolling_back? ⇒ Boolean
136
137
138
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 136
def rolling_back?
['deploy:rollback'].include?(action)
end
|
#row_size ⇒ Object
78
79
80
81
82
83
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 78
def row_size
longest_hash = terminal_row.max_by do |hash|
hash[:value].size
end
(longest_hash[:value].size.to_f / 80.0).ceil
end
|
#save_stderr_error(data) ⇒ Object
22
23
24
25
26
27
28
29
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 22
def save_stderr_error(data)
return unless development_debug?
return unless @manager.alive?
stderr_buffer.rewind
old_data = stderr_buffer.read.dup
new_data = old_data.to_s + data
stderr_buffer.write(new_data) if ['aborted!', 'Terminating', 'Error'].any? { |word| new_data.include?(word) }
end
|
#setup_additional_env_variables(value) ⇒ Object
123
124
125
126
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 123
def setup_additional_env_variables(value)
value["#{env_variable}"] = id
end
|
#terminal_env_variables ⇒ Object
39
40
41
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 39
def terminal_env_variables
setup_command_line(filtered_keys: [env_variable])
end
|
#terminal_row ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 43
def terminal_row
if bundler_check_status
bundler_check_terminal_row
elsif bundler_status
bundler_terminal_row
else
[
{ value: id.to_s },
{ value: wrap_string(job_stage_for_terminal) },
{ value: wrap_string(capistrano_action) },
{ value: terminal_env_variables.map { |str| wrap_string(str) }.join("\n") },
{ value: wrap_string(worker_state) }
]
end
end
|
#to_json ⇒ Object
180
181
182
183
184
185
186
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 180
def to_json
hash = {}
%w(id app stage action task_arguments env_options status exit_status bundler_status will_dispatch_new_job new_jobs_dispatched).each do |key|
hash[key] = send(key).inspect
end
hash
end
|
#to_s ⇒ Object
176
177
178
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 176
def to_s
JSON.generate(to_json)
end
|
#work_done? ⇒ Boolean
168
169
170
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 168
def work_done?
new_jobs_dispatched_finished? && (finished? || crashed?)
end
|
#worker ⇒ Object
85
86
87
88
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 85
def worker
return unless @manager.alive?
@manager.get_worker_for_job(id)
end
|
#worker_died? ⇒ Boolean
164
165
166
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 164
def worker_died?
dead? || worker == nil || worker.dead?
end
|
#worker_state ⇒ Object
90
91
92
93
94
|
# File 'lib/capistrano_multiconfig_parallel/classes/job.rb', line 90
def worker_state
worker_obj = worker
default = status.to_s.upcase.red
worker_died? ? default : worker_obj.worker_state
end
|