Improve queue error handling (#120)

This commit is contained in:
Chris Anderson 2023-04-10 08:36:27 -05:00 committed by GitHub
parent 09f4ab938f
commit a5b4f62d29
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 9 deletions

View file

@ -26,7 +26,9 @@ export default class BugSnagProvider implements ErrorHandlingProvider {
}
}
notify(error: Error) {
Bugsnag.notify(error)
notify(error: Error, context?: Record<string, any>) {
Bugsnag.notify(error, (event) => {
context && event.addMetadata('context', context)
})
}
}

View file

@ -24,7 +24,7 @@ export default class ErrorHandler {
this.provider?.attach(api)
}
notify(error: Error) {
this.provider?.notify(error)
notify(error: Error, context?: Record<string, any>) {
this.provider?.notify(error, context)
}
}

View file

@ -4,5 +4,5 @@ export type ErrorHandlerProviderName = 'bugsnag' | 'sentry'
export default interface ErrorHandlerProvider {
attach(api: Koa): void
notify(error: Error): void
notify(error: Error, context?: Record<string, any>): void
}

View file

@ -31,9 +31,13 @@ export default class Queue {
}
async dequeue(job: EncodedJob): Promise<boolean> {
await this.started(job)
await this.jobs[job.name](job.data)
await this.completed(job)
try {
await this.started(job)
await this.jobs[job.name](job.data)
await this.completed(job)
} catch (error: any) {
this.errored(job, error)
}
return true
}
@ -62,7 +66,7 @@ export default class Queue {
async errored(job: EncodedJob | undefined, error: Error) {
logger.error({ error, job }, 'queue:job:errored')
App.main.error.notify(error)
App.main.error.notify(error, job)
}
async completed(job: EncodedJob) {