Class: ForemanTasksCore::Runner::Base

Inherits:
Object
  • Object
show all
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

CommandRunner, Parent

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#idObject (readonly)

Returns the value of attribute id.



6
7
8
# File 'lib/foreman_tasks_core/runner/base.rb', line 6

def id
  @id
end

#loggerObject



15
16
17
# File 'lib/foreman_tasks_core/runner/base.rb', line 15

def logger
  @logger ||= Logger.new(STDERR)
end

Instance Method Details

#closeObject



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_updatesObject



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_outputsObject



78
79
80
# File 'lib/foreman_tasks_core/runner/base.rb', line 78

def initialize_continuous_outputs
  @continuous_output = ::ForemanTasksCore::ContinuousOutput.new
end

#killObject



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.message}:\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

#refreshObject

Raises:

  • (NotImplementedError)


29
30
31
# File 'lib/foreman_tasks_core/runner/base.rb', line 29

def refresh
  raise NotImplementedError
end

#run_refreshObject



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

#startObject

Raises:

  • (NotImplementedError)


25
26
27
# File 'lib/foreman_tasks_core/runner/base.rb', line 25

def start
  raise NotImplementedError
end

#timeoutObject



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_intervalObject



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