upbeat
Version:
Fast health and performance monitoring with process handling
73 lines (63 loc) • 1.96 kB
text/troff
var OK = 200;
var NOTOK = 500;
module.exports =
function getService(req, res, cb) {
var service = upbeat.getService(req.params.service);
if (! service) {
res.send("Service not found", 404);
return false;
} else {
return service
}
}
// service landing page
app.get('/services/:service.:format?',
var service = getService(req, res);
var period = req.query.period || 'min';
if (req.params.format == 'json') {
var payload = service.payload(period);
res.contentType('json');
res.send(JSON.stringify(payload));
} else {
if (service) res.render('service', { service: service });
}
});
// service actions times
app.get('/services/:service/actions/:action.:format?',
var service = getService(req, res);
if (service) {
var period = 'day';
var action = service.actionHash[req.params.action];
if (req.params.format == 'json') {
res.contentType('json');
var ret = {
meta: {
uptime: action.meta.uptime(period),
downtime: action.meta.downtime(period),
avgRespTime: action.meta.averageResponseTime(period),
interval: action.interval,
timeout: action.timeout,
passes: action.meta.total('passed-count'),
failures: action.meta.total('failed-count'),
errorHistory: action.meta.errorHistory
},
responseTimes: action.meta.plotResponseTimes('min')
};
res.send(JSON.stringify(ret));
}
else {
res.render('action', { action: action, service: service });
}
}
});
app.get('/services/:service/health',
var service = getService(req, res);
if (service) {
if (service.up) {
res.send("Healthy", OK);
} else {
res.send("Unhealthy", NOTOK);
}
}
});
};