UNPKG

ca-apm-probe

Version:

CA APM Node.js Agent monitors real-time health and performance of Node.js applications

100 lines (81 loc) 3.51 kB
/** * Copyright (c) 2015 CA. All rights reserved. * * This software and all information contained therein is confidential and proprietary and * shall not be duplicated, used, disclosed or disseminated in any way except as authorized * by the applicable license agreement, without the express written permission of CA. All * authorized reproductions must be marked with this language. * * EXCEPT AS SET FORTH IN THE APPLICABLE LICENSE AGREEMENT, TO THE EXTENT * PERMITTED BY APPLICABLE LAW, CA PROVIDES THIS SOFTWARE WITHOUT WARRANTY * OF ANY KIND, INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL CA BE * LIABLE TO THE END USER OR ANY THIRD PARTY FOR ANY LOSS OR DAMAGE, DIRECT OR * INDIRECT, FROM THE USE OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, LOST * PROFITS, BUSINESS INTERRUPTION, GOODWILL, OR LOST DATA, EVEN IF CA IS * EXPRESSLY ADVISED OF SUCH LOSS OR DAMAGE. */ var config = require('../config.json'); var path = require('path'); var util = require('./utils/common-utils'); var probeName = null; var buffer = {info: [], debug: []}; function initialize(options){ buffer.debug.push("options available before resolving ProbeName: " + JSON.stringify(options)); var probeName = []; // Step 1: agent name from env variable probeName[0] = process.env.CA_APM_PROBENAME || process.env.APM_ENV_PROBENAME; buffer.debug.push("Step 1: env= "+probeName[0]); // Step 2: agent name from user specified env variable var key = config.probeNameEnvKey; probeName[1] = process.env[key]; buffer.debug.push("Step 2: env= "+probeName[1]); // Step 3: agent name from application code probeName[2] = options.probeName; buffer.debug.push("Step 3: code= "+probeName[2]); // Step 4: agent name from ca-apm-probe config.json probeName[3] = util.resolveEnv(config.probeName); buffer.debug.push("Step 4: probe config.json= "+ probeName[3]); // Step 5: agent name from application mainModule package.json, if it exists var appScriptFilename = process.mainModule.filename; if (options.appScriptName) { appScriptFilename = options.appScriptName; } var appPackage; try { appPackage = require(path.join(path.dirname(appScriptFilename),'package.json')); } catch (error) { } if (appPackage) { probeName[4] = appPackage.name; if(appPackage.dependencies) { var appVersions = JSON.stringify(appPackage.dependencies); options.appVersions = appVersions; } } buffer.debug.push("Step 5: app package.json= "+ probeName[4]); // Step 6: agent name from application start script probeName[5] = path.basename(appScriptFilename, '.js'); buffer.debug.push("Step 6: script= " + probeName[5]); // Step 7: agent name from application start dir probeName[6] = path.dirname(appScriptFilename).split(path.sep).slice(-1)[0]; buffer.debug.push("Step 7: dir= " + probeName[6]); for (var i = 0; i < probeName.length; i++) { if (probeName[i] && probeName[i].length > 0 && probeName[i] != 'index') { buffer.info.push("ProbeName Detection choosing the name: "+ probeName[i]); return probeName[i]; } }; // Final hardcoded fallback, we should never get here. return 'NodeApplication'; } function setProbeName(probeNameArg) { probeName = probeNameArg; } function getProbeName() { return probeName; } function getBuffer() { return buffer; } module.exports = {initialize: initialize, setProbeName: setProbeName, getProbeName: getProbeName, getBuffer: getBuffer};