Current File : //usr/lib/node_modules/pm2/node_modules/vxx/index.js |
/**
* Copyright 2015 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* This file has been modified by Keymetrics
*/
'use strict';
var filesLoadedBeforeTrace = Object.keys(require.cache);
// Load continuation-local-storage first to ensure the core async APIs get
// patched before any user-land modules get loaded.
require('continuation-local-storage');
var Logger = require('./src/logger.js');
var extend = require('extend');
var constants = require('./src/constants.js');
var traceUtil = require('./src/util.js');
var TraceApi = require('./src/trace-api.js');
var pluginLoader = require('./src/trace-plugin-loader.js');
var modulesLoadedBeforeTrace = [];
for (var i = 0; i < filesLoadedBeforeTrace.length; i++) {
var moduleName = traceUtil.packageNameFromPath(filesLoadedBeforeTrace[i]);
if (moduleName && moduleName !== 'vxx' &&
modulesLoadedBeforeTrace.indexOf(moduleName) === -1) {
modulesLoadedBeforeTrace.push(moduleName);
}
}
var onUncaughtExceptionValues = ['ignore', 'flush', 'flushAndExit'];
var initConfig = function(projectConfig) {
var config = extend(true, {}, require('./config.js'), projectConfig);
if (config.maximumLabelValueSize > constants.TRACE_SERVICE_LABEL_VALUE_LIMIT) {
config.maximumLabelValueSize = constants.TRACE_SERVICE_LABEL_VALUE_LIMIT;
}
return config;
};
var traceApi = new TraceApi('Custom Span API');
var agent;
/**
* Start the Trace agent that will make your application available for
* tracing with Stackdriver Trace.
*
* @param {object=} config - Trace configuration
*
* @resource [Introductory video]{@link
* https://www.youtube.com/watch?v=NCFDqeo7AeY}
*
* @example
* trace.start();
*/
function start(projectConfig) {
var config = initConfig(projectConfig);
if (traceApi.isActive() && !config.forceNewAgent_) { // already started.
throw new Error('Cannot call start on an already started agent.');
}
if (!config.enabled) {
return traceApi;
}
if (config.logLevel < 0) {
config.logLevel = 0;
} else if (config.logLevel >= Logger.LEVELS.length) {
config.logLevel = Logger.LEVELS.length - 1;
}
var logger = new Logger(config.logLevel, config.logger === 'debug' ? 'vxx' : undefined);
if (onUncaughtExceptionValues.indexOf(config.onUncaughtException) === -1) {
logger.error('The value of onUncaughtException should be one of ',
onUncaughtExceptionValues);
throw new Error('Invalid value for onUncaughtException configuration.');
}
var headers = {};
headers[constants.TRACE_AGENT_REQUEST_HEADER] = 1;
if (modulesLoadedBeforeTrace.length > 0) {
logger.warn('Tracing might not work as the following modules ' +
'were loaded before the trace agent was initialized: ' +
JSON.stringify(modulesLoadedBeforeTrace));
}
agent = require('./src/trace-agent.js').get(config, logger);
traceApi.enable_(agent);
pluginLoader.activate(agent);
traceApi.getCls = function() {
return agent.getCls();
};
traceApi.getBus = function() {
return agent.traceWriter;
};
return traceApi;
}
function get() {
return traceApi;
}
global._google_trace_agent = traceApi;
module.exports = {
start: start,
get: get
};
// If the module was --require'd from the command line, start the agent.
if (module.parent && module.parent.id === 'internal/preload') {
module.exports.start();
}