diff --git a/docs/Routes.md b/docs/Routes.md
index c29f9f1e..0ebe732b 100644
--- a/docs/Routes.md
+++ b/docs/Routes.md
@@ -11,9 +11,6 @@ This document list all routes available in Windshaft-cartodb Maps API server.
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/:z/:x/:y.(:format) {:user(f),:token(f),:layer(f),:z(f),:x(f),:y(f),:format(f)} (1)`
Notes: Per :layer rendering based on :format [0]
-1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
-
Notes: Map instantiation [0]
-
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/attributes/:fid {:user(f),:token(f),:layer(f),:fid(f)} (1)`
Notes: Endpoint for info windows data, alternative for sql api when tables are private [0]
@@ -23,47 +20,60 @@ This document list all routes available in Windshaft-cartodb Maps API server.
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format {:user(f),:token(f),:west(f),:south(f),:east(f),:north(f),:width(f),:height(f),:format(f)} (1)`
Notes: Static Maps API [0]
+1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/widget/:widgetName {:user(f),:token(f),:layer(f),:widgetName(f)} (1)`
+
Notes: By :widgetName per :layer widget [0]
+
+1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/widget/:widgetName/search {:user(f),:token(f),:layer(f),:widgetName(f)} (1)`
+
Notes: By :widgetName per :layer widget search [0]
+
+1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
+
Notes: Map instantiation [0]
+
+1. `POST (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
+
Notes: Map instantiation [0]
+
+1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id/jsonp {:user(f),:template_id(f)} (1)`
+
Notes: Named maps JSONP instantiation [1]
+
+1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
+
Notes: Instantiate named map [1]
+
+1. `OPTIONS (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
+
Notes: CORS [0]
+
+1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id/:layer/:z/:x/:y.(:format) {:user(f),:template_id(f),:layer(f),:z(f),:x(f),:y(f),:0(f),:format(f)} (1)`
+
Notes: Per :layer fixed URL named map tiles [1]
+
+1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/named/:template_id/:width/:height.:format {:user(f),:template_id(f),:width(f),:height(f),:format(f)} (1)`
+
Notes: Static map for named maps [1]
+
+1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)`
+
Notes: Create named map (w/ API KEY) [1]
+
+1. `PUT (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
+
Notes: Update a named map (w/ API KEY) [1]
+
+1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
+
Notes: Named map retrieval (w/ API KEY) [1]
+
+1. `DELETE (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
+
Notes: Delete named map (w/ API KEY) [1]
+
+1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)`
+
Notes: List named maps (w/ API KEY) [1]
+
+1. `OPTIONS (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
+
Notes: CORS [1]
+
+1. `GET /health {} (1)`
+
Notes: Health check
+
1. `GET / {} (1)`
Notes: Welcome message
1. `GET /version {} (1)`
Notes: Return relevant module versions: mapnik, grainstore, etc
-1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id/jsonp {:user(f),:template_id(f)} (1)`
-
Notes: Named maps JSONP instantiation [1]
-
-1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
-
Notes: Named map retrieval (w/ API KEY) [1]
-
-1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)`
-
Notes: List named maps (w/ API KEY) [1]
-
-1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/named/:template_id/:width/:height.:format {:user(f),:template_id(f),:width(f),:height(f),:format(f)} (1)`
-
Notes: Static map for named maps
-
-1. `GET /health {} (1)`
-
Notes: Healt check
-
-1. `OPTIONS (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
-
Notes: CORS [0]
-
-1. `OPTIONS (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
-
Notes: CORS [1]
-
-1. `POST (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
-
Notes: Map instantiation [0]
-
-1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)`
-
Notes: Create named map (w/ API KEY) [1]
-
-1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
-
Notes: Instantiate named map [1]
-
-1. `PUT (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
-
Notes: Update a named map (w/ API KEY) [1]
-
-1. `DELETE (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
-
Notes: Delete named map (w/ API KEY) [1]
## Optional deprecated routes
@@ -75,29 +85,29 @@ This document list all routes available in Windshaft-cartodb Maps API server.
Something like the following patch should do the trick
```javascript
-diff --git a/lib/cartodb/cartodb_windshaft.js b/lib/cartodb/cartodb_windshaft.js
-index b9429a2..e6cc5f9 100644
---- a/lib/cartodb/cartodb_windshaft.js
-+++ b/lib/cartodb/cartodb_windshaft.js
-@@ -212,6 +212,20 @@ var CartodbWindshaft = function(serverOptions) {
- }
- });
+diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js
+index 5f62850..bca377d 100644
+--- a/lib/cartodb/server.js
++++ b/lib/cartodb/server.js
+@@ -215,6 +215,20 @@ module.exports = function(serverOptions) {
+ * END Routing
+ ******************************************************************************************************************/
+ var format = require('util').format;
-+ var routesNotes = Object.keys(ws.routes.routes)
-+ .map(function(method) { return ws.routes.routes[method]; })
-+ .reduce(function(previous, current) { current.map(function(r) { previous.push(r) }); return previous;}, [])
-+ .map(function(route) {
-+ return format("\n1. `%s %s {%s} (%d)`\n
Notes: [DEPRECATED]? ",
-+ route.method.toUpperCase(),
-+ route.path,
-+ route.keys.map(function(k) { return format(':%s(%s)', k.name, k.optional ? 't' : 'f'); } ).join(','),
-+ route.callbacks.length
++ var routesNotes = app._router.stack
++ .filter(function(handler) { return !!handler.route; })
++ .map(function(handler) {
++ return format("\n1. `%s %s {%s} (1)`\n
Notes: [DEPRECATED]? ",
++ Object.keys(handler.route.methods)[0].toUpperCase(),
++ handler.route.path,
++ handler.keys.map(function(k) {
++ return format(':%s(%s)', k.name, k.optional ? 't' : 'f');
++ }).join(',')
+ );
+ });
+ console.log(routesNotes.join('\n'));
+
- return ws;
+ return app;
};
diff --git a/lib/cartodb/server_options.js b/lib/cartodb/server_options.js
index f1a70889..00011356 100644
--- a/lib/cartodb/server_options.js
+++ b/lib/cartodb/server_options.js
@@ -3,7 +3,7 @@ var _ = require('underscore');
var OverviewsQueryRewriter = require('./utils/overviews_query_rewriter');
var overviewsQueryRewriter = new OverviewsQueryRewriter({
- zoom_level: 'CDB_ZoomFromScale(!scale_denominator!)'
+ zoom_level: 'CDB_ZoomFromScale(!scale_denominator!)'
});
var rendererConfig = _.defaults(global.environment.renderer || {}, {
@@ -24,8 +24,8 @@ rendererConfig.mapnik.queryRewriter = overviewsQueryRewriter;
// Perform keyword substitution in statsd
// See https://github.com/CartoDB/Windshaft-cartodb/issues/153
-if ( global.environment.statsd ) {
- if ( global.environment.statsd.prefix ) {
+if (global.environment.statsd) {
+ if (global.environment.statsd.prefix) {
var host_token = os.hostname().split('.').reverse().join('.');
global.environment.statsd.prefix = global.environment.statsd.prefix.replace(/:host/, host_token);
}
@@ -36,61 +36,61 @@ module.exports = {
port: global.environment.port,
host: global.environment.host
},
- // This is for inline maps and table maps
- base_url: global.environment.base_url_legacy || '/tiles/:table',
+ // This is for inline maps and table maps
+ base_url: global.environment.base_url_legacy || '/tiles/:table',
- /// @deprecated with Windshaft-0.17.0
- ///base_url_notable: '/tiles',
+ /// @deprecated with Windshaft-0.17.0
+ ///base_url_notable: '/tiles',
- // This is for Detached maps
- //
- // "maps" is the official, while
- // "tiles/layergroup" is for backward compatibility up to 1.6.x
- //
- base_url_mapconfig: global.environment.base_url_detached || '(?:/maps|/tiles/layergroup)',
+ // This is for Detached maps
+ //
+ // "maps" is the official, while
+ // "tiles/layergroup" is for backward compatibility up to 1.6.x
+ //
+ base_url_mapconfig: global.environment.base_url_detached || '(?:/maps|/tiles/layergroup)',
- base_url_templated: global.environment.base_url_templated || '(?:/maps/named|/tiles/template)',
+ base_url_templated: global.environment.base_url_templated || '(?:/maps/named|/tiles/template)',
- grainstore: {
- map: {
+ grainstore: {
+ map: {
// TODO: allow to specify in configuration
srid: 3857
- },
- datasource: global.environment.postgres,
- cachedir: global.environment.millstone.cache_basedir,
- mapnik_version: global.environment.mapnik_version,
- mapnik_tile_format: global.environment.mapnik_tile_format || 'png',
- default_layergroup_ttl: global.environment.mapConfigTTL || 7200
},
- statsd: global.environment.statsd,
- renderCache: {
- ttl: rendererConfig.cache_ttl,
- statsInterval: rendererConfig.statsInterval
- },
- renderer: {
- mapnik: _.defaults(rendererConfig.mapnik, {
- geojson: {
- dbPoolParams: {
- size: 16,
- idleTimeout: 3000,
- reapInterval: 1000
- },
- clipByBox2d: false,
- }
- }),
- torque: rendererConfig.torque,
- http: rendererConfig.http
- },
- // Do not send unwatch on release. See http://github.com/CartoDB/Windshaft-cartodb/issues/161
- redis: _.extend(global.environment.redis, {unwatchOnRelease: false}),
- enable_cors: global.environment.enable_cors,
- varnish_host: global.environment.varnish.host,
- varnish_port: global.environment.varnish.port,
- varnish_http_port: global.environment.varnish.http_port,
- varnish_secret: global.environment.varnish.secret,
- varnish_purge_enabled: global.environment.varnish.purge_enabled,
- fastly: global.environment.fastly || {},
- cache_enabled: global.environment.cache_enabled,
- log_format: global.environment.log_format,
- useProfiler: global.environment.useProfiler
+ datasource: global.environment.postgres,
+ cachedir: global.environment.millstone.cache_basedir,
+ mapnik_version: global.environment.mapnik_version,
+ mapnik_tile_format: global.environment.mapnik_tile_format || 'png',
+ default_layergroup_ttl: global.environment.mapConfigTTL || 7200
+ },
+ statsd: global.environment.statsd,
+ renderCache: {
+ ttl: rendererConfig.cache_ttl,
+ statsInterval: rendererConfig.statsInterval
+ },
+ renderer: {
+ mapnik: _.defaults(rendererConfig.mapnik, {
+ geojson: {
+ dbPoolParams: {
+ size: 16,
+ idleTimeout: 3000,
+ reapInterval: 1000
+ },
+ clipByBox2d: false
+ }
+ }),
+ torque: rendererConfig.torque,
+ http: rendererConfig.http
+ },
+ // Do not send unwatch on release. See http://github.com/CartoDB/Windshaft-cartodb/issues/161
+ redis: _.extend(global.environment.redis, {unwatchOnRelease: false}),
+ enable_cors: global.environment.enable_cors,
+ varnish_host: global.environment.varnish.host,
+ varnish_port: global.environment.varnish.port,
+ varnish_http_port: global.environment.varnish.http_port,
+ varnish_secret: global.environment.varnish.secret,
+ varnish_purge_enabled: global.environment.varnish.purge_enabled,
+ fastly: global.environment.fastly || {},
+ cache_enabled: global.environment.cache_enabled,
+ log_format: global.environment.log_format,
+ useProfiler: global.environment.useProfiler
};