Class: ForemanTasksCore::Runner::Base
- Inherits:
-
Object
- Object
- ForemanTasksCore::Runner::Base
- Defined in:
- lib/foreman_tasks_core/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
- #generate_updates ⇒ Object
-
#initialize(*_args, suspended_action: nil) ⇒ Base
constructor
A new instance of Base.
- #initialize_continuous_outputs ⇒ Object
- #kill ⇒ Object
- #publish_data(data, type) ⇒ Object
- #publish_exception(context, exception, fatal = true) ⇒ Object
- #publish_exit_status(status) ⇒ Object
- #refresh ⇒ Object
- #run_refresh ⇒ Object
- #start ⇒ Object
- #timeout ⇒ Object
- #timeout_interval ⇒ Object
Constructor Details
#initialize(*_args, suspended_action: nil) ⇒ Base
Returns a new instance of Base.
9 10 11 12 13 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 9 def initialize(*_args, suspended_action: nil) @suspended_action = suspended_action @id = SecureRandom.uuid initialize_continuous_outputs end |
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
6 7 8 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 6 def id @id end |
#logger ⇒ Object
15 16 17 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 15 def logger @logger ||= Logger.new(STDERR) end |
Instance Method Details
#close ⇒ Object
37 38 39 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 37 def close # if cleanup is needed end |
#dispatch_exception(context, exception) ⇒ Object
67 68 69 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 67 def dispatch_exception(context, exception) @continuous_output.add_exception(context, exception) end |
#generate_updates ⇒ Object
71 72 73 74 75 76 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 71 def generate_updates return {} if @continuous_output.empty? && @exit_status.nil? new_data = @continuous_output @continuous_output = ForemanTasksCore::ContinuousOutput.new { @suspended_action => Runner::Update.new(new_data, @exit_status) } end |
#initialize_continuous_outputs ⇒ Object
78 79 80 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 78 def initialize_continuous_outputs @continuous_output = ::ForemanTasksCore::ContinuousOutput.new end |
#kill ⇒ Object
33 34 35 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 33 def kill # Override when you can kill the runner in the middle end |
#publish_data(data, type) ⇒ Object
52 53 54 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 52 def publish_data(data, type) @continuous_output.add_output(data, type) end |
#publish_exception(context, exception, fatal = true) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 56 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
63 64 65 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 63 def publish_exit_status(status) @exit_status = status end |
#refresh ⇒ Object
29 30 31 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 29 def refresh raise NotImplementedError end |
#run_refresh ⇒ Object
19 20 21 22 23 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 19 def run_refresh logger.debug('refreshing runner') refresh generate_updates end |
#start ⇒ Object
25 26 27 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 25 def start raise NotImplementedError end |
#timeout ⇒ Object
41 42 43 44 45 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 41 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
47 48 49 50 |
# File 'lib/foreman_tasks_core/runner/base.rb', line 47 def timeout_interval # A number of seconds after which the runner should receive a #timeout # or nil for no timeout end |