diff --git a/src/core/metrics.ts b/src/core/metrics.ts index 6032d9e..bdeb495 100644 --- a/src/core/metrics.ts +++ b/src/core/metrics.ts @@ -126,9 +126,11 @@ const handleHealthCheck = async (req, res, next) => { if (req.url === '/health' || req.url === '/') { // check if a slot was received recently let healthySlotSubscriber = false; + let slotChanged = false; + let slotChangedRecently = false; await lastSlotReceivedMutex.runExclusive(async () => { - const slotChanged = lastSlotReceived > lastHealthCheckSlot; - const slotChangedRecently = + slotChanged = lastSlotReceived > lastHealthCheckSlot; + slotChangedRecently = Date.now() - lastHealthCheckSlotUpdated < healthCheckInterval; healthySlotSubscriber = slotChanged || slotChangedRecently; logger.debug( @@ -142,6 +144,9 @@ const handleHealthCheck = async (req, res, next) => { if (!healthySlotSubscriber) { healthStatus = HEALTH_STATUS.UnhealthySlotSubscriber; logger.error(`SlotSubscriber is not healthy`); + logger.error( + `Slotsubscriber health check: lastSlotReceived: ${lastSlotReceived}, lastHealthCheckSlot: ${lastHealthCheckSlot}, slotChanged: ${slotChanged}, slotChangedRecently: ${slotChangedRecently}` + ); res.writeHead(500); res.end(`SlotSubscriber is not healthy`); diff --git a/src/index.ts b/src/index.ts index 1f92b71..0a8c235 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,6 @@ import { DriftClient, initialize, DriftEnv, - SlotSubscriber, UserMap, DLOBOrder, DLOBOrders, @@ -104,6 +103,13 @@ app.use((req, _res, next) => { app.use(errorHandler); const server = http.createServer(app); +// Default keepalive is 5s, since the AWS ALB timeout is 60 seconds, clients +// sometimes get 502s. +// https://shuheikagawa.com/blog/2019/04/25/keep-alive-timeout/ +// https://stackoverflow.com/a/68922692 +server.keepAliveTimeout = 61 * 1000; +server.headersTimeout = 65 * 1000; + const opts = program.opts(); setLogLevel(opts.debug ? 'debug' : 'info');