-
Notifications
You must be signed in to change notification settings - Fork 1
/
health-check.js
51 lines (41 loc) · 1.69 KB
/
health-check.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* An endpoint for confirming that the application is up and running
* Used for better Docker healthcheck results
* Exiting with code 1 indicates failure, and 0 is success
*/
import http from 'http';
import https from 'https';
const isSsl = !!process.env.SSL_PRIV_KEY_PATH && !!process.env.SSL_PUB_KEY_PATH;
const httpWhat = isSsl ? https : http;
/* Location of the server to test */
const isDocker = !!process.env.IS_DOCKER;
const port = isSsl
? process.env.SSL_PORT || (isDocker ? 443 : 4001)
: process.env.PORT || isDocker
? 80
: 4000;
const host = process.env.HOST || '0.0.0.0';
const timeout = 2000;
const agent = new http.Agent({
rejectUnauthorized: false, // Allow self-signed certificates
});
const requestOptions = { host, port, timeout, agent };
const startTime = new Date(); // Initialize timestamp to calculate time taken
console.log(`[${startTime}] Running health check...`);
/* Creates an HTTP Request to attempt to send GET to app, then exits with appropriate exit code */
const healthCheck = httpWhat.request(requestOptions, (response) => {
const totalTime = (new Date() - startTime) / 1000;
const status = response.statusCode;
const color = status === 200 ? '\x1b[32m' : '\x1b[31m';
const message = `${color}Status: ${status}\nRequest took ${totalTime} seconds\n\x1b[0m---`;
console.log(message); // Print out healthcheck response
process.exit(status === 200 ? 0 : 1); // Exit with 0 (success), if response is 200 okay
});
/* If the server is not running, then print the error code, and exit with 1 */
healthCheck.on('error', (err) => {
console.error(
`\x1b[31mHealthceck Failed, Error: ${'\x1b[33m'}${err.code}\x1b[0m`
);
process.exit(1);
});
healthCheck.end();