feat(ch07s02): Add readiness probe switch (#152)

This commit is contained in:
Marek Czernek
2021-07-06 03:19:35 -04:00
committed by GitHub
parent 237c9e14fe
commit 9ac3d08fa7
3 changed files with 56 additions and 48 deletions

5
.gitignore vendored
View File

@@ -69,3 +69,8 @@ nb-configuration.xml
## OS X ## OS X
########################## ##########################
.DS_Store .DS_Store
##########################
## JavaScript
##########################
node_modules/

View File

@@ -1,68 +1,71 @@
var express = require('express'), var express = require('express'),
app = express(); app = express();
var port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080, var port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080,
ip = process.env.IP || process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0'; ip = process.env.IP || process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0',
healthy = true,
ready = true;
var route = express.Router(); var route = express.Router();
// global var to track app health
var healthy = true;
app.use('/', route); app.use('/', route);
// A route that says hello // A route that says hello
route.get('/', function(req, res) { route.get('/', function (req, res) {
res.send('Hello! This is the index page for the app.\n'); res.send('Hello! This is the index page for the app.\n');
}); });
// A route that returns readiness status // A route that returns readiness status
// simulates readiness 30 seconds after start up route.get('/ready', function (req, res) {
route.get('/ready', function(req, res) { var now = Math.floor(Date.now() / 1000);
var now = Math.floor(Date.now() / 1000); var lapsed = now - started;
var lapsed = now - started; if (ready && (lapsed > 30)) {
if (lapsed > 30) { console.log('ping /ready => pong [ready]');
console.log('ping /ready => pong [ready]'); res.send('Ready for service requests...\n');
res.send('Ready for service requests...\n'); }
} else {
else { console.log('ping /ready => pong [notready]');
console.log('ping /ready => pong [notready]'); res.status(503);
res.status(503); res.send('Error! Service not ready for requests...\n');
res.send('Error! Service not ready for requests...\n'); }
}
}); });
// A route that returns health status // A route that returns health status
route.get('/healthz', function(req, res) { route.get('/healthz', function (req, res) {
if (healthy) { if (healthy) {
console.log('ping /healthz => pong [healthy]'); console.log('ping /healthz => pong [healthy]');
res.send('OK\n'); res.send('OK\n');
} }
else { else {
console.log('ping /healthz => pong [unhealthy]'); console.log('ping /healthz => pong [unhealthy]');
res.status(503); res.status(503);
res.send('Error!. App not healthy!\n'); res.send('Error! App not healthy!\n');
} }
}); });
// This route handles switching the state of the app // This route handles switching the state of the app
route.route('/flip').get(function(req, res) { route.route('/flip').get(function (req, res) {
var flag = req.query.op;
var flag = req.query.op; if (flag === 'kill-health') {
if (flag == "kill") { console.log('Received kill request for health probe.');
console.log('Received kill request. Changing app state to unhealthy...'); healthy = false;
healthy = false; res.send('Switched app state to unhealthy...\n');
res.send('Switched app state to unhealthy...\n'); } else if (flag === "awaken-health") {
} console.log('Received awaken request for health probe.');
else if (flag == "awaken") { healthy = true;
console.log('Received awaken request. Changing app state to healthy...'); res.send('Switched app state to healthy...\n');
healthy = true; } else if (flag === 'kill-ready') {
res.send('Switched app state to healthy...\n'); console.log('Received kill request for readiness probe.');
} ready = false;
else { res.send('Switched app state to not ready...\n');
res.send('Error! unknown flag...\n'); } else if (flag === 'awaken-ready') {
} console.log('Received awaken request for readiness probe.');
}); ready = true;
res.send('Switched app state to ready...\n');
} else {
res.send('Error! unknown flag...\n');
}
});
app.listen(port, ip); app.listen(port, ip);
console.log('nodejs server running on http://%s:%s', ip, port); console.log('nodejs server running on http://%s:%s', ip, port);

View File

@@ -9,6 +9,6 @@
"author": "Red Hat Training", "author": "Red Hat Training",
"license": "ASL", "license": "ASL",
"dependencies": { "dependencies": {
"express": "4.14.x" "express": "4.17.x"
} }
} }