From bd880ee9848bc055ba8977b3cf976420f4c675eb Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 9 Sep 2021 21:55:45 -0700 Subject: [PATCH] chore: Add basic logging of metrics to event queue (#2545) * chore: Add basic logging of metrics to event queue closes #2524 * Better naming for multiple queue types * Add stalled event --- server/utils/queue.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/server/utils/queue.js b/server/utils/queue.js index ffc4a7414..2414ad704 100644 --- a/server/utils/queue.js +++ b/server/utils/queue.js @@ -1,10 +1,13 @@ // @flow import Queue from "bull"; import Redis from "ioredis"; +import { snakeCase } from "lodash"; import { client, subscriber } from "../redis"; +import * as metrics from "../utils/metrics"; export function createQueue(name: string) { - return new Queue(name, { + const prefix = `queue.${snakeCase(name)}`; + const queue = new Queue(name, { createClient(type) { switch (type) { case "client": @@ -16,4 +19,27 @@ export function createQueue(name: string) { } }, }); + + queue.on("stalled", () => { + metrics.increment(`${prefix}.jobs.stalled`); + }); + + queue.on("completed", () => { + metrics.increment(`${prefix}.jobs.completed`); + }); + + queue.on("error", () => { + metrics.increment(`${prefix}.jobs.errored`); + }); + + queue.on("failed", () => { + metrics.increment(`${prefix}.jobs.failed`); + }); + + setInterval(async () => { + metrics.gauge(`${prefix}.count`, await queue.count()); + metrics.gauge(`${prefix}.delayed_count`, await queue.getDelayedCount()); + }, 5 * 1000); + + return queue; }