Replace log4js by pino as logger:
- Logs to stdout, disabled while testing - Change log calls signature when needed - Use development version of camshaft - Removes unused log cofiguration - Bind request id to log req/res - Log req at the begining of the cycle and res at the end
This commit is contained in:
parent
656bc9344b
commit
163c546236
165
app.js
165
app.js
@ -1,28 +1,27 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var http = require('http');
|
const http = require('http');
|
||||||
var https = require('https');
|
const https = require('https');
|
||||||
var path = require('path');
|
const path = require('path');
|
||||||
var fs = require('fs');
|
const fs = require('fs');
|
||||||
var _ = require('underscore');
|
const semver = require('semver');
|
||||||
var semver = require('semver');
|
const pino = require('pino');
|
||||||
|
|
||||||
// TODO: research it it's still needed
|
// TODO: research it it's still needed
|
||||||
const setICUEnvVariable = require('./lib/utils/icu-data-env-setter');
|
const setICUEnvVariable = require('./lib/utils/icu-data-env-setter');
|
||||||
|
|
||||||
var log = console.log.bind(console);
|
global.logger = pino({ base: null, level: process.env.NODE_ENV === 'test' ? 'fatal' : 'info' }, pino.destination({ sync: false }));
|
||||||
var logError = console.error.bind(console);
|
|
||||||
|
|
||||||
var nodejsVersion = process.versions.node;
|
|
||||||
const { engines } = require('./package.json');
|
const { engines } = require('./package.json');
|
||||||
if (!semver.satisfies(nodejsVersion, engines.node)) {
|
if (!semver.satisfies(process.versions.node, engines.node)) {
|
||||||
logError(`Node version ${nodejsVersion} is not supported, please use Node.js ${engines.node}.`);
|
global.logger.fatal(new Error(`Node version ${process.versions.node} is not supported, please use Node.js ${engines.node}.`));
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This function should be called before the require('yargs').
|
// This function should be called before the require('yargs').
|
||||||
setICUEnvVariable();
|
setICUEnvVariable();
|
||||||
|
|
||||||
var argv = require('yargs')
|
const argv = require('yargs')
|
||||||
.usage('Usage: node $0 <environment> [options]')
|
.usage('Usage: node $0 <environment> [options]')
|
||||||
.help('h')
|
.help('h')
|
||||||
.example(
|
.example(
|
||||||
@ -35,27 +34,26 @@ var argv = require('yargs')
|
|||||||
.describe('c', 'Load configuration from path')
|
.describe('c', 'Load configuration from path')
|
||||||
.argv;
|
.argv;
|
||||||
|
|
||||||
var environmentArg = argv._[0] || process.env.NODE_ENV || 'development';
|
const environmentArg = argv._[0] || process.env.NODE_ENV || 'development';
|
||||||
var configurationFile = path.resolve(argv.config || './config/environments/' + environmentArg + '.js');
|
const configurationFile = path.resolve(argv.config || `./config/environments/${environmentArg}.js`);
|
||||||
|
|
||||||
if (!fs.existsSync(configurationFile)) {
|
if (!fs.existsSync(configurationFile)) {
|
||||||
logError('Configuration file "%s" does not exist', configurationFile);
|
global.logger.fatal(new Error(`Configuration file ${configurationFile} does not exist`));
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
global.environment = require(configurationFile);
|
global.environment = require(configurationFile);
|
||||||
var ENVIRONMENT = argv._[0] || process.env.NODE_ENV || global.environment.environment;
|
const ENVIRONMENT = argv._[0] || process.env.NODE_ENV || global.environment.environment;
|
||||||
process.env.NODE_ENV = ENVIRONMENT;
|
process.env.NODE_ENV = ENVIRONMENT;
|
||||||
|
|
||||||
var availableEnvironments = {
|
const availableEnvironments = {
|
||||||
production: true,
|
production: true,
|
||||||
staging: true,
|
staging: true,
|
||||||
development: true
|
development: true
|
||||||
};
|
};
|
||||||
|
|
||||||
// sanity check
|
|
||||||
if (!availableEnvironments[ENVIRONMENT]) {
|
if (!availableEnvironments[ENVIRONMENT]) {
|
||||||
logError('node app.js [environment]');
|
global.logger.fatal(new Error(`Invalid environment argument, valid ones: ${Object.keys(availableEnvironments).join(', ')}`));
|
||||||
logError('environments: %s', Object.keys(availableEnvironments).join(', '));
|
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,65 +64,37 @@ if (global.environment.uv_threadpool_size) {
|
|||||||
|
|
||||||
// set global HTTP and HTTPS agent default configurations
|
// set global HTTP and HTTPS agent default configurations
|
||||||
// ref https://nodejs.org/api/http.html#http_new_agent_options
|
// ref https://nodejs.org/api/http.html#http_new_agent_options
|
||||||
var agentOptions = _.defaults(global.environment.httpAgent || {}, {
|
const agentOptions = Object.assign({
|
||||||
keepAlive: false,
|
keepAlive: false,
|
||||||
keepAliveMsecs: 1000,
|
keepAliveMsecs: 1000,
|
||||||
maxSockets: Infinity,
|
maxSockets: Infinity,
|
||||||
maxFreeSockets: 256
|
maxFreeSockets: 256
|
||||||
});
|
}, global.environment.httpAgent || {});
|
||||||
|
|
||||||
http.globalAgent = new http.Agent(agentOptions);
|
http.globalAgent = new http.Agent(agentOptions);
|
||||||
https.globalAgent = new https.Agent(agentOptions);
|
https.globalAgent = new https.Agent(agentOptions);
|
||||||
|
|
||||||
global.log4js = require('log4js');
|
|
||||||
var log4jsConfig = {
|
|
||||||
appenders: [],
|
|
||||||
replaceConsole: true
|
|
||||||
};
|
|
||||||
|
|
||||||
if (global.environment.log_filename) {
|
|
||||||
var logFilename = path.resolve(global.environment.log_filename);
|
|
||||||
var logDirectory = path.dirname(logFilename);
|
|
||||||
if (!fs.existsSync(logDirectory)) {
|
|
||||||
logError('Log filename directory does not exist: ' + logDirectory);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
log('Logs will be written to ' + logFilename);
|
|
||||||
log4jsConfig.appenders.push(
|
|
||||||
{ type: 'file', absolute: true, filename: logFilename }
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
log4jsConfig.appenders.push(
|
|
||||||
{ type: 'console', layout: { type: 'basic' } }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
global.log4js.configure(log4jsConfig);
|
|
||||||
global.logger = global.log4js.getLogger();
|
|
||||||
|
|
||||||
// Include cartodb_windshaft only _after_ the "global" variable is set
|
// Include cartodb_windshaft only _after_ the "global" variable is set
|
||||||
// See https://github.com/Vizzuality/Windshaft-cartodb/issues/28
|
// See https://github.com/Vizzuality/Windshaft-cartodb/issues/28
|
||||||
var cartodbWindshaft = require('./lib/server');
|
const cartodbWindshaft = require('./lib/server');
|
||||||
var serverOptions = require('./lib/server-options');
|
const serverOptions = require('./lib/server-options');
|
||||||
|
|
||||||
var server = cartodbWindshaft(serverOptions);
|
const server = cartodbWindshaft(serverOptions);
|
||||||
|
|
||||||
// Maximum number of connections for one process
|
// Specify the maximum length of the queue of pending connections for the HTTP server.
|
||||||
// 128 is a good number if you have up to 1024 filedescriptors
|
// The actual length will be determined by the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn on Linux.
|
||||||
// 4 is good if you have max 32 filedescriptors
|
// The default value of this parameter is 511 (not 512).
|
||||||
// 1 is good if you have max 16 filedescriptors
|
// See: https://nodejs.org/docs/latest/api/net.html#net_server_listen
|
||||||
var backlog = global.environment.maxConnections || 128;
|
const backlog = global.environment.maxConnections || 128;
|
||||||
|
|
||||||
var listener = server.listen(serverOptions.bind.port, serverOptions.bind.host, backlog);
|
const listener = server.listen(serverOptions.bind.port, serverOptions.bind.host, backlog);
|
||||||
|
const version = require('./package').version;
|
||||||
var version = require('./package').version;
|
|
||||||
|
|
||||||
listener.on('listening', function () {
|
listener.on('listening', function () {
|
||||||
log('Using Node.js %s', process.version);
|
global.logger.info(`Using Node.js ${process.version}`);
|
||||||
log('Using configuration file "%s"', configurationFile);
|
global.logger.info(`Using configuration file ${configurationFile}`);
|
||||||
log(
|
const { address, port } = listener.address();
|
||||||
'Windshaft tileserver %s started on %s:%s PID=%d (%s)',
|
global.logger.info(`Windshaft tileserver ${version} started on ${address}:${port} PID=${process.pid} (${ENVIRONMENT})`);
|
||||||
version, serverOptions.bind.host, serverOptions.bind.port, process.pid, ENVIRONMENT
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function getCPUUsage (oldUsage) {
|
function getCPUUsage (oldUsage) {
|
||||||
@ -159,22 +129,14 @@ setInterval(function cpuUsageMetrics () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
previousCPUUsage = CPUUsage;
|
previousCPUUsage = CPUUsage;
|
||||||
}, 5000);
|
}, 5000).unref();
|
||||||
|
|
||||||
setInterval(function () {
|
setInterval(function () {
|
||||||
var memoryUsage = process.memoryUsage();
|
var memoryUsage = process.memoryUsage();
|
||||||
Object.keys(memoryUsage).forEach(function (k) {
|
Object.keys(memoryUsage).forEach(function (k) {
|
||||||
global.statsClient.gauge('windshaft.memory.' + k, memoryUsage[k]);
|
global.statsClient.gauge('windshaft.memory.' + k, memoryUsage[k]);
|
||||||
});
|
});
|
||||||
}, 5000);
|
}, 5000).unref();
|
||||||
|
|
||||||
process.on('SIGHUP', function () {
|
|
||||||
global.log4js.clearAndShutdownAppenders(function () {
|
|
||||||
global.log4js.configure(log4jsConfig);
|
|
||||||
global.logger = global.log4js.getLogger();
|
|
||||||
log('Log files reloaded');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
if (global.gc) {
|
if (global.gc) {
|
||||||
var gcInterval = Number.isFinite(global.environment.gc_interval)
|
var gcInterval = Number.isFinite(global.environment.gc_interval)
|
||||||
@ -184,7 +146,7 @@ if (global.gc) {
|
|||||||
if (gcInterval > 0) {
|
if (gcInterval > 0) {
|
||||||
setInterval(function gcForcedCycle () {
|
setInterval(function gcForcedCycle () {
|
||||||
global.gc();
|
global.gc();
|
||||||
}, gcInterval);
|
}, gcInterval).unref();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,41 +189,36 @@ function getGCTypeValue (type) {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
addHandlers(listener, global.logger, 45000);
|
const exitProcess = pino.final(global.logger, (err, logger, listener, signal, killTimeout) => {
|
||||||
|
scheduleForcedExit(killTimeout, logger);
|
||||||
|
|
||||||
function addHandlers (listener, logger, killTimeout) {
|
logger.info(`Process has received signal: ${signal}`);
|
||||||
process.on('uncaughtException', exitProcess(listener, logger, killTimeout));
|
|
||||||
process.on('unhandledRejection', exitProcess(listener, logger, killTimeout));
|
let code = 0;
|
||||||
process.on('ENOMEM', exitProcess(listener, logger, killTimeout));
|
|
||||||
process.on('SIGINT', exitProcess(listener, logger, killTimeout));
|
if (err) {
|
||||||
process.on('SIGTERM', exitProcess(listener, logger, killTimeout));
|
code = 1;
|
||||||
|
logger.fatal(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info(`Process is going to exit with code: ${code}`);
|
||||||
|
listener.close(() => process.exit(code));
|
||||||
|
});
|
||||||
|
|
||||||
|
function addHandlers (listener, killTimeout) {
|
||||||
|
process.on('uncaughtException', (err) => exitProcess(err, listener, 'uncaughtException', killTimeout));
|
||||||
|
process.on('unhandledRejection', (err) => exitProcess(err, listener, 'unhandledRejection', killTimeout));
|
||||||
|
process.on('ENOMEM', (err) => exitProcess(err, listener, 'ENOMEM', killTimeout));
|
||||||
|
process.on('SIGINT', () => exitProcess(null, listener, 'SIGINT', killTimeout));
|
||||||
|
process.on('SIGTERM', () => exitProcess(null, listener, 'SIGINT', killTimeout));
|
||||||
}
|
}
|
||||||
|
|
||||||
function exitProcess (listener, logger, killTimeout) {
|
addHandlers(listener, 45000);
|
||||||
return function exitProcessFn (signal) {
|
|
||||||
scheduleForcedExit(killTimeout, logger);
|
|
||||||
|
|
||||||
let code = 0;
|
|
||||||
|
|
||||||
if (!['SIGINT', 'SIGTERM'].includes(signal)) {
|
|
||||||
const err = signal instanceof Error ? signal : new Error(signal);
|
|
||||||
signal = undefined;
|
|
||||||
code = 1;
|
|
||||||
|
|
||||||
logger.fatal(err);
|
|
||||||
} else {
|
|
||||||
logger.info(`Process has received signal: ${signal}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info(`Process is going to exit with code: ${code}`);
|
|
||||||
listener.close(() => global.log4js.shutdown(() => process.exit(code)));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function scheduleForcedExit (killTimeout, logger) {
|
function scheduleForcedExit (killTimeout, logger) {
|
||||||
// Schedule exit if there is still ongoing work to deal with
|
// Schedule exit if there is still ongoing work to deal with
|
||||||
const killTimer = setTimeout(() => {
|
const killTimer = setTimeout(() => {
|
||||||
logger.info('Process didn\'t close on time. Force exit');
|
global.logger.info('Process didn\'t close on time. Force exit');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}, killTimeout);
|
}, killTimeout);
|
||||||
|
|
||||||
|
@ -67,9 +67,10 @@ var config = {
|
|||||||
http: 'http://{{=it.user}}.localhost.lan:{{=it.port}}/api/v1/map',
|
http: 'http://{{=it.user}}.localhost.lan:{{=it.port}}/api/v1/map',
|
||||||
https: 'http://localhost.lan:{{=it.port}}/user/{{=it.user}}/api/v1/map'
|
https: 'http://localhost.lan:{{=it.port}}/user/{{=it.user}}/api/v1/map'
|
||||||
}
|
}
|
||||||
|
// Specify the maximum length of the queue of pending connections for the HTTP server.
|
||||||
// Maximum number of connections for one process
|
// The actual length will be determined by the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn on Linux.
|
||||||
// 128 is a good value with a limit of 1024 open file descriptors
|
// The default value of this parameter is 511 (not 512).
|
||||||
|
// See: https://nodejs.org/docs/latest/api/net.html#net_server_listen
|
||||||
,maxConnections:128
|
,maxConnections:128
|
||||||
// Maximum number of templates per user. Unlimited by default.
|
// Maximum number of templates per user. Unlimited by default.
|
||||||
,maxUserTemplates:1024
|
,maxUserTemplates:1024
|
||||||
@ -82,12 +83,6 @@ var config = {
|
|||||||
,socket_timeout: 600000
|
,socket_timeout: 600000
|
||||||
,enable_cors: true
|
,enable_cors: true
|
||||||
,cache_enabled: true
|
,cache_enabled: true
|
||||||
,log_format: ':req[X-Real-IP] :method :req[Host]:url :status :response-time ms -> :res[Content-Type] (:res[X-Tiler-Profiler]) (:res[X-Tiler-Errors])'
|
|
||||||
// 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: undefined
|
|
||||||
,log_windshaft: true
|
|
||||||
// Templated database username for authorized user
|
// Templated database username for authorized user
|
||||||
// Supported labels: 'user_id' (read from redis)
|
// Supported labels: 'user_id' (read from redis)
|
||||||
,postgres_auth_user: 'development_cartodb_user_<%= user_id %>'
|
,postgres_auth_user: 'development_cartodb_user_<%= user_id %>'
|
||||||
@ -262,12 +257,6 @@ var config = {
|
|||||||
// the template to use for adding the host header in the batch api requests
|
// the template to use for adding the host header in the batch api requests
|
||||||
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
||||||
},
|
},
|
||||||
logger: {
|
|
||||||
// If filename is given logs comming from analysis client will be written
|
|
||||||
// there, in append mode. Otherwise 'log_filename' is used. Otherwise stdout is used (default).
|
|
||||||
// Log file will be re-opened on receiving the HUP signal
|
|
||||||
filename: undefined
|
|
||||||
},
|
|
||||||
// Define max execution time in ms for analyses or tags
|
// Define max execution time in ms for analyses or tags
|
||||||
// If analysis or tag are not found in redis this values will be used as default.
|
// If analysis or tag are not found in redis this values will be used as default.
|
||||||
limits: {
|
limits: {
|
||||||
|
@ -67,9 +67,10 @@ var config = {
|
|||||||
http: 'http://{{=it.cdn_url}}/{{=it.user}}/api/v1/map',
|
http: 'http://{{=it.cdn_url}}/{{=it.user}}/api/v1/map',
|
||||||
https: 'https://{{=it.cdn_url}}/{{=it.user}}/api/v1/map'
|
https: 'https://{{=it.cdn_url}}/{{=it.user}}/api/v1/map'
|
||||||
}
|
}
|
||||||
|
// Specify the maximum length of the queue of pending connections for the HTTP server.
|
||||||
// Maximum number of connections for one process
|
// The actual length will be determined by the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn on Linux.
|
||||||
// 128 is a good value with a limit of 1024 open file descriptors
|
// The default value of this parameter is 511 (not 512).
|
||||||
|
// See: https://nodejs.org/docs/latest/api/net.html#net_server_listen
|
||||||
,maxConnections:128
|
,maxConnections:128
|
||||||
// Maximum number of templates per user. Unlimited by default.
|
// Maximum number of templates per user. Unlimited by default.
|
||||||
,maxUserTemplates:1024
|
,maxUserTemplates:1024
|
||||||
@ -82,12 +83,6 @@ var config = {
|
|||||||
,socket_timeout: 600000
|
,socket_timeout: 600000
|
||||||
,enable_cors: true
|
,enable_cors: true
|
||||||
,cache_enabled: true
|
,cache_enabled: true
|
||||||
,log_format: ':req[X-Real-IP] :method :req[Host]:url :status :response-time ms -> :res[Content-Type] (:res[X-Tiler-Profiler]) (:res[X-Tiler-Errors])'
|
|
||||||
// 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'
|
|
||||||
,log_windshaft: true
|
|
||||||
// Templated database username for authorized user
|
// Templated database username for authorized user
|
||||||
// Supported labels: 'user_id' (read from redis)
|
// Supported labels: 'user_id' (read from redis)
|
||||||
,postgres_auth_user: 'cartodb_user_<%= user_id %>'
|
,postgres_auth_user: 'cartodb_user_<%= user_id %>'
|
||||||
@ -262,12 +257,6 @@ var config = {
|
|||||||
// the template to use for adding the host header in the batch api requests
|
// the template to use for adding the host header in the batch api requests
|
||||||
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
||||||
},
|
},
|
||||||
logger: {
|
|
||||||
// If filename is given logs comming from analysis client will be written
|
|
||||||
// there, in append mode. Otherwise 'log_filename' is used. Otherwise stdout is used (default).
|
|
||||||
// Log file will be re-opened on receiving the HUP signal
|
|
||||||
filename: 'logs/node-windshaft-analysis.log'
|
|
||||||
},
|
|
||||||
// Define max execution time in ms for analyses or tags
|
// Define max execution time in ms for analyses or tags
|
||||||
// If analysis or tag are not found in redis this values will be used as default.
|
// If analysis or tag are not found in redis this values will be used as default.
|
||||||
limits: {
|
limits: {
|
||||||
|
@ -67,9 +67,9 @@ var config = {
|
|||||||
http: 'http://{{=it.cdn_url}}/{{=it.user}}/api/v1/map',
|
http: 'http://{{=it.cdn_url}}/{{=it.user}}/api/v1/map',
|
||||||
https: 'https://{{=it.cdn_url}}/{{=it.user}}/api/v1/map'
|
https: 'https://{{=it.cdn_url}}/{{=it.user}}/api/v1/map'
|
||||||
}
|
}
|
||||||
|
// Specify the maximum length of the queue of pending connections for the HTTP server.
|
||||||
// Maximum number of connections for one process
|
// The actual length will be determined by the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn on Linux.
|
||||||
// 128 is a good value with a limit of 1024 open file descriptors
|
// The default value of this parameter is 511 (not 512).
|
||||||
,maxConnections:128
|
,maxConnections:128
|
||||||
// Maximum number of templates per user. Unlimited by default.
|
// Maximum number of templates per user. Unlimited by default.
|
||||||
,maxUserTemplates:1024
|
,maxUserTemplates:1024
|
||||||
@ -82,12 +82,6 @@ var config = {
|
|||||||
,socket_timeout: 600000
|
,socket_timeout: 600000
|
||||||
,enable_cors: true
|
,enable_cors: true
|
||||||
,cache_enabled: true
|
,cache_enabled: true
|
||||||
,log_format: ':req[X-Real-IP] :method :req[Host]:url :status :response-time ms -> :res[Content-Type] (:res[X-Tiler-Profiler]) (:res[X-Tiler-Errors])'
|
|
||||||
// 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'
|
|
||||||
,log_windshaft: true
|
|
||||||
// Templated database username for authorized user
|
// Templated database username for authorized user
|
||||||
// Supported labels: 'user_id' (read from redis)
|
// Supported labels: 'user_id' (read from redis)
|
||||||
,postgres_auth_user: 'cartodb_staging_user_<%= user_id %>'
|
,postgres_auth_user: 'cartodb_staging_user_<%= user_id %>'
|
||||||
@ -262,12 +256,6 @@ var config = {
|
|||||||
// the template to use for adding the host header in the batch api requests
|
// the template to use for adding the host header in the batch api requests
|
||||||
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
||||||
},
|
},
|
||||||
logger: {
|
|
||||||
// If filename is given logs comming from analysis client will be written
|
|
||||||
// there, in append mode. Otherwise 'log_filename' is used. Otherwise stdout is used (default).
|
|
||||||
// Log file will be re-opened on receiving the HUP signal
|
|
||||||
filename: 'logs/node-windshaft-analysis.log'
|
|
||||||
},
|
|
||||||
// Define max execution time in ms for analyses or tags
|
// Define max execution time in ms for analyses or tags
|
||||||
// If analysis or tag are not found in redis this values will be used as default.
|
// If analysis or tag are not found in redis this values will be used as default.
|
||||||
limits: {
|
limits: {
|
||||||
|
@ -67,9 +67,10 @@ var config = {
|
|||||||
http: 'http://{{=it.user}}.localhost.lan:{{=it.port}}/api/v1/map',
|
http: 'http://{{=it.user}}.localhost.lan:{{=it.port}}/api/v1/map',
|
||||||
https: 'https://{{=it.user}}.localhost.lan:{{=it.port}}/api/v1/map'
|
https: 'https://{{=it.user}}.localhost.lan:{{=it.port}}/api/v1/map'
|
||||||
}
|
}
|
||||||
|
// Specify the maximum length of the queue of pending connections for the HTTP server.
|
||||||
// Maximum number of connections for one process
|
// The actual length will be determined by the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn on Linux.
|
||||||
// 128 is a good value with a limit of 1024 open file descriptors
|
// The default value of this parameter is 511 (not 512).
|
||||||
|
// See: https://nodejs.org/docs/latest/api/net.html#net_server_listen
|
||||||
,maxConnections:128
|
,maxConnections:128
|
||||||
// Maximum number of templates per user. Unlimited by default.
|
// Maximum number of templates per user. Unlimited by default.
|
||||||
,maxUserTemplates:1024
|
,maxUserTemplates:1024
|
||||||
@ -82,12 +83,6 @@ var config = {
|
|||||||
,socket_timeout: 600000
|
,socket_timeout: 600000
|
||||||
,enable_cors: true
|
,enable_cors: true
|
||||||
,cache_enabled: false
|
,cache_enabled: false
|
||||||
,log_format: ':req[X-Real-IP] :method :req[Host]:url :status :response-time ms -> :res[Content-Type] (:res[X-Tiler-Profiler]) (:res[X-Tiler-Errors])'
|
|
||||||
// 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: '/tmp/node-windshaft.log'
|
|
||||||
,log_windshaft: true
|
|
||||||
// Templated database username for authorized user
|
// Templated database username for authorized user
|
||||||
// Supported labels: 'user_id' (read from redis)
|
// Supported labels: 'user_id' (read from redis)
|
||||||
,postgres_auth_user: 'test_windshaft_cartodb_user_<%= user_id %>'
|
,postgres_auth_user: 'test_windshaft_cartodb_user_<%= user_id %>'
|
||||||
@ -264,12 +259,6 @@ var config = {
|
|||||||
// the template to use for adding the host header in the batch api requests
|
// the template to use for adding the host header in the batch api requests
|
||||||
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
||||||
},
|
},
|
||||||
logger: {
|
|
||||||
// If filename is given logs comming from analysis client will be written
|
|
||||||
// there, in append mode. Otherwise 'log_filename' is used. Otherwise stdout is used (default).
|
|
||||||
// Log file will be re-opened on receiving the HUP signal
|
|
||||||
filename: '/tmp/node-windshaft-analysis.log'
|
|
||||||
},
|
|
||||||
// Define max execution time in ms for analyses or tags
|
// Define max execution time in ms for analyses or tags
|
||||||
// If analysis or tag are not found in redis this values will be used as default.
|
// If analysis or tag are not found in redis this values will be used as default.
|
||||||
limits: {
|
limits: {
|
||||||
|
@ -83,15 +83,11 @@ module.exports = class ApiRouter {
|
|||||||
global.statsClient.gauge(keyPrefix + 'waiting', status.waiting);
|
global.statsClient.gauge(keyPrefix + 'waiting', status.waiting);
|
||||||
});
|
});
|
||||||
|
|
||||||
const windshaftLogger = environmentOptions.log_windshaft && global.log4js
|
|
||||||
? global.log4js.getLogger('[windshaft]')
|
|
||||||
: null;
|
|
||||||
|
|
||||||
const { rendererCache, tileBackend, attributesBackend, previewBackend, mapBackend, mapStore } = windshaftFactory({
|
const { rendererCache, tileBackend, attributesBackend, previewBackend, mapBackend, mapStore } = windshaftFactory({
|
||||||
rendererOptions: serverOptions,
|
rendererOptions: serverOptions,
|
||||||
redisPool,
|
redisPool,
|
||||||
onTileErrorStrategy: getOnTileErrorStrategy({ enabled: environmentOptions.enabledFeatures.onTileErrorStrategy }),
|
onTileErrorStrategy: getOnTileErrorStrategy({ enabled: environmentOptions.enabledFeatures.onTileErrorStrategy }),
|
||||||
logger: windshaftLogger
|
logger: global.logger
|
||||||
});
|
});
|
||||||
|
|
||||||
const rendererStatsReporter = new RendererStatsReporter(rendererCache, serverOptions.renderCache.statsInterval);
|
const rendererStatsReporter = new RendererStatsReporter(rendererCache, serverOptions.renderCache.statsInterval);
|
||||||
@ -205,7 +201,7 @@ module.exports = class ApiRouter {
|
|||||||
|
|
||||||
middlewares.forEach(middleware => apiRouter.use(middleware()));
|
middlewares.forEach(middleware => apiRouter.use(middleware()));
|
||||||
|
|
||||||
apiRouter.use(logger(this.serverOptions));
|
apiRouter.use(logger());
|
||||||
apiRouter.use(initializeStatusCode());
|
apiRouter.use(initializeStatusCode());
|
||||||
apiRouter.use(bodyParser.json());
|
apiRouter.use(bodyParser.json());
|
||||||
apiRouter.use(servedByHostHeader());
|
apiRouter.use(servedByHostHeader());
|
||||||
@ -235,20 +231,14 @@ function createTemplateMaps ({ redisPool, surrogateKeysCache }) {
|
|||||||
max_user_templates: global.environment.maxUserTemplates
|
max_user_templates: global.environment.maxUserTemplates
|
||||||
});
|
});
|
||||||
|
|
||||||
function invalidateNamedMap (owner, templateName) {
|
function invalidateNamedMap (user, templateName) {
|
||||||
var startTime = Date.now();
|
const startTime = Date.now();
|
||||||
surrogateKeysCache.invalidate(new NamedMapsCacheEntry(owner, templateName), function (err) {
|
surrogateKeysCache.invalidate(new NamedMapsCacheEntry(user, templateName), (err) => {
|
||||||
var logMessage = JSON.stringify({
|
|
||||||
username: owner,
|
|
||||||
type: 'named_map_invalidation',
|
|
||||||
elapsed: Date.now() - startTime,
|
|
||||||
error: err ? JSON.stringify(err.message) : undefined
|
|
||||||
});
|
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.warn(logMessage);
|
return global.logger.error(err);
|
||||||
} else {
|
|
||||||
global.logger.info(logMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
global.logger.info({ user, type: 'named_map_invalidation', elapsed: Date.now() - startTime });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@ function incrementMapViews ({ metadataBackend }) {
|
|||||||
|
|
||||||
mapConfigProvider.getMapConfig((err, mapConfig) => {
|
mapConfigProvider.getMapConfig((err, mapConfig) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.log(incrementMapViewsError({ user, err }));
|
global.logger.info(incrementMapViewsError({ user, err }));
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ function incrementMapViews ({ metadataBackend }) {
|
|||||||
|
|
||||||
metadataBackend.incMapviewCount(user, statTag, (err) => {
|
metadataBackend.incMapviewCount(user, statTag, (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.log(incrementMapViewsError({ user, err }));
|
global.logger.info(incrementMapViewsError({ user, err }));
|
||||||
}
|
}
|
||||||
|
|
||||||
next();
|
next();
|
||||||
|
@ -10,7 +10,7 @@ module.exports = function setCacheChannelHeader () {
|
|||||||
|
|
||||||
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.warn('ERROR generating Cache Channel Header:', err);
|
global.logger.warn(err, 'ERROR generating Cache Channel Header');
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ module.exports = function setCacheControlHeader ({
|
|||||||
|
|
||||||
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.warn('ERROR generating Cache Control Header:', err);
|
global.logger.warn(err, 'ERROR generating Cache Control Header');
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ module.exports = function incrementMapViewCount (metadataBackend) {
|
|||||||
req.profiler.done('incMapviewCount');
|
req.profiler.done('incMapviewCount');
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.log(`ERROR: failed to increment mapview count for user '${user}': ${err.message}`);
|
global.logger.warn(err, `ERROR: failed to increment mapview count for user '${user}'`);
|
||||||
}
|
}
|
||||||
|
|
||||||
next();
|
next();
|
||||||
|
@ -21,7 +21,7 @@ module.exports = function setLastModifiedHeader () {
|
|||||||
|
|
||||||
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.warn('ERROR generating Last Modified Header:', err);
|
global.logger.warn(err, 'ERROR generating Last Modified Header');
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,24 +1,15 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
module.exports = function logger (options) {
|
const uuid = require('uuid');
|
||||||
if (!global.log4js || !options.log_format) {
|
|
||||||
return function dummyLoggerMiddleware (req, res, next) {
|
|
||||||
next();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const opts = {
|
module.exports = function logger () {
|
||||||
level: 'info',
|
return function loggerMiddleware (req, res, next) {
|
||||||
// Allowing for unbuffered logging is mainly
|
const id = req.get('X-Request-Id') || uuid.v4();
|
||||||
// used to avoid hanging during unit testing.
|
res.locals.logger = global.logger.child({ id });
|
||||||
// TODO: provide an explicit teardown function instead,
|
|
||||||
// releasing any event handler or timer set by
|
res.locals.logger.info(req);
|
||||||
// this component.
|
res.on('finish', () => res.locals.logger.info(res));
|
||||||
buffer: !options.unbuffered_logging,
|
|
||||||
// optional log format
|
next();
|
||||||
format: options.log_format
|
|
||||||
};
|
};
|
||||||
const logger = global.log4js.getLogger();
|
|
||||||
|
|
||||||
return global.log4js.connectLogger(logger, opts);
|
|
||||||
};
|
};
|
||||||
|
@ -19,7 +19,7 @@ module.exports = function metrics ({ enabled, tags, metricsBackend, logger }) {
|
|||||||
const { event, attributes } = getEventData(req, res, tags);
|
const { event, attributes } = getEventData(req, res, tags);
|
||||||
|
|
||||||
metricsBackend.send(event, attributes)
|
metricsBackend.send(event, attributes)
|
||||||
.catch((error) => logger.error(`Failed to publish event "${event}": ${error.message}`));
|
.catch((err) => logger.error(err, `Failed to publish event "${event}"`));
|
||||||
});
|
});
|
||||||
|
|
||||||
return next();
|
return next();
|
||||||
|
@ -17,7 +17,7 @@ module.exports = function setSurrogateKeyHeader ({ surrogateKeysCache }) {
|
|||||||
|
|
||||||
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
mapConfigProvider.getAffectedTables((err, affectedTables) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
global.logger.warn('ERROR generating Surrogate Key Header:', err);
|
global.logger.warn(err, 'ERROR generating Surrogate Key Header');
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
var _ = require('underscore');
|
var _ = require('underscore');
|
||||||
var camshaft = require('camshaft');
|
var camshaft = require('camshaft');
|
||||||
var fs = require('fs');
|
|
||||||
|
|
||||||
var REDIS_LIMITS = {
|
var REDIS_LIMITS = {
|
||||||
DB: 5,
|
DB: 5,
|
||||||
@ -14,7 +13,6 @@ function AnalysisBackend (metadataBackend, options) {
|
|||||||
this.options = options || {};
|
this.options = options || {};
|
||||||
this.options.limits = this.options.limits || {};
|
this.options.limits = this.options.limits || {};
|
||||||
this.setBatchConfig(this.options.batch);
|
this.setBatchConfig(this.options.batch);
|
||||||
this.setLoggerConfig(this.options.logger);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = AnalysisBackend;
|
module.exports = AnalysisBackend;
|
||||||
@ -27,30 +25,12 @@ AnalysisBackend.prototype.setBatchConfig = function (options) {
|
|||||||
this.batchConfig = batchConfig;
|
this.batchConfig = batchConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
AnalysisBackend.prototype.setLoggerConfig = function (options) {
|
|
||||||
this.loggerConfig = options || {};
|
|
||||||
|
|
||||||
if (this.loggerConfig.filename) {
|
|
||||||
this.stream = fs.createWriteStream(this.loggerConfig.filename, { flags: 'a', encoding: 'utf8' });
|
|
||||||
|
|
||||||
process.on('SIGHUP', function () {
|
|
||||||
if (this.stream) {
|
|
||||||
this.stream.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.stream = fs.createWriteStream(this.loggerConfig.filename, { flags: 'a', encoding: 'utf8' });
|
|
||||||
}.bind(this));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AnalysisBackend.prototype.create = function (analysisConfiguration, analysisDefinition, callback) {
|
AnalysisBackend.prototype.create = function (analysisConfiguration, analysisDefinition, callback) {
|
||||||
analysisConfiguration.batch.endpoint = this.batchConfig.endpoint;
|
analysisConfiguration.batch.endpoint = this.batchConfig.endpoint;
|
||||||
analysisConfiguration.batch.inlineExecution = this.batchConfig.inlineExecution;
|
analysisConfiguration.batch.inlineExecution = this.batchConfig.inlineExecution;
|
||||||
analysisConfiguration.batch.hostHeaderTemplate = this.batchConfig.hostHeaderTemplate;
|
analysisConfiguration.batch.hostHeaderTemplate = this.batchConfig.hostHeaderTemplate;
|
||||||
|
|
||||||
analysisConfiguration.logger = {
|
analysisConfiguration.logger = global.logger;
|
||||||
stream: this.stream ? this.stream : process.stdout
|
|
||||||
};
|
|
||||||
|
|
||||||
this.getAnalysesLimits(analysisConfiguration.user, function (err, limits) {
|
this.getAnalysesLimits(analysisConfiguration.user, function (err, limits) {
|
||||||
if (err) {}
|
if (err) {}
|
||||||
|
@ -10,17 +10,20 @@ module.exports = CdbRequest;
|
|||||||
|
|
||||||
CdbRequest.prototype.userByReq = function (req) {
|
CdbRequest.prototype.userByReq = function (req) {
|
||||||
var host = req.headers.host || '';
|
var host = req.headers.host || '';
|
||||||
|
|
||||||
if (req.params.user) {
|
if (req.params.user) {
|
||||||
return req.params.user;
|
return req.params.user;
|
||||||
}
|
}
|
||||||
|
|
||||||
var mat = host.match(this.RE_USER_FROM_HOST);
|
var mat = host.match(this.RE_USER_FROM_HOST);
|
||||||
|
|
||||||
if (!mat) {
|
if (!mat) {
|
||||||
global.logger.error("Pattern '%s' does not match hostname '%s'", this.RE_USER_FROM_HOST, host);
|
return global.logger.error(new Error(`Pattern '${this.RE_USER_FROM_HOST}' does not match hostname '${host}'`));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mat.length !== 2) {
|
if (mat.length !== 2) {
|
||||||
global.logger.error("Pattern '%s' gave unexpected matches against '%s': %s", this.RE_USER_FROM_HOST, host, mat);
|
return global.logger.error(new Error(`Pattern '${this.RE_USER_FROM_HOST}' gave unexpected matches against '${host}': ${mat}`));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mat[1];
|
return mat[1];
|
||||||
};
|
};
|
||||||
|
@ -52,9 +52,6 @@ var analysisConfig = _.defaults(global.environment.analysis || {}, {
|
|||||||
endpoint: 'http://127.0.0.1:8080/api/v2/sql/job',
|
endpoint: 'http://127.0.0.1:8080/api/v2/sql/job',
|
||||||
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
hostHeaderTemplate: '{{=it.username}}.localhost.lan'
|
||||||
},
|
},
|
||||||
logger: {
|
|
||||||
filename: undefined
|
|
||||||
},
|
|
||||||
limits: {}
|
limits: {}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -118,9 +115,6 @@ module.exports = {
|
|||||||
endpoint: analysisConfig.batch.endpoint,
|
endpoint: analysisConfig.batch.endpoint,
|
||||||
hostHeaderTemplate: analysisConfig.batch.hostHeaderTemplate
|
hostHeaderTemplate: analysisConfig.batch.hostHeaderTemplate
|
||||||
},
|
},
|
||||||
logger: {
|
|
||||||
filename: analysisConfig.logger.filename
|
|
||||||
},
|
|
||||||
limits: analysisConfig.limits
|
limits: analysisConfig.limits
|
||||||
},
|
},
|
||||||
// Do not send unwatch on release. See http://github.com/CartoDB/Windshaft-cartodb/issues/161
|
// Do not send unwatch on release. See http://github.com/CartoDB/Windshaft-cartodb/issues/161
|
||||||
|
399
package-lock.json
generated
399
package-lock.json
generated
@ -272,6 +272,12 @@
|
|||||||
"protobufjs": "^6.8.6"
|
"protobufjs": "^6.8.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@hapi/bourne": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@mapbox/sphericalmercator": {
|
"@mapbox/sphericalmercator": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@mapbox/sphericalmercator/-/sphericalmercator-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mapbox/sphericalmercator/-/sphericalmercator-1.1.0.tgz",
|
||||||
@ -533,6 +539,61 @@
|
|||||||
"sprintf-js": "~1.0.2"
|
"sprintf-js": "~1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"args": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "5.0.0",
|
||||||
|
"chalk": "2.4.2",
|
||||||
|
"leven": "2.1.0",
|
||||||
|
"mri": "1.1.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^1.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"camelcase": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "2.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||||
|
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^3.2.1",
|
||||||
|
"escape-string-regexp": "^1.0.5",
|
||||||
|
"supports-color": "^5.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "5.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||||
|
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"array-flatten": {
|
"array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
@ -593,6 +654,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||||
},
|
},
|
||||||
|
"atomic-sleep": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
|
||||||
|
},
|
||||||
"aws-sign2": {
|
"aws-sign2": {
|
||||||
"version": "0.7.0",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||||
@ -701,17 +767,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
|
||||||
"integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg="
|
"integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg="
|
||||||
},
|
},
|
||||||
"bunyan": {
|
|
||||||
"version": "1.8.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.1.tgz",
|
|
||||||
"integrity": "sha1-aMakpQLVYgvJ9y1nNoEMGxiYCX8=",
|
|
||||||
"requires": {
|
|
||||||
"dtrace-provider": "~0.6",
|
|
||||||
"moment": "^2.10.6",
|
|
||||||
"mv": "~2",
|
|
||||||
"safe-json-stringify": "~1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bytes": {
|
"bytes": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
||||||
@ -741,16 +796,15 @@
|
|||||||
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
|
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
|
||||||
},
|
},
|
||||||
"camshaft": {
|
"camshaft": {
|
||||||
"version": "0.65.3",
|
"version": "github:cartodb/camshaft#8d8f62d3d98b4ac316d8444ac3f3f321c28040dc",
|
||||||
"resolved": "https://registry.npmjs.org/camshaft/-/camshaft-0.65.3.tgz",
|
"from": "github:cartodb/camshaft#dgaubert/ch78389/camshaft-replace-logger-from-bunyan-to-pino",
|
||||||
"integrity": "sha512-URr3gWV1QtUATYXQzCTTc7Z1sjlc4ZDTdm+qsOhrOll5ieU1BXkO8puIe8Ts7pwMHH2cLgEy1Ddh+a/V8QMt7A==",
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"async": "^1.5.2",
|
"async": "^1.5.2",
|
||||||
"bunyan": "1.8.1",
|
|
||||||
"cartodb-psql": "0.14.0",
|
"cartodb-psql": "0.14.0",
|
||||||
"cartodb-query-tables": "^0.6.1",
|
"cartodb-query-tables": "^0.6.1",
|
||||||
"debug": "^3.1.0",
|
"debug": "^3.1.0",
|
||||||
"dot": "^1.0.3",
|
"dot": "^1.0.3",
|
||||||
|
"pino": "^6.3.1",
|
||||||
"request": "^2.85.0"
|
"request": "^2.85.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -1102,6 +1156,12 @@
|
|||||||
"assert-plus": "^1.0.0"
|
"assert-plus": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dateformat": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||||
@ -1236,15 +1296,6 @@
|
|||||||
"integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=",
|
"integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"dtrace-provider": {
|
|
||||||
"version": "0.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.6.0.tgz",
|
|
||||||
"integrity": "sha1-CweNVReTfYcxAUUtkUZzdVe3XlE=",
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"nan": "^2.0.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"duplexify": {
|
"duplexify": {
|
||||||
"version": "3.7.1",
|
"version": "3.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
|
||||||
@ -2022,6 +2073,16 @@
|
|||||||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"fast-redact": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-zxpkULI9W9MNTK2sJ3BpPQrTEXFNESd2X6O1tXMFpK/XM0G5c5Rll2EVYZH2TqI3xRGK/VaJ+eEOt7pnENJpeA=="
|
||||||
|
},
|
||||||
|
"fast-safe-stringify": {
|
||||||
|
"version": "2.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
|
||||||
|
"integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
|
||||||
|
},
|
||||||
"fast-text-encoding": {
|
"fast-text-encoding": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz",
|
||||||
@ -2216,6 +2277,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flatstr": {
|
||||||
|
"version": "1.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
|
||||||
|
"integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
|
||||||
|
},
|
||||||
"flatted": {
|
"flatted": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
|
||||||
@ -3406,11 +3472,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
|
||||||
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
|
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
|
||||||
},
|
},
|
||||||
"isarray": {
|
|
||||||
"version": "0.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
|
||||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
|
||||||
},
|
|
||||||
"isexe": {
|
"isexe": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||||
@ -3556,6 +3617,18 @@
|
|||||||
"html-escaper": "^2.0.0"
|
"html-escaper": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"jmespath": {
|
||||||
|
"version": "0.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
|
||||||
|
"integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"joycon": {
|
||||||
|
"version": "2.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz",
|
||||||
|
"integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"js-base64": {
|
"js-base64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
|
||||||
@ -3665,6 +3738,12 @@
|
|||||||
"invert-kv": "^1.0.0"
|
"invert-kv": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"leven": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
|
||||||
|
"integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"levn": {
|
"levn": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||||
@ -3787,33 +3866,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"log4js": {
|
|
||||||
"version": "github:cartodb/log4js-node#145d5f91e35e7fb14a6278cbf7a711ced6603727",
|
|
||||||
"from": "github:cartodb/log4js-node#cdb",
|
|
||||||
"requires": {
|
|
||||||
"async": "~0.2.0",
|
|
||||||
"readable-stream": "~1.0.2",
|
|
||||||
"semver": "~4.3.3",
|
|
||||||
"underscore": "1.8.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"async": {
|
|
||||||
"version": "0.2.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
|
|
||||||
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
|
|
||||||
},
|
|
||||||
"semver": {
|
|
||||||
"version": "4.3.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
|
|
||||||
"integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto="
|
|
||||||
},
|
|
||||||
"underscore": {
|
|
||||||
"version": "1.8.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.2.tgz",
|
|
||||||
"integrity": "sha1-ZN8utZCJnelQeC83NRkLpC6/MR0="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"long": {
|
"long": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
||||||
@ -4261,7 +4313,14 @@
|
|||||||
"moment": {
|
"moment": {
|
||||||
"version": "2.22.1",
|
"version": "2.22.1",
|
||||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz",
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz",
|
||||||
"integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ=="
|
"integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"mri": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
@ -4274,17 +4333,6 @@
|
|||||||
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
|
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"mv": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"mkdirp": "~0.5.1",
|
|
||||||
"ncp": "~2.0.0",
|
|
||||||
"rimraf": "~2.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nan": {
|
"nan": {
|
||||||
"version": "2.14.0",
|
"version": "2.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
|
||||||
@ -4296,12 +4344,6 @@
|
|||||||
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
|
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ncp": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"needle": {
|
"needle": {
|
||||||
"version": "2.3.3",
|
"version": "2.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/needle/-/needle-2.3.3.tgz",
|
||||||
@ -4674,6 +4716,12 @@
|
|||||||
"ansi-regex": "^4.1.0"
|
"ansi-regex": "^4.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"uuid": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"which-module": {
|
"which-module": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
||||||
@ -5154,6 +5202,101 @@
|
|||||||
"pinkie": "^2.0.0"
|
"pinkie": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pino": {
|
||||||
|
"version": "6.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/pino/-/pino-6.3.1.tgz",
|
||||||
|
"integrity": "sha512-RgT010a5FfnxJ2AwB0TqcEuM+gNsnd08PZnCob98JSTLldLF0GMFJ/Z1VE/rdl5yJCqcoLwftmZSwSFY4/Hc2g==",
|
||||||
|
"requires": {
|
||||||
|
"fast-redact": "^2.0.0",
|
||||||
|
"fast-safe-stringify": "^2.0.7",
|
||||||
|
"flatstr": "^1.0.12",
|
||||||
|
"pino-std-serializers": "^2.4.2",
|
||||||
|
"quick-format-unescaped": "^4.0.1",
|
||||||
|
"sonic-boom": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pino-pretty": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-YLy/n3dMXYWOodSm530gelkSAJGmEp29L9pqiycInlIae5FEJPWAkMRO3JFMbIFtjD2Ve4SH2aBcz2aRreGpBQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@hapi/bourne": "^2.0.0",
|
||||||
|
"args": "^5.0.1",
|
||||||
|
"chalk": "^3.0.0",
|
||||||
|
"dateformat": "^3.0.3",
|
||||||
|
"fast-safe-stringify": "^2.0.7",
|
||||||
|
"jmespath": "^0.15.0",
|
||||||
|
"joycon": "^2.2.5",
|
||||||
|
"pump": "^3.0.0",
|
||||||
|
"readable-stream": "^3.6.0",
|
||||||
|
"split2": "^3.1.1",
|
||||||
|
"strip-json-comments": "^3.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/color-name": "^1.1.1",
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"strip-json-comments": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pino-std-serializers": {
|
||||||
|
"version": "2.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz",
|
||||||
|
"integrity": "sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ=="
|
||||||
|
},
|
||||||
"pkg-dir": {
|
"pkg-dir": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
|
||||||
@ -5305,6 +5448,16 @@
|
|||||||
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
|
||||||
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
|
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
|
||||||
},
|
},
|
||||||
|
"pump": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"end-of-stream": "^1.1.0",
|
||||||
|
"once": "^1.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"punycode": {
|
"punycode": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
|
||||||
@ -5320,6 +5473,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/queue-async/-/queue-async-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/queue-async/-/queue-async-1.1.0.tgz",
|
||||||
"integrity": "sha1-1fiOMv0B/uT22UbSHRer0WrGXzU="
|
"integrity": "sha1-1fiOMv0B/uT22UbSHRer0WrGXzU="
|
||||||
},
|
},
|
||||||
|
"quick-format-unescaped": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A=="
|
||||||
|
},
|
||||||
"range-parser": {
|
"range-parser": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||||
@ -5374,14 +5532,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"readable-stream": {
|
"readable-stream": {
|
||||||
"version": "1.0.34",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||||
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
|
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"core-util-is": "~1.0.0",
|
"inherits": "^2.0.3",
|
||||||
"inherits": "~2.0.1",
|
"string_decoder": "^1.1.1",
|
||||||
"isarray": "0.0.1",
|
"util-deprecate": "^1.0.1"
|
||||||
"string_decoder": "~0.10.x"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"readdirp": {
|
"readdirp": {
|
||||||
@ -5495,6 +5653,13 @@
|
|||||||
"tough-cookie": "~2.3.3",
|
"tough-cookie": "~2.3.3",
|
||||||
"tunnel-agent": "^0.6.0",
|
"tunnel-agent": "^0.6.0",
|
||||||
"uuid": "^3.1.0"
|
"uuid": "^3.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"uuid": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"require-directory": {
|
"require-directory": {
|
||||||
@ -5555,30 +5720,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rimraf": {
|
|
||||||
"version": "2.4.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
|
|
||||||
"integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"glob": "^6.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"glob": {
|
|
||||||
"version": "6.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
|
|
||||||
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"inflight": "^1.0.4",
|
|
||||||
"inherits": "2",
|
|
||||||
"minimatch": "2 || 3",
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"path-is-absolute": "^1.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"run-async": {
|
"run-async": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
|
||||||
@ -5602,12 +5743,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
||||||
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
|
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
|
||||||
},
|
},
|
||||||
"safe-json-stringify": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"safer-buffer": {
|
"safer-buffer": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
@ -5747,6 +5882,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sonic-boom": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-o9tx+bonVEXSaPtptyXQXpP8l6UV9Bi3im2geZskvWw2a/o/hrbWI7EBbbv+rOx6Hubnzun9GgH4WfbgEA3MFQ==",
|
||||||
|
"requires": {
|
||||||
|
"atomic-sleep": "^1.0.0",
|
||||||
|
"flatstr": "^1.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
@ -5827,6 +5971,15 @@
|
|||||||
"through": "2"
|
"through": "2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"split2": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/split2/-/split2-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"readable-stream": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"sprintf-js": {
|
"sprintf-js": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||||
@ -6100,9 +6253,21 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"string_decoder": {
|
"string_decoder": {
|
||||||
"version": "0.10.31",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||||
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "~5.2.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"strip-ansi": {
|
"strip-ansi": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
@ -6581,9 +6746,9 @@
|
|||||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
||||||
},
|
},
|
||||||
"uuid": {
|
"uuid": {
|
||||||
"version": "3.3.2",
|
"version": "8.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz",
|
||||||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
|
"integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg=="
|
||||||
},
|
},
|
||||||
"v8-compile-cache": {
|
"v8-compile-cache": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
"@google-cloud/pubsub": "1.5.0",
|
"@google-cloud/pubsub": "1.5.0",
|
||||||
"basic-auth": "2.0.0",
|
"basic-auth": "2.0.0",
|
||||||
"body-parser": "1.18.3",
|
"body-parser": "1.18.3",
|
||||||
"camshaft": "^0.65.3",
|
"camshaft": "github:cartodb/camshaft#dgaubert/ch78389/camshaft-replace-logger-from-bunyan-to-pino",
|
||||||
"cartodb-psql": "0.14.0",
|
"cartodb-psql": "0.14.0",
|
||||||
"cartodb-query-tables": "^0.7.0",
|
"cartodb-query-tables": "^0.7.0",
|
||||||
"cartodb-redis": "^3.0.0",
|
"cartodb-redis": "^3.0.0",
|
||||||
@ -48,11 +48,11 @@
|
|||||||
"fastly-purge": "1.0.1",
|
"fastly-purge": "1.0.1",
|
||||||
"gc-stats": "^1.4.0",
|
"gc-stats": "^1.4.0",
|
||||||
"glob": "7.1.2",
|
"glob": "7.1.2",
|
||||||
"log4js": "github:cartodb/log4js-node#cdb",
|
|
||||||
"lru-cache": "4.1.3",
|
"lru-cache": "4.1.3",
|
||||||
"lzma": "2.3.2",
|
"lzma": "2.3.2",
|
||||||
"node-statsd": "0.1.1",
|
"node-statsd": "0.1.1",
|
||||||
"on-headers": "1.0.1",
|
"on-headers": "1.0.1",
|
||||||
|
"pino": "^6.3.1",
|
||||||
"queue-async": "1.1.0",
|
"queue-async": "1.1.0",
|
||||||
"redis-mpool": "^0.8.0",
|
"redis-mpool": "^0.8.0",
|
||||||
"request": "2.87.0",
|
"request": "2.87.0",
|
||||||
@ -60,6 +60,7 @@
|
|||||||
"step-profiler": "0.3.0",
|
"step-profiler": "0.3.0",
|
||||||
"turbo-carto": "0.21.2",
|
"turbo-carto": "0.21.2",
|
||||||
"underscore": "1.6.0",
|
"underscore": "1.6.0",
|
||||||
|
"uuid": "^8.1.0",
|
||||||
"windshaft": "^7.0.1",
|
"windshaft": "^7.0.1",
|
||||||
"yargs": "^15.3.1"
|
"yargs": "^15.3.1"
|
||||||
},
|
},
|
||||||
@ -75,6 +76,7 @@
|
|||||||
"moment": "2.22.1",
|
"moment": "2.22.1",
|
||||||
"nock": "9.2.6",
|
"nock": "9.2.6",
|
||||||
"nyc": "^14.1.1",
|
"nyc": "^14.1.1",
|
||||||
|
"pino-pretty": "^4.0.0",
|
||||||
"redis": "2.8.0",
|
"redis": "2.8.0",
|
||||||
"step": "1.0.0",
|
"step": "1.0.0",
|
||||||
"strftime": "0.10.0"
|
"strftime": "0.10.0"
|
||||||
|
@ -14,7 +14,7 @@ var LZMA = require('lzma').LZMA;
|
|||||||
var lzmaWorker = new LZMA();
|
var lzmaWorker = new LZMA();
|
||||||
|
|
||||||
var redis = require('redis');
|
var redis = require('redis');
|
||||||
var log4js = require('log4js');
|
const pino = require('pino');
|
||||||
const setICUEnvVariable = require('../../lib/utils/icu-data-env-setter');
|
const setICUEnvVariable = require('../../lib/utils/icu-data-env-setter');
|
||||||
|
|
||||||
// set environment specific variables
|
// set environment specific variables
|
||||||
@ -24,9 +24,7 @@ process.env.NODE_ENV = 'test';
|
|||||||
|
|
||||||
setICUEnvVariable();
|
setICUEnvVariable();
|
||||||
|
|
||||||
// don't output logs in test environment to reduce noise
|
global.logger = pino({ base: null, level: process.env.NODE_ENV === 'test' ? 'fatal' : 'info' }, pino.destination({ sync: false }));
|
||||||
log4js.configure({ appenders: [] });
|
|
||||||
global.logger = log4js.getLogger();
|
|
||||||
|
|
||||||
// Utility function to compress & encode LZMA
|
// Utility function to compress & encode LZMA
|
||||||
function lzmaCompressToBase64 (payload, mode, callback) {
|
function lzmaCompressToBase64 (payload, mode, callback) {
|
||||||
|
Loading…
Reference in New Issue
Block a user