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