commit
724b165e23
2 changed files with 123 additions and 0 deletions
@ -0,0 +1,13 @@ |
|||
{ |
|||
"name": "sample-app", |
|||
"version": "0.0.1", |
|||
"description": "An sample app that can sometimes fail...", |
|||
"main": "server.js", |
|||
"scripts": {}, |
|||
"author": "Nicolas MASSE", |
|||
"repository": "https://github.com/nmasse-itix/OpenShift-Examples.git", |
|||
"license": "MIT", |
|||
"dependencies": { |
|||
"express": "latest" |
|||
} |
|||
} |
|||
@ -0,0 +1,110 @@ |
|||
var express = require("express"); |
|||
var app = express(); |
|||
var router = express.Router(); |
|||
var port = 8080; |
|||
|
|||
var alive = true; |
|||
var countdown = 30; |
|||
|
|||
// This is our access_log
|
|||
router.use(function (req,res,next) { |
|||
next(); |
|||
console.log("[%s] %s %s => %i", new Date().toUTCString(), req.method, req.originalUrl, res.statusCode); |
|||
}); |
|||
|
|||
function getState() { |
|||
var response = { |
|||
"ready": countdown <= 0, |
|||
"alive": alive, |
|||
"pod": process.env["HOSTNAME"] |
|||
}; |
|||
|
|||
if (countdown > 0) { |
|||
response.countdown = countdown; |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
|
|||
function doCountdown() { |
|||
if (countdown > 0) { |
|||
countdown--; |
|||
setTimeout(doCountdown, 1000); |
|||
} |
|||
} |
|||
// Countdown before announcing our readiness
|
|||
doCountdown(); |
|||
|
|||
// Help message
|
|||
router.get("/",function(req,res){ |
|||
var response = { |
|||
paths: { |
|||
'/please-die': 'This app will die very soon !', |
|||
'/please-resuscitate': 'This app will come back to life !', |
|||
'/': 'This message', |
|||
'/probe/readiness': 'Standard readiness probe', |
|||
'/probe/liveness': 'Standard liveness probe', |
|||
'/probe/custom': 'A strange custom probe...' |
|||
}, |
|||
state: getState() |
|||
} |
|||
res.type('application/json') |
|||
.send(JSON.stringify(response)) |
|||
.end(); |
|||
}); |
|||
|
|||
router.get("/please-die",function(req,res){ |
|||
alive = false; |
|||
var response = getState(); |
|||
res.type('application/json') |
|||
.send(JSON.stringify(response)) |
|||
.end(); |
|||
}); |
|||
|
|||
router.get("/please-resuscitate",function(req,res){ |
|||
alive = true; |
|||
var response = getState(); |
|||
res.type('application/json') |
|||
.send(JSON.stringify(response)) |
|||
.end(); |
|||
}); |
|||
|
|||
router.get("/probe/readiness",function(req,res){ |
|||
var response = getState(); |
|||
res.type('application/json') |
|||
.status(countdown <= 0 ? 200 : 503) |
|||
.send(JSON.stringify(response)) |
|||
.end(); |
|||
}); |
|||
|
|||
router.get("/probe/liveness",function(req,res){ |
|||
var response = getState(); |
|||
res.type('application/json') |
|||
.status(alive ? 200 : 500) |
|||
.send(JSON.stringify(response)) |
|||
.end(); |
|||
}); |
|||
|
|||
router.get("/probe/custom",function(req,res){ |
|||
if (alive) { |
|||
res.type('application/json') |
|||
.status(418) |
|||
.send(JSON.stringify(getState())) |
|||
.end(); |
|||
} else { |
|||
res.type('text/html') |
|||
.status(500) |
|||
.send("<h1>I'm dead... X-)</h1>") |
|||
.end(); |
|||
} |
|||
}); |
|||
|
|||
app.use("/",router); |
|||
|
|||
app.use("*",function(req,res){ |
|||
res.status(404).send("Not found"); |
|||
}); |
|||
|
|||
app.listen(port,function(){ |
|||
console.log("Live at Port %i", port); |
|||
}); |
|||
Loading…
Reference in new issue