From 00990345b6f3dc53a80ac968f3f03346e7bb7fd8 Mon Sep 17 00:00:00 2001 From: Ivan Chavero <ichavero@chavero.com.mx> Date: Tue, 16 Jul 2019 08:25:16 +0200 Subject: [PATCH] ch07s02 add application for GE --- probes/package.json | 14 +++++++ probes/app.js | 71 +++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 0 deletions(-) diff --git a/probes/app.js b/probes/app.js new file mode 100644 index 0000000..47eb49d --- /dev/null +++ b/probes/app.js @@ -0,0 +1,71 @@ +var express = require('express'), + app = express(); + +var port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080, + ip = process.env.IP || process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0'; + +var route = express.Router(); + +// global var to track app health +var healthy = true; + +app.use('/', route); + +// A route that says hello +route.get('/', function(req, res) { + res.send('Hello! This is the index page for the app.\n'); +}); + +// A route that returns readiness status +// simulates readiness 30 seconds after start up +route.get('/ready', function(req, res) { + var now = Math.floor(Date.now() / 1000); + var lapsed = now - started; + if (lapsed > 30) { + console.log('ping /ready => pong [ready]'); + res.send('Ready for service requests...\n'); + } + else { + console.log('ping /ready => pong [notready]'); + res.status(503); + res.send('Error! Service not ready for requests...\n'); + } +}); + +// A route that returns health status +route.get('/healthz', function(req, res) { + if (healthy) { + console.log('ping /healthz => pong [healthy]'); + res.send('OK\n'); + } + else { + console.log('ping /healthz => pong [unhealthy]'); + res.status(503); + res.send('Error!. App not healthy!\n'); + } +}); + +// This route handles switching the state of the app +route.route('/flip').get(function(req, res) { + + var flag = req.query.op; + if (flag == "kill") { + console.log('Received kill request. Changing app state to unhealthy...'); + healthy = false; + res.send('Switched app state to unhealthy...\n'); + } + else if (flag == "awaken") { + console.log('Received awaken request. Changing app state to healthy...'); + healthy = true; + res.send('Switched app state to healthy...\n'); + } + else { + res.send('Error! unknown flag...\n'); + } + }); + +app.listen(port, ip); +console.log('nodejs server running on http://%s:%s', ip, port); +var started = Math.floor(Date.now() / 1000); + +module.exports = app; diff --git a/probes/package.json b/probes/package.json new file mode 100644 index 0000000..2993890 --- /dev/null +++ b/probes/package.json @@ -0,0 +1,14 @@ +{ + "name": "probes", + "version": "1.0.0", + "description": "A simple Node.js app to demonstrate readiness and liveness probes", + "main": "app.js", + "scripts": { + "start": "node app.js" + }, + "author": "Red Hat Training", + "license": "ASL", + "dependencies": { + "express": "4.14.x" + } +} -- Gitblit v1.9.3