diff --git a/server/index.ts b/server/index.ts index 3e6ebc6a2..26eadf6bd 100644 --- a/server/index.ts +++ b/server/index.ts @@ -24,6 +24,7 @@ import onerror from "./onerror"; import ShutdownHelper, { ShutdownOrder } from "./utils/ShutdownHelper"; import { sequelize } from "./database/sequelize"; import RedisAdapter from "./redis"; +import Metrics from "./logging/Metrics"; // The default is to run all services to make development and OSS installations // easier to deal with. Separate services are only needed at scale. @@ -154,6 +155,8 @@ async function start(id: number, disconnect: () => void) { }) ); + ShutdownHelper.add("metrics", ShutdownOrder.last, () => Metrics.flush()); + // Handle shutdown signals process.once("SIGTERM", () => ShutdownHelper.execute()); process.once("SIGINT", () => ShutdownHelper.execute()); diff --git a/server/logging/Metrics.ts b/server/logging/Metrics.ts index 1ef053fcf..c322f0b6e 100644 --- a/server/logging/Metrics.ts +++ b/server/logging/Metrics.ts @@ -1,6 +1,5 @@ import ddMetrics from "datadog-metrics"; import env from "@server/env"; -import ShutdownHelper, { ShutdownOrder } from "@server/utils/ShutdownHelper"; class Metrics { enabled = !!env.DD_API_KEY; @@ -15,8 +14,6 @@ class Metrics { prefix: "outline.", defaultTags: [`env:${process.env.DD_ENV ?? env.ENVIRONMENT}`], }); - - ShutdownHelper.add("metrics", ShutdownOrder.last, () => this.flush()); } gauge(key: string, value: number, tags?: string[]): void { diff --git a/server/services/web.ts b/server/services/web.ts index 0aaca5d04..a33a9c40b 100644 --- a/server/services/web.ts +++ b/server/services/web.ts @@ -57,7 +57,7 @@ if (env.CDN_URL) { defaultSrc.push(env.CDN_URL); } -export default function init(app: Koa = new Koa(), server: Server): Koa { +export default function init(app: Koa = new Koa(), server?: Server): Koa { initI18n(); if (isProduction) { @@ -85,7 +85,7 @@ export default function init(app: Koa = new Koa(), server: Server): Koa { app.use(mount("/api", api)); // Monitor server connections - if (env.ENVIRONMENT !== "test") { + if (server) { setInterval(async () => { server.getConnections((err, count) => { if (err) {