diff --git a/src/routes/getReady.ts b/src/routes/getReady.ts index 4320db4..6c65f3d 100644 --- a/src/routes/getReady.ts +++ b/src/routes/getReady.ts @@ -1,11 +1,18 @@ import { Request, Response } from "express"; import { Server } from "http"; import { config } from "../config"; +import { getRedisActiveRequests } from "../utils/redis"; +import { Postgres } from "../databases/Postgres"; +import { db } from "../databases/databases"; export async function getReady(req: Request, res: Response, server: Server): Promise { const connections = await new Promise((resolve) => server.getConnections((_, count) => resolve(count))) as number; - if (!connections || connections < config.maxConnections) { + if (!connections + || (connections < config.maxConnections + && (!config.redis || getRedisActiveRequests() < config.redis.maxConnections * 0.8) + && (!config.postgres || (db as Postgres).getStats().activeRequests < config.postgres.maxActiveRequests * 0.8)) + && (!config.postgres || (db as Postgres).getStats().avgReadTime < 5000)) { return res.sendStatus(200); } else { return res.sendStatus(500); diff --git a/src/utils/redis.ts b/src/utils/redis.ts index e158250..5879048 100644 --- a/src/utils/redis.ts +++ b/src/utils/redis.ts @@ -429,4 +429,8 @@ async function setupCacheClientTracking(client: RedisClientType, await client.sendCommand(["CLIENT", "TRACKING", "ON", "REDIRECT", cacheConnectionClientId, "BCAST"]); } +export function getRedisActiveRequests() { + return activeRequests; +} + export default exportClient;