Move server info to its own controller

This commit is contained in:
Raul Ochoa 2015-07-08 16:08:38 +02:00
parent 1737cbe1a5
commit c8568b175b
2 changed files with 58 additions and 53 deletions

View File

@ -0,0 +1,49 @@
var HealthCheck = require('../monitoring/health_check');
var WELCOME_MSG = "This is the CartoDB Maps API, " +
"see the documentation at http://docs.cartodb.com/cartodb-platform/maps-api.html";
function ServerInfoController(versions) {
this.versions = versions || {};
this.healthConfig = global.environment.health || {};
this.healthCheck = new HealthCheck();
}
module.exports = ServerInfoController;
ServerInfoController.prototype.register = function(app) {
app.get('/health', this.health.bind(this));
app.get('/', this.welcome.bind(this));
app.get('/version', this.version.bind(this));
};
ServerInfoController.prototype.welcome = function(req, res) {
res.send(WELCOME_MSG, 200);
};
ServerInfoController.prototype.version = function(req, res) {
res.send(this.versions, 200);
};
ServerInfoController.prototype.health = function(req, res) {
if (!!this.healthConfig.enabled) {
var startTime = Date.now();
this.healthCheck.check(this.healthConfig, function(err, result) {
var ok = !err;
var response = {
enabled: true,
ok: ok,
elapsed: Date.now() - startTime,
result: result
};
if (err) {
response.err = err.message;
}
res.send(response, ok ? 200 : 503);
});
} else {
res.send({enabled: false, ok: true}, 200);
}
};

View File

@ -6,8 +6,6 @@ var cartodbRedis = require('cartodb-redis');
var _ = require('underscore'); var _ = require('underscore');
var step = require('step'); var step = require('step');
var HealthCheck = require('./monitoring/health_check');
var StaticMapsController = require('./controllers/static_maps'); var StaticMapsController = require('./controllers/static_maps');
var MapController = require('./controllers/map'); var MapController = require('./controllers/map');
@ -43,16 +41,10 @@ var REQUEST_QUERY_PARAMS_WHITELIST = [
var lzmaWorker = new LZMA(); var lzmaWorker = new LZMA();
var WELCOME_MSG = "This is the CartoDB Maps API, " +
"see the documentation at http://docs.cartodb.com/cartodb-platform/maps-api.html";
var timeoutErrorTilePath = __dirname + '/../../assets/render-timeout-fallback.png'; var timeoutErrorTilePath = __dirname + '/../../assets/render-timeout-fallback.png';
var timeoutErrorTile = require('fs').readFileSync(timeoutErrorTilePath, {encoding: null}); var timeoutErrorTile = require('fs').readFileSync(timeoutErrorTilePath, {encoding: null});
module.exports = function(serverOptions) { module.exports = function(serverOptions) {
// Make stats client globally accessible // Make stats client globally accessible
global.statsClient = windshaft.stats.Client.getInstance(serverOptions.statsd); global.statsClient = windshaft.stats.Client.getInstance(serverOptions.statsd);
@ -339,40 +331,15 @@ module.exports = function(serverOptions) {
namedMapsAdminController = new NamedMapsAdminController(app, templateMaps, template_baseurl); namedMapsAdminController = new NamedMapsAdminController(app, templateMaps, template_baseurl);
namedMapsAdminController.register(app); namedMapsAdminController.register(app);
var healthCheck = new HealthCheck(); var ServerInfoController = require('./controllers/server_info'),
app.get('/health', function(req, res) { serverInfoController = new ServerInfoController({
var healthConfig = global.environment.health || {}; windshaft: windshaft.version,
grainstore: grainstore.version(),
if (!!healthConfig.enabled) { node_mapnik: mapnik.version,
var startTime = Date.now(); mapnik: mapnik.versions.mapnik,
healthCheck.check(healthConfig, function(err, result) { windshaft_cartodb: require('../../package.json').version
var ok = !err; });
var response = { serverInfoController.register(app);
enabled: true,
ok: ok,
elapsed: Date.now() - startTime,
result: result
};
if (err) {
response.err = err.message;
}
res.send(response, ok ? 200 : 503);
});
} else {
res.send({enabled: false, ok: true}, 200);
}
});
// simple testable route
app.get('/', function(req, res) {
app.sendResponse(res, [WELCOME_MSG]);
});
// version
app.get('/version', function(req, res) {
app.sendResponse(res, [app.getVersion(), 200]);
});
/******************************************************************************************************************* /*******************************************************************************************************************
* END Routing * END Routing
@ -391,17 +358,6 @@ module.exports = function(serverOptions) {
} }
}); });
app.getVersion = function() {
return {
windshaft: windshaft.version,
grainstore: grainstore.version(),
node_mapnik: mapnik.version,
mapnik: mapnik.versions.mapnik,
windshaft_cartodb: require('../../package.json').version
};
};
// GET routes for which we don't want to request any caching. // GET routes for which we don't want to request any caching.
// POST/PUT/DELETE requests are never cached anyway. // POST/PUT/DELETE requests are never cached anyway.
var noCacheGETRoutes = [ var noCacheGETRoutes = [