capistrano_sentinel 0.0.12 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6567c8c26e82b4daaf31af2640ad504455c0aa23
|
4
|
+
data.tar.gz: 5eb7391d2aac739c1bfba164650e4fc141dde661
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0c0ba51b57e53779ebc8b9f37fe951dfa6c944ba7da17c37500eccca296ca92336f440f0a5056c407b29fbf72994e47338d64eace91fb70ebb7c1ffbc50ca70
|
7
|
+
data.tar.gz: 3d836d4404918d23da570ffb417ac1ed121b9e667d8abc0f7bd22ad34d51afb875b76ba846f7eba86d72bf39624c1a97cbc27165de020a32cac5ff8e1fc80e89
|
data/README.md
CHANGED
@@ -72,11 +72,54 @@ Configuration options
|
|
72
72
|
# if this is enabled, the task will sleep until the socket receives a message back in this format
|
73
73
|
# {"action"=>"invoke", "task"=><task_name>, "job_id"=><job_id>, "approved"=>"yes"},
|
74
74
|
# where the task_name needs to be the task that is waiting for approval and
|
75
|
-
# the job_id needs to be set using ENV['multi_cap_job_id'], for parallel processing
|
75
|
+
# the job_id needs to be set using ENV['multi_cap_job_id'], for parallel processing
|
76
|
+
# ( if the job id is missing , will be automatically generated with SecureRandom.uuid)
|
76
77
|
config.wait_execution = true
|
78
|
+
|
79
|
+
# if this is enabled, this will hook into stdin and stdout before a task is executed and if stdin is needed
|
80
|
+
# than will publish a message in this format {"action":"stdout","question":"<the stdout message>",default:"", "job_id":"<job_id>" }
|
81
|
+
# where question key is done by reading the last message printed by the task and parsing the message to detect
|
82
|
+
# if the message is a question . If it is a question in this format ( e.g. "where do you live?(Y/N)")
|
83
|
+
# then the question will be sent as "where do you live?" and the default will be "Y/N"
|
84
|
+
config.hook_stdin_and_stdout = true
|
77
85
|
end
|
78
86
|
```
|
79
87
|
|
88
|
+
All websocket messages are published in this format:
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
{
|
92
|
+
"client_action":"publish",
|
93
|
+
"channel":"celluloid_worker_<job_id>",
|
94
|
+
"data": {}
|
95
|
+
}
|
96
|
+
```
|
97
|
+
|
98
|
+
Where the **data** will have as value the example listed below when using **wait_execution** set to **TRUE**:
|
99
|
+
|
100
|
+
E.g. Mesage sent before a task is executed:
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
{
|
104
|
+
"action"=> "invoke",
|
105
|
+
"task"=> <task_name>,
|
106
|
+
"job_id"=> <job_id>
|
107
|
+
}
|
108
|
+
```
|
109
|
+
|
110
|
+
Or when using **hook_stdin_and_stdout** set to **TRUE**:
|
111
|
+
|
112
|
+
And E.g.
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
{
|
116
|
+
"action": "stdout",
|
117
|
+
"question": < if the stdout contains ? or : will use the text before that character >,
|
118
|
+
'default': <if the stdout message cotains () will use the text from within, otherwise string blank >,
|
119
|
+
"job_id": "<job_id>"
|
120
|
+
}
|
121
|
+
```
|
122
|
+
|
80
123
|
Usage Instructions
|
81
124
|
==================
|
82
125
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module CapistranoSentinel
|
2
2
|
class Configuration
|
3
|
-
SETTINGS = [:host, :port, :path, :secure, :auto_pong, :read_buffer_size,:reconnect, :retry_time, :wait_execution]
|
3
|
+
SETTINGS = [:host, :port, :path, :secure, :auto_pong, :read_buffer_size,:reconnect, :retry_time, :wait_execution, :hook_stdin_and_stdout]
|
4
4
|
|
5
5
|
SETTINGS.each do |setting|
|
6
6
|
attr_reader setting
|
@@ -17,6 +17,7 @@ module CapistranoSentinel
|
|
17
17
|
@reconnect = false
|
18
18
|
@retry_time = 0
|
19
19
|
@wait_execution = true
|
20
|
+
@hook_stdin_and_stdout = true
|
20
21
|
end
|
21
22
|
|
22
23
|
def update(settings_hash)
|
@@ -38,7 +38,7 @@ module CapistranoSentinel
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def print_question?(question)
|
41
|
-
if job_id.present?
|
41
|
+
if CapistranoSentinel.config.hook_stdin_and_stdout && job_id.present?
|
42
42
|
actor.user_prompt_needed?(question)
|
43
43
|
else
|
44
44
|
yield if block_given?
|
@@ -79,9 +79,9 @@ module CapistranoSentinel
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def actor_execute_block(&block)
|
82
|
-
before_hooks
|
82
|
+
before_hooks if CapistranoSentinel.config.hook_stdin_and_stdout
|
83
83
|
block.call
|
84
|
-
after_hooks
|
84
|
+
after_hooks if CapistranoSentinel.config.hook_stdin_and_stdout
|
85
85
|
end
|
86
86
|
|
87
87
|
def actor_start_working(additionals = {})
|
@@ -92,7 +92,7 @@ module CapistranoSentinel
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def stdin_approval(message)
|
95
|
-
return
|
95
|
+
return if !CapistranoSentinel.config.wait_execution || !msg_for_stdin?(message)
|
96
96
|
if @job_id == message['job_id']
|
97
97
|
@stdin_result = message.fetch('result', '')
|
98
98
|
else
|
@@ -101,7 +101,7 @@ module CapistranoSentinel
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def task_approval(message)
|
104
|
-
return if !message_is_about_a_task?(message)
|
104
|
+
return if !CapistranoSentinel.config.wait_execution || !message_is_about_a_task?(message)
|
105
105
|
log_to_file("RakeWorker #{@job_id} #{task_name} task_approval : #{message.inspect}")
|
106
106
|
if @job_id.to_s == message['job_id'].to_s && message['task'].to_s == task_name.to_s && message['approved'] == 'yes'
|
107
107
|
@task_approved = true
|