Class: CapistranoSentinel::RequestWorker
Overview
class that handles the rake task and waits for approval from the celluloid worker
Instance Attribute Summary collapse
Instance Method Summary
collapse
get_question_details, message_from_bundler?, message_is_about_a_task?, message_is_for_stdout?, msg_for_stdin?, parse_json
Methods included from Logging
error_filtered?, execute_with_rescue, find_worker_log, format_error, log_error, log_output_error, log_to_file, logger, logging_enabled?, print_to_log_file, rescue_error, setup_filename_logger, setup_logger_formatter, show_warning
Instance Attribute Details
Returns the value of attribute action.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def action
@action
end
|
Returns the value of attribute client.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def client
@client
end
|
Returns the value of attribute executor.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def executor
@executor
end
|
Returns the value of attribute job_id.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def job_id
@job_id
end
|
#stdin_result ⇒ Object
Returns the value of attribute stdin_result.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def stdin_result
@stdin_result
end
|
#successfull_subscription ⇒ Object
Returns the value of attribute successfull_subscription.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def successfull_subscription
@successfull_subscription
end
|
Returns the value of attribute task.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def task
@task
end
|
#task_approved ⇒ Object
Returns the value of attribute task_approved.
8
9
10
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 8
def task_approved
@task_approved
end
|
Instance Method Details
#default_settings ⇒ Object
35
36
37
38
39
40
41
42
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 35
def default_settings
@stdin_result = nil
@job_id = @options['job_id']
@task_approved = false
@action = @options['action'].present? ? @options['action'] : 'invoke'
@task = @options['task']
@successfull_subscription = false
end
|
#on_close(message) ⇒ Object
114
115
116
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 114
def on_close(message)
log_to_file("RakeWorker #{@job_id} websocket connection closed: #{message.inspect}")
end
|
#on_error(message) ⇒ Object
61
62
63
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 61
def on_error(message)
log_to_file("RakeWorker #{@job_id} websocket connection error: #{message.inspect}")
end
|
#on_message(message) ⇒ Object
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 65
def on_message(message)
return if message.blank? || !message.is_a?(Hash)
message = message.stringify_keys
log_to_file("RakeWorker #{@job_id} received after on message: #{message.inspect}")
if message['client_action'] == 'successful_subscription'
publish_subscription_successfull(message)
elsif message_is_about_a_task?(message)
task_approval(message)
elsif msg_for_stdin?(message)
stdin_approval(message)
else
show_warning "unknown message: #{message.inspect}"
end
end
|
#publish_subscription_successfull(message) ⇒ Object
81
82
83
84
85
86
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 81
def publish_subscription_successfull(message)
return unless message['client_action'] == 'successful_subscription'
log_to_file("Rake worker #{@job_id} received after publish_subscription_successfull: #{message}")
publish_to_worker(task_data)
@successfull_subscription = true
end
|
#publish_to_worker(data) ⇒ Object
56
57
58
59
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 56
def publish_to_worker(data)
log_to_file("RakeWorker #{@job_id} tries to publish #{data.inspect}")
socket_client.publish("#{CapistranoSentinel::RequestHooks::PUBLISHER_PREFIX}#{@job_id}", data)
end
|
#socket_client ⇒ Object
31
32
33
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 31
def socket_client
@socket_client = CapistranoSentinel::RequestHooks.socket_client
end
|
#stdin_approval(message) ⇒ Object
95
96
97
98
99
100
101
102
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 95
def stdin_approval(message)
return if !CapistranoSentinel.config.wait_execution || !msg_for_stdin?(message)
if @job_id == message['job_id']
@stdin_result = message.fetch('result', '')
else
show_warning "unknown stdin_approval #{message.inspect}"
end
end
|
#task_approval(message) ⇒ Object
104
105
106
107
108
109
110
111
112
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 104
def task_approval(message)
return if !CapistranoSentinel.config.wait_execution || !message_is_about_a_task?(message)
log_to_file("RakeWorker #{@job_id} #{task_name} task_approval : #{message.inspect}")
if @job_id.to_s == message['job_id'].to_s && message['task'].to_s == task_name.to_s && message['approved'] == 'yes'
@task_approved = true
else
show_warning "#{self.inspect} got unknown task_approval #{message} #{task_data}"
end
end
|
#task_data ⇒ Object
48
49
50
51
52
53
54
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 48
def task_data
{
action: @action,
task: task_name,
job_id: @job_id
}
end
|
#task_name ⇒ Object
44
45
46
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 44
def task_name
@task.respond_to?(:name) ? @task.name : @task
end
|
#user_prompt_needed?(data) ⇒ Boolean
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 118
def user_prompt_needed?(data)
question, default = get_question_details(data)
log_to_file("RakeWorker #{@job_id} tries to determine question #{data.inspect} #{question.inspect} #{default.inspect}")
return if question.blank? || @action != 'invoke'
publish_to_worker(action: 'stdout',
question: question,
default: default.present? ? default.delete('()') : '',
job_id: @job_id)
wait_for_stdin_input if CapistranoSentinel.config.wait_execution
end
|
#wait_execution_of_task(name = task_name, time = 0.1) ⇒ Object
19
20
21
22
23
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 19
def wait_execution_of_task(name = task_name, time = 0.1)
wait_for(name, time)
end
|
#wait_for(_name, time) ⇒ Object
25
26
27
28
29
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 25
def wait_for(_name, time)
sleep time
end
|
88
89
90
91
92
93
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 88
def wait_for_stdin_input
wait_execution_of_task until @stdin_result.present?
output = @stdin_result.clone
@stdin_result = nil
output
end
|
#work(options = {}) ⇒ Object
12
13
14
15
16
17
|
# File 'lib/capistrano_sentinel/classes/request_worker.rb', line 12
def work(options = {})
@options = options.stringify_keys
default_settings
socket_client.actor = self
publish_to_worker(task_data) if options['subscribed'].present?
end
|