Add metrics for P5

This commit is contained in:
Elton Stoneman
2017-11-20 21:00:34 +00:00
parent 1e92429385
commit 6f71b37981
7 changed files with 695 additions and 12 deletions

View File

@@ -13,7 +13,8 @@
"vue": "^1.0.10",
"vue-resource": "^0.1.17",
"tedious": "^2.0.1",
"sequelize": "^4.20.1"
"sequelize": "^4.20.1",
"prom-client": "^10.2.2"
},
"devDependencies": {
"body-parser": "^1.14.1",

View File

@@ -3,6 +3,7 @@ var express = require('express'),
methodOverride = require('method-override'),
errorHandler = require('errorhandler'),
morgan = require('morgan'),
prometheus = require('prom-client'),
routes = require('./backend'),
api = require('./backend/api');
@@ -29,10 +30,42 @@ 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.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...');