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