Liveness Probe (NodeJS)
JS
S
JavaScriptA simple liveness probe for NodeJS applications. This one runs on port 4500. Any request on any path on port 4500 will return process stats. http://localhost:4500/health http://localhost:4500/healthz http://localhost:4500/hello http://localhost:4500/ping
1const http = require('http');
2const logger = require('../logger');
3const os = require('os');
4const moment = require('moment');
5
6function getBasicStats() {
7 const data = {
8 os: {
9 uptime: moment.duration(os.uptime(), 'seconds').humanize()
10 },
11 cpu: {
12 cores: os.cpus().length,
13 loadavg: os.loadavg()
14 },
15 memory: {
16 total: os.totalmem(),
17 free: os.freemem()
18 },
19 process: {
20 uptime: moment.duration(process.uptime(), 'seconds').humanize()
21 }
22 };
23 return JSON.stringify(data);
24}
25
26function startLivenessProb() {
27 const port = 4500;
28 const requestHandler = (request, response) => {
29 response.end(getBasicStats());
30 };
31 const server = http.createServer(requestHandler);
32
33 server.listen(port, (err) => {
34 if (err) {
35 return logger.log('Liveness Probe Failed', err);
36 }
37 logger.log(`Liveness Probe is listening on ${port}`);
38 });
39}
40
41module.exports = startLivenessProb;
42
43// Usage
44const livenessProbe = require('./lib/liveness-probe');
45livenessProbe();
46
47/*******************************************************************************************************************************/
48// New Version in TS
49/*******************************************************************************************************************************/
50import { Request, Response, Router } from 'express';
51import { RouteHandler, Get, Post, Put, Delete } from '../decorators/route-handler';
52import logService from '../classes/log-service';
53import Server from '../classes/Server';
54import * as moment from 'moment';
55import * as os from 'os';
56
57@RouteHandler('/health')
58class LivenessProbeRoute {
59 public router: Router;
60
61 constructor(public app: Server) {}
62
63 @Get('*')
64 public broadcastStats(request: Request, response: Response): Response {
65 logService.log('broacasting');
66 const stats = this.getBasicStats();
67 return response.json(stats);
68 }
69
70 private humanizeBytes(amount: number) {
71 if (amount) {
72 const amountInMb = (amount / (1024 * 1024)).toFixed(2);
73 return `${amountInMb} MB`;
74 } else {
75 return;
76 }
77 }
78
79 private getBasicStats() {
80 const data = {
81 os: {
82 uptime: moment.duration(os.uptime(), 'seconds').humanize()
83 },
84 cpu: {
85 cores: os.cpus().length,
86 loadavg: os.loadavg()
87 },
88 memory: {
89 total: this.humanizeBytes(os.totalmem()),
90 free: this.humanizeBytes(os.freemem())
91 },
92 heap: {
93 total: this.humanizeBytes(process.memoryUsage().heapTotal),
94 used: this.humanizeBytes(process.memoryUsage().heapUsed)
95 },
96 process: {
97 uptime: moment.duration(process.uptime(), 'seconds').humanize()
98 }
99 };
100 return data;
101 }
102}
103
104export default LivenessProbeRoute;Created on 5/16/2018