UNPKG

29.5 kBJavaScriptView Raw
1/**
2 * Created by bala on 22/7/15.
3 */
4var PropertiesReader = require('properties-reader');
5var fs = require('fs');
6var path = require('path');
7var util = require('./util');
8var big_integer = require('./utils/BigInteger');
9var cluster = require('cluster');
10var StringBuffer = require('./flowpath/StringBuffer').StringBuffer;
11var NDCServerConfig = require('./NDCServerConfig');
12var defaultTier = 'NodeJS';
13var defaultServer = 'Nsecom';
14var defaultInstance = 'Nsecom';
15var defaultNdcPort = '7892';
16var defaultNdcHost = 'localhost';
17//This variable used for enable/disable of dynamic threshold value for BTs
18var NDHttpReqRespCaptureSettings = require('./HttpHeader/NDHttpReqRespCaptureSettings');
19var cavNdSessionManager = require('./HttpHeader/cavNdSessionManager');
20var os = require('os');
21function AgentSetting() {}
22
23var ENCODED_VAL_COMMA = ",";
24var ENCODED_VAL_NEW_LINE = "
";
25var ENCODED_VAL_SINGLE_QUOTE = "'";
26var ENCODED_VAL_DOUBLE_QUOTE = """;
27var ENCODED_VAL_BACKSLASH = "\";
28var ENCODED_VAL_PIPE_SYMBOL = "|";
29var ENCODED_VAL_DOT_SYMBOL = ".";
30var ENCODED_VAL_COLON_SYMBOL = ":";
31var ENCODED_VAL_TO_SPACE = " ";
32
33AgentSetting.appID=0;
34AgentSetting.serverID=0;
35AgentSetting.tierID=0;
36AgentSetting.ndVectorSeparator='<';
37AgentSetting.status='' //Current status of message send by NDC like "nd_control_req:action=start_instrumentation;status=running;"
38AgentSetting.nodejsCpuProfilingTime = 10000
39AgentSetting.vectorPrefix = '';
40AgentSetting.vectorPrefixID ='';
41AgentSetting.vectorPrefixForNodeMonitors='';
42AgentSetting.currentTestRun= 0 ;
43AgentSetting.enableWraping = false; //Wrapt instrumented code with try catch, default is disabled because it impacts on performance
44AgentSetting.previousTestRun= 0 ;
45AgentSetting.isTestRunning=false;
46AgentSetting.cavEpochDiff=0;
47AgentSetting.cavEpochDiffInMills = 1388534400000 ;
48AgentSetting.continousRunningTest=false; //Flag to know continous test is running or not
49AgentSetting.correlationIDHeader='';
50AgentSetting.diffTimeFromNDC = 0;
51AgentSetting.bciInstrSessionPct ;
52AgentSetting.ndSettingFile = "NA" ;
53AgentSetting.clusterMode = false;
54AgentSetting.maxCharInSeqBlob = 600; //maximum metods to be process in a sequesce blob (A part of request)
55AgentSetting.bciMaxNonServiceMethodsPerFP = 5000; //maximum metods to be process in a flowpath (A complete request)
56AgentSetting.enableForcedFPChain=1 //Enable Forced Flowpath Chain with modes 0- disable, 1- enable to not discard any child fp, 2- enable not to discard and also complete child flowpaths
57AgentSetting.bciInstrSessionPct = 0;
58AgentSetting.enableBTMonitor = 1;
59AgentSetting.isBackendMonitorEnabled = true;
60AgentSetting.startInstrResponse = false //Flag to check start_instrumentation reply is sent or not
61AgentSetting.startInstrResTimeout = 60000
62AgentSetting.runTimeChange = false;
63AgentSetting.enableMultiInstMode=false; //This keyword is use to capture data when app is running in cluster mode and autoscaling is disable
64var envSettinfFile ;
65
66var pathOfSettingFile = path.join('/opt/cavisson/netdiagnostics/ndsettings.conf');
67var settingFileAccProject = path.resolve(path.join(__dirname,'/../../../ndsettings.conf'));
68var builtinCoreModules = [ 'assert','buffer','child_process','cluster','crypto','dgram','dns','domain','events','fs','http','https','net','os','path','punycode','querystring', 'readline','stream','string_decoder','tls','tty','url','util','vm','zlib','smalloc' ];
69AgentSetting.settingFileMode = "exclusive";
70AgentSetting.normalModulesMap = {};
71AgentSetting.monitorName = undefined ;
72AgentSetting.ndMonitorInterval = 60000;
73
74AgentSetting.RECORD_SEPRATOR_COMMA = ",";
75AgentSetting.RECORD_SEPRATOR_SPACE = " ";
76AgentSetting.THREAD_NAME = "Event Dispatch Thread";
77AgentSetting.THREAD_STATE = "Running";
78AgentSetting.THREAD_PRIORITY = "0";
79AgentSetting.FUTURE_FIELDS = "0,0,0,0,0,";
80AgentSetting.excludeMethodOnRespTime = 0; //Keyword for method exclusion o basis of method resp time
81AgentSetting.enableStateMC = true;
82AgentSetting.dynamicThreshold = 0;
83AgentSetting.enable_eventLoop_monitor = 1 //keyword to enable Event loop monitor
84AgentSetting.enable_garbage_profiler = 1 //keyword to enable gc profiler
85AgentSetting.BCILoggingMode = 'FILE' //Mode for logger o/p - FILE, CONSOLE_MODE, BOTH
86AgentSetting.logLevel = 'debug';
87AgentSetting.agentMode = 3 ;
88AgentSetting.httpReqCapturingSettings = new NDHttpReqRespCaptureSettings(); //Settings object for request
89AgentSetting.httpResCapturingSettings = new NDHttpReqRespCaptureSettings(); //Settings object for response
90AgentSetting.invalidFileFormatMsg = true;
91AgentSetting.maxBTCount = 256 //Max number of business transaction to be served, else will be matched to Others category
92AgentSetting.bciDataBufferMaxCount = 512;
93AgentSetting.bciDataBufferMaxSize = 32768;
94AgentSetting.ASDataBufferSize = 64000;
95AgentSetting.ASDataBufferMaxCount = 256;
96AgentSetting.ndDataBufferSize=16777216;
97AgentSetting.ndASBufferSize=16384000;
98AgentSetting.isAsyncEventMonitorEnable = false; //For Async Event Monitor
99AgentSetting.enableUpdateLogMsgForNF=0;
100AgentSetting.mapForWinstonLogMeths = {};
101AgentSetting.mapForConsoleMeths = {};
102
103//keywords for forcefully dump FPs
104AgentSetting.dumpFPForcefullyTimer = undefined;
105AgentSetting.FPMaxAllowedAgeInMillis = -1;
106AgentSetting.forceFPDumpInterval = 90000;
107AgentSetting.forceFPThresholdValue=20;
108
109//All tracing keywords
110AgentSetting.enableBTMonitorTrace = 0;
111AgentSetting.enableBackendMonTrace= 0;
112AgentSetting.ndMethodMonTraceLevel= 0;
113AgentSetting.enableBciDebug= 0;
114AgentSetting.captureHttpTraceLevel = 0;
115AgentSetting.enableNDSession = new cavNdSessionManager();
116AgentSetting.nodeServerMonitor = 0;
117AgentSetting.healthCheckInterval = 60000; //At each Interval heartBeat will send
118AgentSetting.healthCheckThreshold= 20 //If NDC is not repling after n'th time then agent will disconnect connction
119AgentSetting.reconnectTimer = undefined; //Timer that run to send health check message
120AgentSetting.isHeapDumpInProgress = false;
121AgentSetting.autoSensorConnHandler =undefined
122AgentSetting.dataConnHandler =undefined
123AgentSetting.lastModifiedSize = undefined;
124AgentSetting.lastModifiedTime = undefined;
125AgentSetting.corelateEventCallback = 0;
126AgentSetting.wrapAsyncApi = false;
127AgentSetting.filterHSEvents = undefined;
128AgentSetting.enableHSLongStack = 0;
129AgentSetting.isdumpBtMetaData = false;
130AgentSetting.enableHSLongStackDepth = 5;
131AgentSetting.isClusterMode = 0; //cluster Mode Feature of NDC.
132AgentSetting.requestType = 1;
133AgentSetting.lastConnTimeStamp = 0;
134AgentSetting.connDuration = 0;
135AgentSetting.lastConnHost = '';
136AgentSetting.lastConnPort = '';
137AgentSetting.ndcHeartBeatThreshold = 15 * 60 * 1000 ;
138AgentSetting.lastHeartBeatReceived = new Date().getTime();
139AgentSetting.isAppNameSame = false;
140AgentSetting.enableDumpAsyncId = 0;
141AgentSetting.tDigestPercentileBT = {enable:0,aggInterval:'5m',sMode:2,delta:100,k:100,groupId:10793,graphId:1};
142AgentSetting.tDigestPercentileIP = {enable:0,aggInterval:'5m',sMode:2,delta:100,k:100,groupId:10794,graphId:1};
143
144
145AgentSetting.isCluster = function(){
146 var instance ;
147
148 var clusterPath = '/tmp/cavisson/cluster';
149 if(!cluster.isMaster)
150 {
151 if(fs.existsSync(clusterPath)) {
152 fs.readdir(clusterPath, function (err, files) {
153 try {
154 if (err)util.logger.warn(err);
155 files.forEach(function (file) {
156
157 var index = file.split('.')[0];
158
159 var data = fs.readFileSync(clusterPath + '/' + file).toString();
160
161 if (data == process.pid) {
162 instance = AgentSetting.instance
163 if (instance.indexOf('_') != -1) {
164 instance = instance.split('_')[0];
165 }
166 instance = instance + '_' + index;
167
168 AgentSetting.instance = instance;
169 }
170 });
171 }catch(err){util.logger.warn(err)}
172 });
173 }
174 }
175}
176
177AgentSetting.initAllMap = function(args)
178{
179 try {
180 AgentSetting.btrecordMap = new Object();
181 AgentSetting.categoryMap = new Object();
182 AgentSetting.backendRecordMap = new Object();
183 AgentSetting.instrumentationMap = {};
184 AgentSetting.coreInstrumentationMap= {};
185 //AgentSetting.backendMetaMap = new Object();
186 AgentSetting.flowMap = new Object();
187 //AgentSetting.queryMap = new Object(); //Query map for dumping meta query record (23)
188
189 //AgentSetting.methodId = 0;
190 AgentSetting.backendID = 0;
191 AgentSetting.seqId = 0;
192 //AgentSetting.queryId = 6; //Every query has unique id & used to dump quey meta record(23) , starting from 6 because 1-6 id are reserved
193
194 AgentSetting.BCILoggingMode = args.BCILoggingMode;
195 AgentSetting.logLevel = args.logLevel;
196 if(args.agentMode >=0 && args.agentMode <= 3)
197 AgentSetting.agentMode = args.agentMode
198 }
199 catch(err){util.logger.warn(err)}
200
201}
202
203AgentSetting.generateFPMask = function()
204{
205 //For creating FP_ID
206 // "0x4000000000000000 +((0 & 0x0F) << 56)+ ((0 & 0x03FF) << 46)";
207 try {
208 var FP_shifting_56 = (big_integer(big_integer('0x0F',16).and('0')).shiftLeft('56')).toString();
209 var FP_shifting_46 = (big_integer(big_integer('0x03FF',16).and('0')).shiftLeft('46')).toString();
210
211 var FP_data = (big_integer(FP_shifting_56).add(FP_shifting_46)).toString();
212 var flowPathInstanceInitial = big_integer('4000000000000000',16).add(FP_data);
213
214 AgentSetting.flowPathInstanceInitialID = flowPathInstanceInitial.toString();
215 AgentSetting.timeStampMask = parseInt('0x3FFFFFFFFF',16);
216 AgentSetting.seqNoDigits = 8;
217 AgentSetting.seqNumMask = parseInt('0xFF', 16);
218
219 }catch(err){util.logger.warn(err)}
220
221}
222
223AgentSetting.setDefault = function () {
224 AgentSetting.tier = defaultTier;
225 AgentSetting.server = defaultServer;
226 AgentSetting.instance = defaultInstance;
227 AgentSetting.ndcPort = defaultNdcPort;
228 AgentSetting.ndcHost = defaultNdcHost;
229
230 //AgentSetting.enable_heapdump = 0;
231 //AgentSetting.enable_cpu_profiling = 0
232}
233
234AgentSetting.parseInstrProfile = function(data){
235 try {
236 var instrData = JSON.parse(data);
237
238 for (var i in instrData) {
239 AgentSetting.instrumentationMap[instrData[i].modulename] = instrData[i];
240 for (j in builtinCoreModules) {
241 if (instrData[i].modulename === builtinCoreModules[j]) {
242 delete AgentSetting.instrumentationMap[instrData[i].modulename];
243 AgentSetting.coreInstrumentationMap[instrData[i].modulename] = instrData[i];
244 }
245 }
246 }
247 }
248 catch(err){
249 console.log(err)
250 }
251}
252
253//This method is checking ,ndSetting file has been changed or not, if changed , recreate the connection
254AgentSetting.checkNDSettingFile = function()
255{
256 util.logger.info("Checking setting file is changed or not .");
257 try {
258
259 //AgentSetting.isCluster(); //This code is commenting because now we have autoscaling feature .
260 var stat = fs.statSync(AgentSetting.ndSettingFile);
261
262 if ((stat.size === AgentSetting.lastModifiedSize) && (stat.mtime.toString() === AgentSetting.lastModifiedTime.toString())) {
263 util.logger.info(AgentSetting.currentTestRun + " | Size is same : " + stat.size + "==" + AgentSetting.lastModifiedSize + " , " + stat.mtime + "==" + AgentSetting.lastModifiedTime);
264 return;
265 }
266 else {
267 util.logger.info(AgentSetting.currentTestRun + " | ndSetting File is changed , Going to read ." + stat.size + "==" + AgentSetting.lastModifiedSize + " , " + stat.mtime + "==" + AgentSetting.lastModifiedTime);
268 AgentSetting.lastModifiedSize = stat.size
269 AgentSetting.lastModifiedTime = stat.mtime
270 util.logger.info(AgentSetting.currentTestRun+" | reading settings from : "+AgentSetting.ndSettingFile+" . Size : "+stat.size+" , lmd : "+stat.mtime);
271 AgentSetting.getData(); //getting data for making connection to ndc
272 }
273 }catch(err){util.logger.warn(err)};
274};
275
276AgentSetting.checkNDHome = function(){
277 AgentSetting.ndHome = process.env.ndHome ? process.env.ndHome : undefined;
278 util.logger.info(AgentSetting.currentTestRun+" | NDHome is : "+AgentSetting.ndHome)
279 if(AgentSetting.ndHome !== undefined ) {
280 envSettinfFile = path.join(AgentSetting.ndHome, '/ndsettings.conf');
281 }
282 return envSettinfFile;
283
284}
285
286AgentSetting.checkNDSettingsInEnv = function(){
287 if(process.env.CAV_NDC_HOST != undefined && process.env.CAV_NDC_PORT != undefined && process.env.CAV_TIER != undefined ){
288 AgentSetting.ndcHost = process.env.CAV_NDC_HOST;
289 AgentSetting.ndcPort = process.env.CAV_NDC_PORT;
290 AgentSetting.tier = process.env.CAV_TIER;
291 if((AgentSetting.tier == undefined) || (AgentSetting.tier == 0) )
292 AgentSetting.tier = "";
293
294 util.logger.info(AgentSetting.currentTestRun + " | Reading Settings from environment ");
295 util.logger.info(AgentSetting.currentTestRun + " | NDCHost is : " + AgentSetting.ndcHost);
296 util.logger.info(AgentSetting.currentTestRun + " | NDCPort is : " + AgentSetting.ndcPort);
297 util.logger.info(AgentSetting.currentTestRun + " | tier is : " + AgentSetting.tier);
298 return true
299 }
300 else
301 return false
302}
303
304AgentSetting.readSettingFile = function()
305{
306 try {
307 if(fs.existsSync(settingFileAccProject) && util.canWrite(settingFileAccProject)){
308 AgentSetting.ndSettingFile = settingFileAccProject;
309 util.logger.info(AgentSetting.currentTestRun+" | path acc to project : "+AgentSetting.ndSettingFile);
310 this.checkNDSettingFile();
311 }
312 else if (fs.existsSync(pathOfSettingFile) && util.canWrite(pathOfSettingFile)) {
313 AgentSetting.ndSettingFile = pathOfSettingFile;
314 util.logger.info(AgentSetting.currentTestRun+" | NDHome is not set , so taking default path: "+AgentSetting.ndSettingFile);
315 this.checkNDSettingFile();
316 }
317 else if(fs.existsSync(this.checkNDHome()) && util.canWrite(envSettinfFile)) {
318 AgentSetting.ndSettingFile = envSettinfFile;
319 util.logger.info(AgentSetting.currentTestRun+" | NDHome is set : "+AgentSetting.ndHome+" ,and file path is : "+AgentSetting.ndSettingFile);
320 this.checkNDSettingFile();
321 }
322 else if(this.checkNDSettingsInEnv()) {
323 if((AgentSetting.ndcHost == null) || (AgentSetting.ndcHost == undefined) || (AgentSetting.ndcHost == 0)) {
324 AgentSetting.ndcHost = '';
325 util.logger.error(AgentSetting.currentTestRun + " | ndcHost is not present in ndsetting file , so setting it to default ");
326 }
327 if((AgentSetting.ndcPort == null) || (AgentSetting.ndcPort == undefined) || (AgentSetting.ndcPort == 0)) {
328 AgentSetting.ndcPort = defaultNdcPort;
329 util.logger.error(AgentSetting.currentTestRun + " | ndcPort is not present in ndsetting file , so setting it to default" );
330 }
331 NDCServerConfig.addServers([{host:AgentSetting.ndcHost,port:AgentSetting.ndcPort,type:1}])
332 }
333 else{
334 util.logger.error(AgentSetting.currentTestRun+ " | No NdSetting file is prsent on server");
335 AgentSetting.ndSettingFile = AgentSetting.lastModifiedSize = AgentSetting.lastModifiedTime = undefined;
336 return;
337 }
338 }
339 catch(err)
340 {util.logger.warn(err)}
341};
342
343AgentSetting.getData = function () {
344 try {
345 var filename= AgentSetting.ndSettingFile
346
347 AgentSetting.isToInstrument = false; // It will true when control connection has made.
348 AgentSetting.isRequested = false; //check only for http requests
349 AgentSetting.bciStartUpTime = new Date().getTime();
350
351 var properties = null;
352 try {
353 properties = PropertiesReader(filename);
354 }
355 catch (err) {
356 util.logger.warn(AgentSetting.currentTestRun + " | Cannot read propery file due to : " + err);
357 return ;
358 }
359 var tier = properties.get('tier');
360 var server = properties.get('server');
361 var instance = properties.get('instance');
362 var ndcPort = properties.get('ndcPort');
363 var ndcHost = properties.get('ndcHost');
364 var backupNdcHostName = properties.get('backupNdcHostName');
365 var backupNdcPort = properties.get('backupNdcPort');
366 var agentMode = properties.get('agentMode');
367 var enableStateMC = properties.get('enableStateMC')
368 var excludeMethodOnRespTime = properties.get('excludeMethodOnRespTime');
369 var dynamicThreshold = properties.get('dynamicSlowVslowThreshold');
370 var enableWraping = properties.get('enableWraping');
371 AgentSetting.enableWraping = (enableWraping === true) ? true : false ;
372 var corelateEventCallback = properties.get('corelateEventCallback');
373 var enableHSLongStackDepth = properties.get('enableHSLongStackDepth');
374 AgentSetting.setCorelateEventCBValue(corelateEventCallback);
375 var filterHSEvents = properties.get('filterHSEvents');
376 var protocols = properties.get('NDC_COMM_PROTOCOL'); //All supported protocols passed in ndsetting (ws/wss/tcp)
377 var Mode = properties.get('Mode');
378 AgentSetting.ndcPort = ndcPort;
379 AgentSetting.ndcHost = ndcHost;
380
381 if(Mode != undefined && Mode != null && Mode != 0){
382 if(Mode.toUpperCase() == 'SHARED'){
383 AgentSetting.clusterMode = true ;
384 AgentSetting.settingFileMode = Mode ;
385 }
386 }
387
388 if((AgentSetting.ndcHost == null) || (AgentSetting.ndcHost == undefined) || (AgentSetting.ndcHost == 0)) {
389 AgentSetting.ndcHost = '';
390 util.logger.error(AgentSetting.currentTestRun + " | ndcHost is not present in ndsetting file , so setting it to default : " + filename);
391 }
392 if((AgentSetting.ndcPort == null) || (AgentSetting.ndcPort == undefined) || (AgentSetting.ndcPort == 0)) {
393 AgentSetting.ndcPort = defaultNdcPort;
394 util.logger.error(AgentSetting.currentTestRun + " | ndcPort is not present in ndsetting file , so setting it to default: " + filename);
395 }
396 NDCServerConfig.addServers([{host:AgentSetting.ndcHost,port:AgentSetting.ndcPort,type:1,protocols : protocols},{host:backupNdcHostName,port:backupNdcPort,type:0,protocols : protocols}])
397
398 AgentSetting.enableMultiInstMode=properties.get('enableMultiInstMode');
399 if(enableHSLongStackDepth !== undefined && enableHSLongStackDepth !== null && enableHSLongStackDepth > 0){
400 AgentSetting.enableHSLongStackDepth = enableHSLongStackDepth
401 }
402 if(agentMode !== undefined && agentMode !== null && agentMode >= 0 && agentMode <=3 ){
403 AgentSetting.agentMode = agentMode;
404 }
405 if(filterHSEvents != undefined && filterHSEvents != null && filterHSEvents != 0)
406 AgentSetting.filterHSEvents = filterHSEvents;
407
408 AgentSetting.dynamicThreshold = dynamicThreshold;
409 if((AgentSetting.dynamicThreshold == null) || (AgentSetting.dynamicThreshold == undefined) || (AgentSetting.dynamicThreshold == 0)){
410 AgentSetting.dynamicThreshold = 0;
411 }
412 if((AgentSetting.enableMultiInstMode == null) || (AgentSetting.enableMultiInstMode == undefined) || (AgentSetting.enableMultiInstMode == 0)){
413 AgentSetting.enableMultiInstMode = false;
414 }
415 AgentSetting.enableStateMC = enableStateMC
416 if(AgentSetting.enableStateMC == null || AgentSetting.enableStateMC == undefined || ( AgentSetting.enableStateMC === 1)){
417 AgentSetting.enableStateMC = true;
418 }
419 AgentSetting.excludeMethodOnRespTime = excludeMethodOnRespTime;
420 if(AgentSetting.excludeMethodOnRespTime == null || AgentSetting.excludeMethodOnRespTime == undefined){
421 AgentSetting.excludeMethodOnRespTime = 0
422 }
423 AgentSetting.backupNdcHostName = backupNdcHostName;
424 AgentSetting.backupNdcPort = backupNdcPort;
425
426
427 if(AgentSetting.settingFileMode.toUpperCase() == "SHARED"){
428 if(!AgentSetting.tier)
429 AgentSetting.tier =tier;
430 if(!AgentSetting.server)
431 AgentSetting.server =server;
432 if(!AgentSetting.instance)
433 AgentSetting.instance = instance;
434 }
435 else{
436 AgentSetting.tier = tier;
437 AgentSetting.server = server;
438 AgentSetting.instance = instance;
439 }
440
441 if((AgentSetting.tier == null) || (AgentSetting.tier == 0) )
442 AgentSetting.tier = "";
443 if((AgentSetting.server == null) || (AgentSetting.server == 0) )
444 AgentSetting.server = os.hostname();
445 if((AgentSetting.instance == null) || (AgentSetting.instance == 0) )
446 AgentSetting.instance = "";
447
448 //AgentSetting.enable_heapdump = properties.get('heapDump');
449 //AgentSetting.enable_cpu_profiling = properties.get('cpuProfiling');
450 AgentSetting.enable_eventLoop_monitor = properties.get('eventLoopMonitor');
451 AgentSetting.enable_garbage_profiler = properties.get('gcProfiler');
452
453 util.logger.info(AgentSetting.currentTestRun + " | Tier is : " + AgentSetting.tier);
454 util.logger.info(AgentSetting.currentTestRun + " | Server is : " + AgentSetting.server);
455 util.logger.info(AgentSetting.currentTestRun + " | Instance is : " + AgentSetting.instance);
456 util.logger.info(AgentSetting.currentTestRun + " | NDCHost is : " + AgentSetting.ndcHost);
457 util.logger.info(AgentSetting.currentTestRun + " | NDCPort is : " + AgentSetting.ndcPort);
458 util.logger.info(AgentSetting.currentTestRun + " | eventLoopMonitor : " + AgentSetting.enable_eventLoop_monitor);
459 util.logger.info(AgentSetting.currentTestRun + " | gcProfiler : " + AgentSetting.enable_garbage_profiler);
460 util.logger.info(AgentSetting.currentTestRun + " | Mode : " + AgentSetting.settingFileMode);
461 util.logger.info(AgentSetting.currentTestRun + " | EnableStateMC : ", AgentSetting.enableStateMC );
462 util.logger.info(AgentSetting.currentTestRun + " | dynamicSlowVslowThreshold : " + AgentSetting.dynamicThreshold);
463 util.logger.info(AgentSetting.currentTestRun + " | ExcludeMethodOnRespTime : " + AgentSetting.excludeMethodOnRespTime);
464 util.logger.info(AgentSetting.currentTestRun + " | agentMode : " + AgentSetting.agentMode);
465 util.logger.info(AgentSetting.currentTestRun + " | backupNdcHostName : " + AgentSetting.backupNdcHostName);
466 util.logger.info(AgentSetting.currentTestRun + " | backupNdcPort : " + AgentSetting.backupNdcPort);
467 util.logger.info(AgentSetting.currentTestRun + " | corelateEventCallback : " + corelateEventCallback);
468 util.logger.info(AgentSetting.currentTestRun + " | enableHSLongStackDepth : " + enableHSLongStackDepth);
469 util.logger.info(AgentSetting.currentTestRun + " | filterHSEvents : " + AgentSetting.filterHSEvents);
470 }catch(err){util.logger.warn(err)}
471};
472
473AgentSetting.setCorelateEventCBValue = function(value){
474 if((value == null) || (value == undefined) || (value == 0)){
475 AgentSetting.corelateEventCallback = 0;
476 }
477 else {
478 if(value.toString().indexOf('%') > -1) {
479 var tmp = value.toString().split('%')
480 if (tmp[0] >= 0) {
481 AgentSetting.corelateEventCallback = tmp[0]
482 AgentSetting.wrapAsyncApi = tmp[1] > 0 ? true : false
483 }
484 }else{
485 AgentSetting.corelateEventCallback = value;
486 AgentSetting.wrapAsyncApi=false
487 }
488 }
489}
490
491AgentSetting.setEnableHSLongStackValue = function(value){
492
493 if(value == undefined && value == null){
494 return
495 }
496 else if(value){
497
498 var temp = value.toString().split('%')
499 if(temp.length > 2){
500 AgentSetting.enableHSLongStack = temp[0]
501 AgentSetting.enableHSLongStackDepth = temp[1]
502 AgentSetting.filterHSEvents = temp[2]
503 }
504 if(temp.length > 1){
505 AgentSetting.enableHSLongStack = temp[0]
506 AgentSetting.enableHSLongStackDepth =temp[1]
507 }
508 if(temp.length > 0){
509 AgentSetting.enableHSLongStack = temp[0]
510 }
511 }
512 util.logger.info("0 | EnableHSLongStack : "+AgentSetting.enableHSLongStack ,AgentSetting.enableHSLongStackDepth ,AgentSetting.filterHSEvents);
513}
514
515AgentSetting.getBCIStartUpTime = function () {
516 return AgentSetting.bciStartUpTime;
517};
518
519AgentSetting.getTierName = function () {
520 return AgentSetting.tier;
521};
522
523AgentSetting.getServerName = function () {
524 return AgentSetting.server;
525};
526
527AgentSetting.getInstance = function () {
528 return AgentSetting.instance;
529};
530
531AgentSetting.getNDCHost = function () {
532 return AgentSetting.ndcHost;
533};
534AgentSetting.getAgentInfo = function () {
535 util.logger.info(AgentSetting.currentTestRun, "| RunTime change for Agent info------>")
536 var arr =[]
537 for(var i in AgentSetting) {
538 arr.push(i+'='+AgentSetting[i])
539 }
540 util.logger.info(arr)
541};
542AgentSetting.getPort = function () {
543
544 var port = AgentSetting.ndcPort;
545
546 try {
547 return parseInt(port);
548 }
549 catch (err) {
550 return defaultNdcPort;
551 }
552
553};
554
555AgentSetting.getFlowPathIdFromRequest= function(){
556 var getNamespace = require('./utils/continuation-local-storage').getNamespace,
557 namespace = getNamespace('cavissonNamespace');
558 if(!namespace)
559 return ;
560
561 var requestedObj = namespace.get('httpReq');
562 return requestedObj;
563
564};
565var localStorage = require('./utils/continuation-local-storage');
566AgentSetting.isInstrumentTx = function(context){
567 return (localStorage && localStorage.getNamespace('cavissonNamespace') && (context=localStorage.getNamespace('cavissonNamespace').get('httpReq'))&&
568 localStorage.getNamespace('cavissonNamespace').get('httpReq').cavIncludeFp);
569}
570
571
572AgentSetting.getContextObj = function () {
573 //var localStorage = require('./utils/continuation-local-storage');
574 return localStorage && localStorage.getNamespace('cavissonNamespace') && localStorage.getNamespace('cavissonNamespace').get('httpReq');
575}
576
577AgentSetting.encodeURI = function(sb,command){
578 var len = command.length;
579 for(var i=0; i<len; i++){
580 var c = command.charAt(i);
581 switch (c){
582 case ',':
583 sb.add(ENCODED_VAL_COMMA);
584 break;
585 case '\n':
586 sb.add(ENCODED_VAL_NEW_LINE);
587 break;
588 case '\'':
589 sb.add(ENCODED_VAL_SINGLE_QUOTE);
590 break;
591 case '\"':
592 sb.add(ENCODED_VAL_DOUBLE_QUOTE);
593 break;
594 case '\\':
595 sb.add(ENCODED_VAL_BACKSLASH);
596 break;
597 case '|':
598 sb.add(ENCODED_VAL_PIPE_SYMBOL);
599 break;
600 default:
601 sb.add(c);
602 break;
603 }
604 }
605 return sb ;
606}
607
608
609
610AgentSetting.checkforCorrelationIdInReqRes = function (reqOrResObj, flowpathObj) {
611 try {
612 if (reqOrResObj) {
613 var correlationId = (reqOrResObj.headers && (reqOrResObj.headers[AgentSetting.correlationIDHeader.toLowerCase()] ||
614 reqOrResObj.headers[AgentSetting.correlationIDHeader]) || reqOrResObj.getHeader &&
615 (reqOrResObj.getHeader(AgentSetting.correlationIDHeader.toLowerCase()) ||
616 reqOrResObj.getHeader(AgentSetting.correlationIDHeader)));
617
618 if (correlationId && flowpathObj) {
619 var sb = new StringBuffer();
620 flowpathObj.correlationIDHeader = AgentSetting.encodeURI(sb, correlationId).toString()
621 sb.clear();
622 }
623 }
624 }catch(err){util.logger.warn(AgentSetting.currentTestRun, "| Error occured when getting Co-rrelation id from Request or Response.")}
625}
626
627AgentSetting.escapeHTMLForBackend = function(backendName){
628 try{
629 var encodedStr = []
630 for(var i in backendName){
631 var c = backendName.charAt(i)
632 switch (c){
633 case ' ':encodedStr[i] = '-'
634 break;;
635 case '\n':encodedStr[i] = '-'
636 break;
637 case '\'':encodedStr[i] = '&#039;'
638 break;
639 case '\"':encodedStr[i] = '&#034;'
640 break;
641 case '\\':encodedStr[i] = '&#092;'
642 break;
643 case '|':encodedStr[i] = '&#124;'
644 break;
645 case '.':encodedStr[i] = '&#46;'
646 break;
647 case ':':encodedStr[i] = '&#58;'
648 break;
649 default : encodedStr[i] = c
650 }
651 }
652 return encodedStr.join('');
653 }catch(e){
654 util.logger.error('Error while Encoding the Backend Name',e)
655 }
656}
657
658module.exports = AgentSetting;