From 231ab2da03b81c13110e8b09aaaea632c06430fc Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 9 Sep 2021 22:38:34 -0700 Subject: [PATCH] fix: Add recording of job errors, remove from queues on failure, centralize options --- server/mailer.js | 1 - server/queues/processors/debouncer.js | 12 ++++-------- server/utils/queue.js | 12 +++++++++++- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/server/mailer.js b/server/mailer.js index d470642e..6b84ecc0 100644 --- a/server/mailer.js +++ b/server/mailer.js @@ -240,7 +240,6 @@ export class Mailer { }, { attempts: 5, - removeOnComplete: true, backoff: { type: "exponential", delay: 60 * 1000, diff --git a/server/queues/processors/debouncer.js b/server/queues/processors/debouncer.js index 56d305eb..524590c4 100644 --- a/server/queues/processors/debouncer.js +++ b/server/queues/processors/debouncer.js @@ -14,7 +14,6 @@ export default class DebounceProcessor { }, { delay: 5 * 60 * 1000, - removeOnComplete: true, } ); break; @@ -30,13 +29,10 @@ export default class DebounceProcessor { // this functions as a simple distributed debounce. if (document.updatedAt > new Date(event.createdAt)) return; - globalEventQueue.add( - { - ...event, - name: "documents.update.debounced", - }, - { removeOnComplete: true } - ); + globalEventQueue.add({ + ...event, + name: "documents.update.debounced", + }); break; } default: diff --git a/server/utils/queue.js b/server/utils/queue.js index 2414ad70..54e079bd 100644 --- a/server/utils/queue.js +++ b/server/utils/queue.js @@ -3,6 +3,7 @@ import Queue from "bull"; import Redis from "ioredis"; import { snakeCase } from "lodash"; import { client, subscriber } from "../redis"; +import Sentry from "../sentry"; import * as metrics from "../utils/metrics"; export function createQueue(name: string) { @@ -18,6 +19,10 @@ export function createQueue(name: string) { return new Redis(process.env.REDIS_URL); } }, + defaultJobOptions: { + removeOnComplete: true, + removeOnFail: true, + }, }); queue.on("stalled", () => { @@ -28,7 +33,12 @@ export function createQueue(name: string) { metrics.increment(`${prefix}.jobs.completed`); }); - queue.on("error", () => { + queue.on("error", (err) => { + if (process.env.SENTRY_DSN) { + Sentry.captureException(err); + } else { + console.error(err); + } metrics.increment(`${prefix}.jobs.errored`); });