class Proxy::OpenBolt::Job

Attributes

id[RW]
name[R]
options[R]
parameters[R]
status[R]

Public Class Methods

new(name, parameters, options) click to toggle source

Valid statuses are

:pending - waiting to run
:running - in progress
:success - job finished as was completely successful
:failure - job finished and had one or more failures
:exception - command exited with an unexpected code
# File lib/smart_proxy_openbolt/job.rb, line 17
def initialize(name, parameters, options)
  @id         = nil
  @name       = name
  @parameters = parameters
  @options    = options
  @status     = :pending
  @mutex      = Mutex.new
end

Public Instance Methods

execute() click to toggle source
# File lib/smart_proxy_openbolt/job.rb, line 26
def execute
  raise NotImplementedError, "You must call #execute on a subclass of Job"
end
process() click to toggle source

Called by worker. The 'execute' function should return a Proxy::OpenBolt::Result object

# File lib/smart_proxy_openbolt/job.rb, line 32
def process
  update_status(:running)
  begin
    result = execute
    update_status(result.status)
    store_result(result)
  rescue Exception => e # rubocop:disable Lint/RescueException
    # Catch everything including non-StandardError exceptions (e.g.
    # ScriptError) so the job always gets a terminal status.
    update_status(:exception)
    logger.error("Job #{@id} failed (#{e.class}): #{e.message}")
    logger.debug(e.backtrace.join("\n")) if e.backtrace
    begin
      store_result({ message: e.full_message, backtrace: e.backtrace })
    rescue StandardError => store_error
      logger.error("Job #{@id}: failed to store error result: #{store_error.message}")
      logger.debug(store_error.backtrace.join("\n")) if store_error.backtrace
    end
  end
end
result() click to toggle source

Read the result back from disk as a raw JSON string. We avoid parsing and re-serializing since the file is already valid JSON.

# File lib/smart_proxy_openbolt/job.rb, line 63
def result
  File.read(Proxy::OpenBolt.result_file_path(@id))
end
store_result(value) click to toggle source
# File lib/smart_proxy_openbolt/job.rb, line 57
def store_result(value)
  File.write(Proxy::OpenBolt.result_file_path(@id), value.to_json)
end
update_status(value) click to toggle source
# File lib/smart_proxy_openbolt/job.rb, line 53
def update_status(value)
  @mutex.synchronize { @status = value }
end