UNPKG

springer-uptime

Version:

Remote monitoring for HTTP applications

95 lines (83 loc) 2.75 kB
/** * Module dependencies. */ var Check = require('../../../models/check'); var Tag = require('../../../models/tag'); var TagHourlyStat = require('../../../models/tagHourlyStat'); var CheckEvent = require('../../../models/checkEvent'); var async = require('async'); /** * Check Routes */ module.exports = function(app) { app.get('/tags', function(req, res) { Tag .find() .sort({ name: 1 }) .exec(function(err, tags) { if (err) return next(err); res.json(tags); }); }); // tag route middleware var loadTag = function(req, res, next) { Tag.findOne({ name: req.params.name }, function(err, tag) { if (err) return next(err); if (!tag) return res.json(404, { error: 'failed to load tag ' + req.params.name }); req.tag = tag; next(); }); }; app.get('/tags/:name', loadTag, function(req, res, next) { res.json(req.tag); }); app.get('/tags/:name/checks/:period/:timestamp', loadTag, function(req, res, next) { req.tag.getChecksForPeriod(req.params.period, new Date(parseInt(req.params.timestamp)), function(err, checks) { if (err) return next(err); res.json(checks); }) }); app.get('/tags/:name/stat/:period/:timestamp', loadTag, function(req, res, next) { req.tag.getSingleStatsForPeriod(req.params.period, new Date(parseInt(req.params.timestamp)), function(err, stat) { if(err) return next(err); res.json(stat); }); }); app.get('/tags/:name/stats/:type', loadTag, function(req, res, next) { req.tag.getStatsForPeriod(req.params.type, req.query.begin, req.query.end, function(err, stats) { if(err) return next(err); res.json(stats); }); }); app.get('/tags/:name/events', function(req, res) { var query = { tags: req.params.name, timestamp: { $gte: req.query.begin || new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) } }; if (req.query.end) { query.timestamp.$lte = req.query.end; } CheckEvent .find(query) .sort({ timestamp: -1 }) .select({ tags: 0 }) .limit(100) .exec(function(err, events) { if (err) return next(err); CheckEvent.aggregateEventsByDay(events, function(err, aggregatedEvents) { res.json(aggregatedEvents); }); }); }); app.delete('/tags/:name', loadTag, function(req, res, next) { // Delete tag relation first in order to avoid magic respawn Check.collection.update({ tags: req.tag.name }, { $pull: { tags: req.tag.name } }, { multi: true }, function(err) { if (err) return next(err); // Then, remove the tag req.tag.remove(function(err2) { if (err2) return next(err2); res.end(); }); }) }); };