diff --git a/NEWS.md b/NEWS.md index 79e6a980..d084f574 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,9 +1,12 @@ # Changelog -## 2.45.1 +## 2.46.0 Released 2016-mm-dd +Improvements: + - Warn on application start about non-matching dependencies + Announcements: - Upgrades camshaft to [0.13.0](https://github.com/CartoDB/camshaft/releases/tag/0.13.0) - Upgrades turbo-carto to [0.11.0](https://github.com/CartoDB/turbo-carto/releases/tag/0.11.0) diff --git a/lib/cartodb/controllers/server_info.js b/lib/cartodb/controllers/server_info.js index 7f61d51f..c70de9fa 100644 --- a/lib/cartodb/controllers/server_info.js +++ b/lib/cartodb/controllers/server_info.js @@ -1,21 +1,13 @@ -var windshaft = require('windshaft'); 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"; -var versions = { - windshaft: windshaft.version, - grainstore: windshaft.grainstore.version(), - node_mapnik: windshaft.mapnik.version, - mapnik: windshaft.mapnik.versions.mapnik, - windshaft_cartodb: require('../../../package.json').version -}; - -function ServerInfoController() { +function ServerInfoController(versions) { this.healthConfig = global.environment.health || {}; this.healthCheck = new HealthCheck(global.environment.disabled_file); + this.versions = versions || {}; } module.exports = ServerInfoController; @@ -31,7 +23,7 @@ ServerInfoController.prototype.welcome = function(req, res) { }; ServerInfoController.prototype.version = function(req, res) { - res.status(200).send(versions); + res.status(200).send(this.versions); }; ServerInfoController.prototype.health = function(req, res) { diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js index aa41ed27..a7805e95 100644 --- a/lib/cartodb/server.js +++ b/lib/cartodb/server.js @@ -3,7 +3,6 @@ var bodyParser = require('body-parser'); var RedisPool = require('redis-mpool'); var cartodbRedis = require('cartodb-redis'); var _ = require('underscore'); -var debug = require('debug')('windshaft:cartodb'); var controller = require('./controllers'); @@ -183,6 +182,8 @@ module.exports = function(serverOptions) { var TablesExtentApi = require('./api/tables_extent_api'); var tablesExtentApi = new TablesExtentApi(pgQueryRunner); + var versions = getAndValidateVersions(serverOptions); + /******************************************************************************************************************* * Routing ******************************************************************************************************************/ @@ -225,7 +226,7 @@ module.exports = function(serverOptions) { new controller.NamedMapsAdmin(authApi, pgConnection, templateMaps).register(app); - new controller.ServerInfo().register(app); + new controller.ServerInfo(versions).register(app); /******************************************************************************************************************* * END Routing @@ -238,12 +239,45 @@ function validateOptions(opts) { if (!_.isString(opts.base_url) || !_.isString(opts.base_url_mapconfig) || !_.isString(opts.base_url_templated)) { throw new Error("Must initialise server with: 'base_url'/'base_url_mapconfig'/'base_url_templated' URLs"); } +} - // Be nice and warn if configured mapnik version is != instaled mapnik version - if (mapnik.versions.mapnik !== opts.grainstore.mapnik_version) { - debug('WARNING: detected mapnik version (' + mapnik.versions.mapnik + ')' + - ' != configured mapnik version (' + opts.grainstore.mapnik_version + ')'); +function getAndValidateVersions(options) { + // jshint undef:false + var warn = console.warn.bind(console); + // jshint undef:true + + var packageDefinition = require('../../package.json'); + + var declaredDependencies = packageDefinition.dependencies || {}; + var installedDependenciesVersions = { + camshaft: require('camshaft').version, + grainstore: windshaft.grainstore.version(), + mapnik: windshaft.mapnik.versions.mapnik, + node_mapnik: windshaft.mapnik.version, + 'turbo-carto': require('turbo-carto').version, + windshaft: windshaft.version, + windshaft_cartodb: packageDefinition.version + }; + + var dependenciesToValidate = ['camshaft', 'turbo-carto', 'windshaft']; + dependenciesToValidate.forEach(function(depName) { + var declaredDependencyVersion = declaredDependencies[depName]; + var installedDependencyVersion = installedDependenciesVersions[depName]; + if (declaredDependencyVersion !== installedDependencyVersion) { + warn( + 'Dependency="%s" installed version="%s" does not match declared version="%s". Check your installation.', + depName, installedDependencyVersion, declaredDependencyVersion + ); + } + }); + + // Be nice and warn if configured mapnik version is != installed mapnik version + if (mapnik.versions.mapnik !== options.grainstore.mapnik_version) { + warn('WARNING: detected mapnik version (' + mapnik.versions.mapnik + ')' + + ' != configured mapnik version (' + options.grainstore.mapnik_version + ')'); } + + return installedDependenciesVersions; } function bootstrapFonts(opts) { diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 35edb8f3..3d402e7a 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "windshaft-cartodb", - "version": "2.45.1", + "version": "2.46.0", "dependencies": { "body-parser": { "version": "1.14.2", diff --git a/package.json b/package.json index 14af5e0b..99123e52 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "windshaft-cartodb", - "version": "2.45.1", + "version": "2.46.0", "description": "A map tile server for CartoDB", "keywords": [ "cartodb"