restart service does not rebuild automatically, we should add a route for that. we need to figure where to scale services etc if we randomly create containers like that.
39 lines
1.5 KiB
JavaScript
39 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
exports = module.exports = {
|
|
getGraphs
|
|
};
|
|
|
|
var middleware = require('../middleware/index.js'),
|
|
HttpError = require('connect-lastmile').HttpError,
|
|
url = require('url');
|
|
|
|
// for testing locally: curl 'http://127.0.0.1:8417/graphite-web/render?format=json&from=-1min&target=absolute(collectd.localhost.du-docker.capacity-usage)'
|
|
// the datapoint is (value, timestamp) https://buildmedia.readthedocs.org/media/pdf/graphite/0.9.16/graphite.pdf
|
|
const graphiteProxy = middleware.proxy(url.parse('http://127.0.0.1:8417'));
|
|
|
|
function getGraphs(req, res, next) {
|
|
var parsedUrl = url.parse(req.url, true /* parseQueryString */);
|
|
delete parsedUrl.query['access_token'];
|
|
delete req.headers['authorization'];
|
|
delete req.headers['cookies'];
|
|
|
|
// 'graphite-web' is the URL_PREFIX in docker-graphite
|
|
req.url = url.format({ pathname: 'graphite-web/render', query: parsedUrl.query });
|
|
|
|
// graphs may take very long to respond so we run into headers already sent issues quite often
|
|
// nginx still has a request timeout which can deal with this then.
|
|
req.clearTimeout();
|
|
|
|
graphiteProxy(req, res, function (error) {
|
|
if (!error) return next();
|
|
|
|
if (error.code === 'ECONNREFUSED') return next(new HttpError(424, 'Unable to connect to graphite'));
|
|
// ECONNRESET here is most likely because of a bug in the query or the uwsgi buffer size is too small
|
|
if (error.code === 'ECONNRESET') return next(new HttpError(424, 'Unable to query graphite'));
|
|
|
|
next(new HttpError(500, error));
|
|
});
|
|
}
|
|
|