Use proper logging, more errors from tasks should now trigger showing the error dialog instead of siliently failing

This commit is contained in:
2022-03-23 15:09:51 -05:00
parent 57bcff8019
commit b5fc3e9239
15 changed files with 205 additions and 78 deletions

View File

@@ -1,12 +1,16 @@
class W3DHub
class BackgroundWorker
LOG_TAG = "W3DHub::BackgroundWorker"
@@instance = nil
@@alive = false
def self.create
raise "BackgroundWorker instance already exists!" if @@instance
logger.info(LOG_TAG) { "Starting background job worker..." }
@@alive = true
@@run = true
@@instance = self.new
Async do
@@ -18,20 +22,24 @@ class W3DHub
@@instance
end
def self.run?
@@run
end
def self.alive?
@@alive
end
def self.shutdown!
@@alive = false
@@run = false
end
def self.job(job, callback)
@@instance.add_job(Job.new(job, callback))
def self.job(job, callback, error_handler = nil)
@@instance.add_job(Job.new(job: job, callback: callback, error_handler: error_handler))
end
def self.foreground_job(job, callback)
@@instance.add_job(Job.new(job, callback, true))
def self.foreground_job(job, callback, error_handler = nil)
@@instance.add_job(Job.new(job: job, callback: callback, error_handler: error_handler, deliver_to_queue: true))
end
def initialize
@@ -39,17 +47,20 @@ class W3DHub
end
def handle_jobs
while BackgroundWorker.alive?
while BackgroundWorker.run?
job = @jobs.shift
begin
job&.do
rescue => e
pp e
rescue => error
job&.raise_error(error)
end
sleep 0.1
end
logger.info(LOG_TAG) { "Stopped background job worker." }
@@alive = false
end
def add_job(job)
@@ -57,9 +68,10 @@ class W3DHub
end
class Job
def initialize(job, callback, deliver_to_queue = false)
def initialize(job:, callback:, error_handler: nil, deliver_to_queue: false)
@job = job
@callback = callback
@error_handler = error_handler
@deliver_to_queue = deliver_to_queue
end
@@ -76,6 +88,11 @@ class W3DHub
@callback.call(result)
end
end
def raise_error(error)
logger.error error
@error_handler&.call(error)
end
end
end
end