Add support for sending exceptions to Sentry
Could we use the Worker._fail to send notifications to error monitors.
Something like this:
import honeybadger
from faktory import Worker
# Configure Honeybadger
honeybadger.configure(api_key = 'your_api_key')
class HoneybadgerWorker(Worker):
def _fail(self, jid: str, exception=None):
response = {"jid": jid}
if exception is not None:
response["errtype"] = type(exception).__name__
response["message"] = str(exception)
# notify Honeybadger of the exception
honeybadger.context(jid=jid)
honeybadger.notify(exception)
self.faktory.reply("FAIL", response)
ok = next(self.faktory.get_message())
# Now, when you create a new worker class, inherit from HoneybadgerWorker instead of Worker
class MyWorker(HoneybadgerWorker):
# Your worker code goes here
pass
What you suggested is roughly how I would implement it; only I wouldn't duplicate the existing worker code. Something like this is safer:
def _fail(self, jid: str, exception=None):
super()._fail(jid, exception)
if exception is not None:
honeybadger.context(jid=jid)
honeybadger.notify(exception)
One other thing. I have no idea what honeybadger is, but if you are using threads then this does not look safe to me:
honeybadger.context(jid=jid)
honeybadger.notify(exception)
Feels a little sketchy.
Yeah I was wondering about that, in terms of overriding the _fail behavior. Honeybadger is an error monitoring provider, but not sure on thread safety in this case. I'll have to test it out, thanks for the input!