Class: Proxy::Dynflow::Runner::Base
- Inherits:
-
Object
- Object
- Proxy::Dynflow::Runner::Base
- Defined in:
- lib/smart_proxy_dynflow/runner/base.rb
Overview
Runner is an object that is able to initiate some action and provide update data on refresh call.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
Returns the value of attribute id.
- #logger ⇒ Object
Instance Method Summary collapse
- #close ⇒ Object
- #dispatch_exception(context, exception) ⇒ Object
-
#external_event(_event) ⇒ Object
by default, external event just causes the refresh to be triggered: this allows the descendants of the Base to add custom logic to process the external events.
- #generate_updates ⇒ Object
-
#initialize(*_args, suspended_action: nil, id: nil) ⇒ Base
constructor
A new instance of Base.
- #initialize_continuous_outputs ⇒ Object
- #kill ⇒ Object
- #new_update(data, exit_status) ⇒ Object
- #no_update ⇒ Object
- #publish_data(data, type) ⇒ Object
- #publish_exception(context, exception, fatal = true) ⇒ Object
- #publish_exit_status(status) ⇒ Object
- #refresh ⇒ Object
- #run_refresh ⇒ Object
- #run_refresh_output ⇒ Object
- #start ⇒ Object
- #timeout ⇒ Object
- #timeout_interval ⇒ Object
Constructor Details
#initialize(*_args, suspended_action: nil, id: nil) ⇒ Base
Returns a new instance of Base.
11 12 13 14 15 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 11 def initialize(*_args, suspended_action: nil, id: nil) @suspended_action = suspended_action @id = id || SecureRandom.uuid initialize_continuous_outputs end |
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
8 9 10 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 8 def id @id end |
#logger ⇒ Object
17 18 19 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 17 def logger @logger ||= Logger.new($stderr) end |
Instance Method Details
#close ⇒ Object
46 47 48 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 46 def close # if cleanup is needed end |
#dispatch_exception(context, exception) ⇒ Object
76 77 78 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 76 def dispatch_exception(context, exception) @continuous_output.add_exception(context, exception) end |
#external_event(_event) ⇒ Object
by default, external event just causes the refresh to be triggered: this allows the descendants of the Base to add custom logic to process the external events. Similarly as ‘run_refresh`, it’s expected to return updates to be dispatched.
30 31 32 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 30 def external_event(_event) run_refresh end |
#generate_updates ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 80 def generate_updates return no_update if @continuous_output.empty? && @exit_status.nil? new_data = @continuous_output @continuous_output = Proxy::Dynflow::ContinuousOutput.new new_update(new_data, @exit_status) end |
#initialize_continuous_outputs ⇒ Object
96 97 98 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 96 def initialize_continuous_outputs @continuous_output = ::Proxy::Dynflow::ContinuousOutput.new end |
#kill ⇒ Object
42 43 44 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 42 def kill # Override when you can kill the runner in the middle end |
#new_update(data, exit_status) ⇒ Object
92 93 94 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 92 def new_update(data, exit_status) { @suspended_action => Runner::Update.new(data, exit_status) } end |
#no_update ⇒ Object
88 89 90 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 88 def no_update {} end |
#publish_data(data, type) ⇒ Object
61 62 63 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 61 def publish_data(data, type) @continuous_output.add_output(data, type) end |
#publish_exception(context, exception, fatal = true) ⇒ Object
65 66 67 68 69 70 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 65 def publish_exception(context, exception, fatal = true) logger.error("#{context} - #{exception.class} #{exception.}:\n" + \ exception.backtrace.join("\n")) dispatch_exception context, exception publish_exit_status('EXCEPTION') if fatal end |
#publish_exit_status(status) ⇒ Object
72 73 74 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 72 def publish_exit_status(status) @exit_status = status end |
#refresh ⇒ Object
38 39 40 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 38 def refresh raise NotImplementedError end |
#run_refresh ⇒ Object
21 22 23 24 25 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 21 def run_refresh logger.debug('refreshing runner') refresh generate_updates end |
#run_refresh_output ⇒ Object
100 101 102 103 104 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 100 def run_refresh_output logger.debug('refreshing runner on demand') refresh generate_updates end |
#start ⇒ Object
34 35 36 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 34 def start raise NotImplementedError end |
#timeout ⇒ Object
50 51 52 53 54 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 50 def timeout # Override when timeouts and regular kills should be handled differently publish_data('Timeout for execution passed, trying to stop the job', 'debug') kill end |
#timeout_interval ⇒ Object
56 57 58 59 |
# File 'lib/smart_proxy_dynflow/runner/base.rb', line 56 def timeout_interval # A number of seconds after which the runner should receive a #timeout # or nil for no timeout end |