faktory_worker_python icon indicating copy to clipboard operation
faktory_worker_python copied to clipboard

Add support for sending exceptions to Sentry

Open cdrx opened this issue 5 years ago • 5 comments

cdrx avatar Apr 09 '20 12:04 cdrx

Could we use the Worker._fail to send notifications to error monitors.

TonsOfFun avatar Jun 19 '23 23:06 TonsOfFun

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

TonsOfFun avatar Jun 20 '23 00:06 TonsOfFun

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)

cdrx avatar Jun 20 '23 13:06 cdrx

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.

cdrx avatar Jun 20 '23 13:06 cdrx

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!

TonsOfFun avatar Jun 21 '23 21:06 TonsOfFun