diff --git a/Dockerfile b/Dockerfile index eda4e03a..bc40db43 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:9-alpine +FROM node:12-alpine # Build-time RUN set -ex \ @@ -13,8 +13,9 @@ RUN chown -R app /usr/charts-server USER app ENV ACCEPT_HIGHCHARTS_LICENSE YES -ENV HIGHCHARTS_VERSION latest ENV HIGHCHARTS_USE_STYLED NO +ENV SERVER_CYCLE_MINUTES 720 +ENV HIGHCHARTS_VERSION "6.2.0" RUN npm install USER root diff --git a/lib/server.js b/lib/server.js index 59e50a44..7241dfcf 100644 --- a/lib/server.js +++ b/lib/server.js @@ -92,8 +92,26 @@ app.use(bodyParser.json({ limit: '50mb' })); app.use('/charts', express.static('tmp/')); +var SERVER_CYCLE_MINUTES = parseInt(process.env['SERVER_CYCLE_MINUTES'], 10); + +if (!SERVER_CYCLE_MINUTES || isNaN(SERVER_CYCLE_MINUTES)) { + console.error(`You must specify SERVER_CYCLE_MINUTES in the environment!`); + process.exit(1); +} + +var UPTIME_CUT_OFF = SERVER_CYCLE_MINUTES * 60 * 1000; +var UPTIME_RANDOM_VARIATION_CAP = Math.floor(Math.random() * 10 * 60 * 1000); // 0-10 minutes grace + +var serverStartTime = Date.now(); + app.get('/health', function (req, res) { - res.send('OK'); + var uptime = Date.now() - serverStartTime; + if (uptime < UPTIME_RANDOM_VARIATION_CAP + UPTIME_CUT_OFF) { + res.send('OK for ' + uptime + 'ms'); + } else { + res.status(503); + res.send('Server has been up too long (' + uptime + 'ms)'); + } }); function enableRateLimiting(options) {