class Proxy::Dynflow::Runner::Base
Runner
is an object that is able to initiate some action and provide update data on refresh call.
Attributes
id[R]
logger[W]
Public Class Methods
new(*_args, suspended_action: nil, id: nil)
click to toggle source
# 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
Public Instance Methods
close()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 46 def close # if cleanup is needed end
dispatch_exception(context, exception)
click to toggle source
# 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)
click to toggle source
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.
# File lib/smart_proxy_dynflow/runner/base.rb, line 30 def external_event(_event) run_refresh end
generate_updates()
click to toggle source
# 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()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 96 def initialize_continuous_outputs @continuous_output = ::Proxy::Dynflow::ContinuousOutput.new end
kill()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 42 def kill # Override when you can kill the runner in the middle end
logger()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 17 def logger @logger ||= Logger.new($stderr) end
new_update(data, exit_status)
click to toggle source
# 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()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 88 def no_update {} end
publish_data(data, type)
click to toggle source
# 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)
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 65 def publish_exception(context, exception, fatal = true) logger.error("#{context} - #{exception.class} #{exception.message}:\n" + \ exception.backtrace.join("\n")) dispatch_exception context, exception publish_exit_status('EXCEPTION') if fatal end
publish_exit_status(status)
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 72 def publish_exit_status(status) @exit_status = status end
refresh()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 38 def refresh raise NotImplementedError end
run_refresh()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 21 def run_refresh logger.debug('refreshing runner') refresh generate_updates end
run_refresh_output()
click to toggle source
# 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()
click to toggle source
# File lib/smart_proxy_dynflow/runner/base.rb, line 34 def start raise NotImplementedError end
timeout()
click to toggle source
# 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()
click to toggle source
# 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