@godaddy/terminus
Advanced tools
Comparing version 4.3.1 to 4.4.0
@@ -13,4 +13,4 @@ { | ||
"dependencies": { | ||
"cassandra-driver": "^3.5.0" | ||
"cassandra-driver": "^3.6.0" | ||
} | ||
} |
@@ -12,4 +12,4 @@ { | ||
"dependencies": { | ||
"mysql": "^2.15.0" | ||
"mysql": "^2.18.1" | ||
} | ||
} |
@@ -12,4 +12,4 @@ { | ||
"dependencies": { | ||
"pg": "^7.4.1" | ||
"pg": "^7.18.2" | ||
} | ||
} |
@@ -65,23 +65,34 @@ 'use strict' | ||
server.listeners('request').forEach((listener) => { | ||
server.removeListener('request', listener) | ||
server.on('request', async (req, res) => { | ||
let hasSetHandler = false | ||
const createHandler = (listener) => { | ||
const check = hasSetHandler ? () => {} : async (healthCheck, res) => { | ||
if (state.isShuttingDown) { | ||
return sendFailure(res, { onSendFailureDuringShutdown }) | ||
} | ||
let info | ||
try { | ||
info = await healthCheck() | ||
} catch (error) { | ||
logger('healthcheck failed', error) | ||
return sendFailure(res, { error: error.causes }) | ||
} | ||
return sendSuccess(res, { info, verbatim: healthChecks.verbatim }) | ||
} | ||
hasSetHandler = true | ||
return async (req, res) => { | ||
const url = caseInsensitive ? req.url.toLowerCase() : req.url | ||
const healthCheck = healthChecks[url] | ||
if (healthCheck) { | ||
if (state.isShuttingDown) { | ||
return sendFailure(res, { onSendFailureDuringShutdown }) | ||
} | ||
let info | ||
try { | ||
info = await healthCheck() | ||
} catch (error) { | ||
logger('healthcheck failed', error) | ||
return sendFailure(res, { error: error.causes }) | ||
} | ||
return sendSuccess(res, { info, verbatim: healthChecks.verbatim }) | ||
return check(healthCheck, res) | ||
} else { | ||
listener(req, res) | ||
} | ||
}) | ||
} | ||
} | ||
server.listeners('request').forEach((listener) => { | ||
server.removeListener('request', listener) | ||
server.on('request', createHandler(listener)) | ||
}) | ||
@@ -88,0 +99,0 @@ } |
@@ -105,2 +105,31 @@ 'use strict' | ||
it('do not send multiple responses for the same request', async () => { | ||
let healthCheckRanTimes = 0 | ||
let hasHandlerCalled = false | ||
let hasUnhandledRejection = false | ||
process.once('unhandledRejection', () => { | ||
hasUnhandledRejection = true; | ||
}) | ||
server.on('request', () => { | ||
hasHandlerCalled = true | ||
}) | ||
createTerminus(server, { | ||
healthChecks: { | ||
'/healthCheck': () => { | ||
healthCheckRanTimes++ | ||
return Promise.resolve() | ||
} | ||
}, | ||
}) | ||
server.listen(8000) | ||
await fetch('http://localhost:8000/healthCheck') | ||
expect(hasUnhandledRejection).to.eql(false) | ||
expect(healthCheckRanTimes).to.eql(1) | ||
expect(hasHandlerCalled).to.eql(false) | ||
}) | ||
it('includes info on resolve', async () => { | ||
@@ -107,0 +136,0 @@ let onHealthCheckRan = false |
{ | ||
"name": "@godaddy/terminus", | ||
"version": "4.3.1", | ||
"version": "4.4.0", | ||
"description": "", | ||
@@ -23,4 +23,4 @@ "main": "index.js", | ||
"dependencies": { | ||
"es6-promisify": "^6.0.0", | ||
"stoppable": "^1.0.5" | ||
"es6-promisify": "^6.0.2", | ||
"stoppable": "^1.1.0" | ||
}, | ||
@@ -33,7 +33,7 @@ "devDependencies": { | ||
"express": "^4.16.2", | ||
"mocha": "^6.0.0", | ||
"mocha": "^7.0.1", | ||
"node-fetch": "^2.0.0", | ||
"nyc": "^14.0.0", | ||
"nyc": "^15.0.0", | ||
"pre-commit": "^1.2.2", | ||
"semantic-release": "^15.5.1", | ||
"semantic-release": "^17.0.0", | ||
"standard": "^14.0.0", | ||
@@ -40,0 +40,0 @@ "supertest": "^4.0.0", |
@@ -72,3 +72,3 @@ | ||
// both | ||
logger // [optional] logger function to be called with errors | ||
logger // [optional] logger function to be called with errors. Example logger call: ('error happened during shutdown', error). See terminus.js for more details. | ||
}; | ||
@@ -99,3 +99,3 @@ | ||
if (errors.length) { | ||
throw new HealthCheckError('healtcheck failed', errors) | ||
throw new HealthCheckError('healthcheck failed', errors) | ||
} | ||
@@ -102,0 +102,0 @@ }) |
@@ -10,4 +10,5 @@ declare module "@godaddy/terminus" { | ||
export interface HealthCheckMap { | ||
[key: string]: HealthCheck; | ||
export type HealthCheckMap = { | ||
verbatim?: boolean; | ||
[key: string]: HealthCheck | boolean; | ||
} | ||
@@ -14,0 +15,0 @@ |
@@ -28,3 +28,4 @@ import * as http from "http"; | ||
healthChecks: { | ||
"/healthcheck": healthcheck | ||
"/healthcheck": healthcheck, | ||
verbatim: true | ||
}, | ||
@@ -31,0 +32,0 @@ timeout: 1000, |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
63268
55
1592
35
Updatedes6-promisify@^6.0.2
Updatedstoppable@^1.1.0