mirror of
https://github.com/docker-training/node-bulletin-board.git
synced 2025-05-17 19:39:31 +08:00
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
var express = require('express'),
|
|
bodyParser = require('body-parser'),
|
|
methodOverride = require('method-override'),
|
|
errorHandler = require('errorhandler'),
|
|
morgan = require('morgan'),
|
|
prometheus = require('prom-client'),
|
|
routes = require('./backend'),
|
|
api = require('./backend/api');
|
|
|
|
var app = module.exports = express();
|
|
|
|
app.engine('html', require('ejs').renderFile);
|
|
app.set('view engine', 'html');
|
|
app.use(morgan('dev'));
|
|
app.use(bodyParser.urlencoded({ extended: false }));
|
|
app.use(bodyParser.json());
|
|
app.use(methodOverride());
|
|
app.use(express.static(__dirname + '/'));
|
|
app.use('/build', express.static('public'));
|
|
|
|
var env = process.env.NODE_ENV;
|
|
if ('development' == env) {
|
|
app.use(errorHandler({
|
|
dumpExceptions: true,
|
|
showStack: true
|
|
}));
|
|
}
|
|
|
|
if ('production' == app.get('env')) {
|
|
app.use(errorHandler());
|
|
}
|
|
|
|
// counter for Prometheus:
|
|
const httpRequestDurationMicroseconds = new prometheus.Histogram({
|
|
name: 'http_request_duration_ms',
|
|
help: 'Duration of HTTP requests in ms',
|
|
labelNames: ['method', 'route', 'code'],
|
|
buckets: [0.10, 5, 15, 50, 100, 200, 300, 400, 500] // buckets for response time from 0.1ms to 500ms
|
|
})
|
|
|
|
// record timestamp before request handler:
|
|
app.use((req, res, next) => {
|
|
res.locals.startEpoch = Date.now()
|
|
next()
|
|
})
|
|
|
|
app.get('/', routes.index);
|
|
app.get('/api/events', api.events);
|
|
app.post('/api/events', api.event);
|
|
app.delete('/api/events/:eventId', api.event);
|
|
|
|
app.get('/metrics', (req, res) => {
|
|
res.set('Content-Type', prometheus.register.contentType)
|
|
res.end(prometheus.register.metrics())
|
|
})
|
|
|
|
// set response duration after handler:
|
|
app.use((req, res, next) => {
|
|
const responseTimeInMs = Date.now() - res.locals.startEpoch
|
|
|
|
httpRequestDurationMicroseconds
|
|
.labels(req.method, req.path, res.statusCode)
|
|
.observe(responseTimeInMs)
|
|
|
|
next()
|
|
})
|
|
|
|
prometheus.collectDefaultMetrics();
|
|
|
|
app.listen(8080);
|
|
console.log('Magic happens on port 8080...'); |