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