2012-05-02 02:00:14 +08:00
|
|
|
var config = {
|
|
|
|
environment: 'test'
|
2012-05-02 02:02:50 +08:00
|
|
|
,port: 8888
|
2012-05-02 02:00:14 +08:00
|
|
|
,host: '127.0.0.1'
|
2015-07-07 18:27:09 +08:00
|
|
|
// Size of the threadpool which can be used to run user code and get notified in the loop thread
|
|
|
|
// Its default size is 4, but it can be changed at startup time (the absolute maximum is 128).
|
|
|
|
// See http://docs.libuv.org/en/latest/threadpool.html
|
2014-10-08 22:50:35 +08:00
|
|
|
,uv_threadpool_size: undefined
|
2013-12-17 01:24:35 +08:00
|
|
|
// Regular expression pattern to extract username
|
|
|
|
// from hostname. Must have a single grabbing block.
|
|
|
|
,user_from_host: '(.*)'
|
2014-02-05 22:14:47 +08:00
|
|
|
|
|
|
|
// Base URLs for the APIs
|
|
|
|
//
|
|
|
|
// See https://github.com/CartoDB/Windshaft-cartodb/wiki/Unified-Map-API
|
|
|
|
//
|
|
|
|
// Base url for the Templated Maps API
|
2014-02-17 23:29:23 +08:00
|
|
|
// "/api/v1/map/named" is the new API,
|
2014-02-05 22:14:47 +08:00
|
|
|
// "/tiles/template" is for compatibility with versions up to 1.6.x
|
2015-04-08 22:05:33 +08:00
|
|
|
,base_url_templated: '(?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)'
|
2014-02-05 22:14:47 +08:00
|
|
|
// Base url for the Detached Maps API
|
|
|
|
// "maps" is the the new API,
|
|
|
|
// "tiles/layergroup" is for compatibility with versions up to 1.6.x
|
2015-04-08 22:05:33 +08:00
|
|
|
,base_url_detached: '(?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)'
|
2014-02-05 22:14:47 +08:00
|
|
|
|
2013-01-30 00:36:50 +08:00
|
|
|
// Maximum number of connections for one process
|
|
|
|
// 128 is a good value with a limit of 1024 open file descriptors
|
|
|
|
,maxConnections:128
|
2014-02-13 21:55:31 +08:00
|
|
|
// Maximum number of templates per user. Unlimited by default.
|
|
|
|
,maxUserTemplates:1024
|
2014-02-13 22:44:54 +08:00
|
|
|
// Seconds since "last creation" before a detached
|
|
|
|
// or template instance map expires. Or: how long do you want
|
|
|
|
// to be able to navigate the map without a reload ?
|
|
|
|
// Defaults to 7200 (2 hours)
|
2014-02-14 23:08:32 +08:00
|
|
|
,mapConfigTTL: 7200
|
2014-03-25 00:03:32 +08:00
|
|
|
// idle socket timeout, in milliseconds
|
2012-12-05 20:59:20 +08:00
|
|
|
,socket_timeout: 600000
|
2012-05-02 02:00:14 +08:00
|
|
|
,enable_cors: true
|
2012-06-06 22:24:44 +08:00
|
|
|
,cache_enabled: false
|
2013-07-18 15:53:59 +08:00
|
|
|
,log_format: '[:date] :req[X-Real-IP] :method :req[Host]:url :status :response-time ms -> :res[Content-Type] (:res[X-Tiler-Profiler])'
|
2014-03-29 01:05:18 +08:00
|
|
|
// If log_filename is given logs will be written
|
|
|
|
// there, in append mode. Otherwise stdout is used (default).
|
|
|
|
// Log file will be re-opened on receiving the HUP signal
|
|
|
|
//,log_filename: 'logs/node-windshaft.log'
|
2013-11-21 22:55:20 +08:00
|
|
|
// Templated database username for authorized user
|
|
|
|
// Supported labels: 'user_id' (read from redis)
|
2014-02-21 01:03:43 +08:00
|
|
|
,postgres_auth_user: 'test_windshaft_cartodb_user_<%= user_id %>'
|
2013-11-21 22:55:20 +08:00
|
|
|
// Templated database password for authorized user
|
2013-11-13 06:18:40 +08:00
|
|
|
// Supported labels: 'user_id', 'user_password' (both read from redis)
|
2014-02-21 01:03:43 +08:00
|
|
|
,postgres_auth_pass: 'test_windshaft_cartodb_user_<%= user_id %>_pass'
|
2012-05-02 02:00:14 +08:00
|
|
|
,postgres: {
|
2012-12-08 01:58:31 +08:00
|
|
|
// Parameters to pass to datasource plugin of mapnik
|
|
|
|
// See http://github.com/mapnik/mapnik/wiki/PostGIS
|
2014-10-08 16:31:32 +08:00
|
|
|
user: "test_windshaft_publicuser",
|
2013-11-11 07:50:03 +08:00
|
|
|
password: "public",
|
2012-05-02 02:00:14 +08:00
|
|
|
host: '127.0.0.1',
|
|
|
|
port: 5432,
|
2012-11-29 17:20:37 +08:00
|
|
|
extent: "-20037508.3,-20037508.3,20037508.3,20037508.3",
|
2012-12-08 03:34:24 +08:00
|
|
|
row_limit: 65535,
|
2012-12-08 02:50:57 +08:00
|
|
|
simplify_geometries: true,
|
2014-11-05 19:48:26 +08:00
|
|
|
use_overviews: true, // use overviews to retrieve raster
|
2014-03-25 00:40:43 +08:00
|
|
|
/*
|
|
|
|
* Set persist_connection to false if you want
|
|
|
|
* database connections to be closed on renderer
|
|
|
|
* expiration (1 minute after last use).
|
|
|
|
* Setting to true (the default) would never
|
|
|
|
* close any connection for the server's lifetime
|
|
|
|
*/
|
|
|
|
persist_connection: false,
|
2012-11-28 01:30:08 +08:00
|
|
|
max_size: 500
|
2012-05-02 02:00:14 +08:00
|
|
|
}
|
2014-02-18 16:55:00 +08:00
|
|
|
,mapnik_version: ''
|
2014-08-07 07:57:21 +08:00
|
|
|
,mapnik_tile_format: 'png8:m=h'
|
2014-02-12 23:01:50 +08:00
|
|
|
,statsd: {
|
|
|
|
host: 'localhost',
|
2014-02-18 17:38:15 +08:00
|
|
|
port: 8125,
|
2014-03-04 23:52:16 +08:00
|
|
|
prefix: 'test.:host.',
|
2014-03-05 00:37:19 +08:00
|
|
|
cacheDns: true
|
2014-02-12 23:01:50 +08:00
|
|
|
// support all allowed node-statsd options
|
|
|
|
}
|
2013-02-25 23:53:57 +08:00
|
|
|
,renderer: {
|
|
|
|
// Milliseconds since last access before renderer cache item expires
|
|
|
|
cache_ttl: 60000,
|
2014-12-02 01:43:40 +08:00
|
|
|
statsInterval: 5000, // milliseconds between each report to statsd about number of renderers and mapnik pool status
|
2015-04-01 21:04:56 +08:00
|
|
|
mapnik: {
|
2015-07-07 18:27:09 +08:00
|
|
|
// The size of the pool of internal mapnik backend
|
|
|
|
// This pool size is per mapnik renderer created in Windshaft's RendererFactory
|
|
|
|
// See https://github.com/CartoDB/Windshaft/blob/master/lib/windshaft/renderers/renderer_factory.js
|
|
|
|
// Important: check the configuration of uv_threadpool_size to use suitable value
|
2015-04-01 21:04:56 +08:00
|
|
|
poolSize: 8,
|
|
|
|
|
|
|
|
// Metatile is the number of tiles-per-side that are going
|
|
|
|
// to be rendered at once. If all of them will be requested
|
|
|
|
// we'd have saved time. If only one will be used, we'd have
|
|
|
|
// wasted time.
|
|
|
|
metatile: 2,
|
|
|
|
|
2015-08-18 21:18:58 +08:00
|
|
|
// tilelive-mapnik uses an internal cache to store tiles/grids
|
|
|
|
// generated when using metatile. This options allow to tune
|
|
|
|
// the behaviour for that internal cache.
|
|
|
|
metatileCache: {
|
|
|
|
// Time an object must stay in the cache until is removed
|
|
|
|
ttl: 0,
|
|
|
|
// Whether an object must be removed after the first hit
|
|
|
|
// Usually you want to use `true` here when ttl>0.
|
|
|
|
deleteOnHit: false
|
|
|
|
},
|
|
|
|
|
2015-07-02 19:28:37 +08:00
|
|
|
// Override metatile behaviour depending on the format
|
|
|
|
formatMetatile: {
|
|
|
|
png: 2,
|
|
|
|
'grid.json': 1
|
|
|
|
},
|
|
|
|
|
2015-04-01 21:04:56 +08:00
|
|
|
// Buffer size is the tickness in pixel of a buffer
|
|
|
|
// around the rendered (meta?)tile.
|
|
|
|
//
|
|
|
|
// This is important for labels and other marker that overlap tile boundaries.
|
|
|
|
// Setting to 128 ensures no render artifacts.
|
|
|
|
// 64 may have artifacts but is faster.
|
|
|
|
// Less important if we can turn metatiling on.
|
|
|
|
bufferSize: 64,
|
|
|
|
|
|
|
|
// SQL queries will be wrapped with ST_SnapToGrid
|
|
|
|
// Snapping all points of the geometry to a regular grid
|
|
|
|
snapToGrid: false,
|
|
|
|
|
2015-04-07 00:00:46 +08:00
|
|
|
// SQL queries will be wrapped with ST_ClipByBox2D
|
2015-04-01 21:04:56 +08:00
|
|
|
// Returning the portion of a geometry falling within a rectangle
|
|
|
|
// It will only work if snapToGrid is enabled
|
|
|
|
clipByBox2d: false, // this requires postgis >=2.2 and geos >=3.5
|
|
|
|
|
|
|
|
limits: {
|
|
|
|
// Time in milliseconds a render request can take before it fails, some notes:
|
|
|
|
// - 0 means no render limit
|
2015-04-07 16:41:19 +08:00
|
|
|
// - it considers metatiling, naive implementation: (render timeout) * (number of tiles in metatile)
|
2015-04-01 21:04:56 +08:00
|
|
|
render: 0,
|
|
|
|
// As the render request will finish even if timed out, whether it should be placed in the internal
|
|
|
|
// cache or it should be fully discarded. When placed in the internal cache another attempt to retrieve
|
|
|
|
// the same tile will result in an immediate response, however that will use a lot of more application
|
|
|
|
// memory. If we want to enforce this behaviour we have to implement a cache eviction policy for the
|
|
|
|
// internal cache.
|
|
|
|
cacheOnTimeout: true
|
|
|
|
}
|
|
|
|
},
|
2014-12-02 01:43:40 +08:00
|
|
|
http: {
|
|
|
|
timeout: 2000, // the timeout in ms for a http tile request
|
|
|
|
proxy: undefined, // the url for a proxy server
|
|
|
|
whitelist: [ // the whitelist of urlTemplates that can be used
|
2015-04-29 18:13:54 +08:00
|
|
|
'.*', // will enable any URL
|
2015-02-05 01:57:12 +08:00
|
|
|
'http://{s}.example.com/{z}/{x}/{y}.png',
|
|
|
|
// for testing purposes
|
|
|
|
'http://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}.png'
|
2015-02-09 22:08:36 +08:00
|
|
|
],
|
|
|
|
// image to use as placeholder when urlTemplate is not in the whitelist
|
|
|
|
// if provided the http renderer will use it instead of throw an error
|
|
|
|
fallbackImage: {
|
|
|
|
type: 'fs', // 'fs' and 'url' supported
|
|
|
|
src: __dirname + '/../../assets/default-placeholder.png'
|
|
|
|
}
|
2014-12-02 01:43:40 +08:00
|
|
|
}
|
2013-02-25 23:53:57 +08:00
|
|
|
}
|
2012-09-20 00:52:13 +08:00
|
|
|
,millstone: {
|
2013-08-21 16:04:43 +08:00
|
|
|
// Needs to be writable by server user
|
2012-09-20 00:52:13 +08:00
|
|
|
cache_basedir: '/tmp/cdb-tiler-test/millstone'
|
|
|
|
}
|
2012-05-02 02:00:14 +08:00
|
|
|
,redis: {
|
|
|
|
host: '127.0.0.1',
|
2013-11-27 19:16:43 +08:00
|
|
|
port: 6335,
|
2013-02-21 19:56:04 +08:00
|
|
|
// Max number of connections in each pool.
|
|
|
|
// Users will be put on a queue when the limit is hit.
|
|
|
|
// Set to maxConnection to have no possible queues.
|
2014-04-16 23:53:42 +08:00
|
|
|
// There are currently 2 pools involved in serving
|
2013-02-21 19:56:04 +08:00
|
|
|
// windshaft-cartodb requests so multiply this number
|
2014-04-16 23:53:42 +08:00
|
|
|
// by 2 to know how many possible connections will be
|
2013-02-21 19:56:04 +08:00
|
|
|
// kept open by the server. The default is 50.
|
|
|
|
max: 50,
|
2014-10-17 20:18:14 +08:00
|
|
|
returnToHead: true, // defines the behaviour of the pool: false => queue, true => stack
|
2013-02-21 19:56:04 +08:00
|
|
|
idleTimeoutMillis: 1, // idle time before dropping connection
|
2014-08-13 21:15:30 +08:00
|
|
|
reapIntervalMillis: 1, // time between cleanups
|
2014-10-15 04:14:34 +08:00
|
|
|
slowQueries: {
|
|
|
|
log: true,
|
|
|
|
elapsedThreshold: 200
|
|
|
|
},
|
2014-08-13 21:15:30 +08:00
|
|
|
slowPool: {
|
|
|
|
log: true, // whether a slow acquire must be logged or not
|
|
|
|
elapsedThreshold: 25 // the threshold to determine an slow acquire must be reported or not
|
2014-10-15 04:12:35 +08:00
|
|
|
},
|
|
|
|
emitter: {
|
2014-10-15 22:25:35 +08:00
|
|
|
statusInterval: 5000 // time, in ms, between each status report is emitted from the pool, status is sent to statsd
|
2015-07-06 17:52:34 +08:00
|
|
|
},
|
|
|
|
unwatchOnRelease: false, // Send unwatch on release, see http://github.com/CartoDB/Windshaft-cartodb/issues/161
|
|
|
|
noReadyCheck: true // Check `no_ready_check` at https://github.com/mranney/node_redis/tree/v0.12.1#overloading
|
2012-05-02 02:00:14 +08:00
|
|
|
}
|
2015-08-27 22:28:16 +08:00
|
|
|
// For more details about this options check https://nodejs.org/api/http.html#http_new_agent_options
|
|
|
|
,httpAgent: {
|
|
|
|
keepAlive: true,
|
|
|
|
keepAliveMsecs: 1000,
|
|
|
|
maxSockets: 25,
|
|
|
|
maxFreeSockets: 256
|
|
|
|
}
|
2012-05-02 02:00:14 +08:00
|
|
|
,varnish: {
|
|
|
|
host: '',
|
2015-01-26 23:27:59 +08:00
|
|
|
port: null, // the por for the telnet interface where varnish is listening to
|
|
|
|
http_port: 6081, // the port for the HTTP interface where varnish is listening to
|
|
|
|
purge_enabled: false, // whether the purge/invalidation mechanism is enabled in varnish or not
|
2014-02-12 22:34:19 +08:00
|
|
|
secret: 'xxx',
|
2014-10-24 22:05:41 +08:00
|
|
|
ttl: 86400,
|
|
|
|
layergroupTtl: 86400 // the max-age for cache-control header in layergroup responses
|
2012-05-02 02:00:14 +08:00
|
|
|
}
|
2015-04-27 22:28:28 +08:00
|
|
|
// this [OPTIONAL] configuration enables invalidating by surrogate key in fastly
|
2015-04-27 22:17:13 +08:00
|
|
|
,fastly: {
|
|
|
|
// whether the invalidation is enabled or not
|
|
|
|
enabled: false,
|
|
|
|
// the fastly api key
|
|
|
|
apiKey: 'wadus_api_key',
|
|
|
|
// the service that will get surrogate key invalidation
|
|
|
|
serviceId: 'wadus_service_id'
|
|
|
|
}
|
2013-07-16 21:59:34 +08:00
|
|
|
// If useProfiler is true every response will be served with an
|
|
|
|
// X-Tiler-Profile header containing elapsed timing for various
|
|
|
|
// steps taken for producing the response.
|
2014-02-22 00:06:29 +08:00
|
|
|
,useProfiler:true
|
2015-01-12 23:00:39 +08:00
|
|
|
// Settings for the health check available at /health
|
|
|
|
,health: {
|
|
|
|
enabled: false,
|
|
|
|
username: 'localhost',
|
|
|
|
z: 0,
|
|
|
|
x: 0,
|
|
|
|
y: 0
|
|
|
|
}
|
2015-03-26 01:19:40 +08:00
|
|
|
,disabled_file: 'pids/disabled'
|
2015-03-09 21:42:47 +08:00
|
|
|
|
|
|
|
// Use this as a feature flags enabling/disabling mechanism
|
|
|
|
,enabledFeatures: {
|
2015-04-07 00:43:40 +08:00
|
|
|
// whether it should intercept tile render errors an act based on them, enabled by default.
|
|
|
|
onTileErrorStrategy: true,
|
2015-03-09 21:42:47 +08:00
|
|
|
// whether the affected tables for a given SQL must query directly postgresql or use the SQL API
|
|
|
|
cdbQueryTablesFromPostgres: true
|
|
|
|
}
|
2012-05-02 02:00:14 +08:00
|
|
|
};
|
|
|
|
|
2012-06-06 01:17:49 +08:00
|
|
|
module.exports = config;
|