UNPKG

114 kBJavaScriptView Raw
1/*
2 * Created by bala on 23/7/15.
3 */
4var agentConfReader = require("./agent-setting");
5var flowpathHandler = require("./flowpath-handler");
6var ndMetaDataRecoveryProcess = require('./metaData/ndMetaDataRecoveryProcess');
7var eventLoopMonitor = require('./event_loop_moitor/ndEventLoopMonitor.js');
8var heapGcMonitor = require('./heap_gc_monitor/ndHeapGCMonitor.js')
9var ndBTMonitor = require('./BT/ndBTMonitor.js')
10var ndBackendMonitor = require('./backend/ndBackendMonitor.js');
11var backendRecord = require('./backend/backendRecord.js');
12var ndMethodMetaData = require('./metaData/ndMethodMetaData');
13var ndSQLMetaData = require('./metaData/ndSQLMetaData');
14var ndMethodMonitor = require('./method-monitor/ndMethodMonitor.js');
15var btGlobalRule = require ('./BT/btGlobalRule.js');
16var NDHttpCaptureSettings = require('./HttpHeader/NDHttpCaptureSettings.js');
17var NDHttpConditionStats = require('./HttpHeader/NDHttpConditionStats.js');
18var NDSessionCaptureSettings = require('./HttpHeader/NDSessionCaptureSettings.js');
19var NDEntryPointManager = require('./utils/NDEntryPointManager');
20var v8_profiler = require('./v8-profiler');
21var path = require('path');
22var util = require('./util');
23var utilcore = require('util')
24var fs = require('fs');
25var btConfig = require('./BT/btConfig');
26var btManager = require('./BT/btManager.js');
27var btRuleList = require('./BT/btPatternRule.js')
28var asMangerObj = require('./autoSensor/autoSensorManager'); //Requiring ASManager object, this file controls all AS events
29var otherKeywordHandler = require('./handleOtherKeywords'); //Requiring OhandleOtherKeywords object ,handling of all keywords other than file based keyword.
30var asSettingObj = require('./autoSensor/autoSensorSetting'); //Requiring ASSetting object ,all keywords of AS are assigned in this file
31var lastHeapdumpReqTime = "";
32var instPrfParseobj = require('./instrProfileParser');
33var fileBasedKeywordGenricFile = require('./ndFileBasedKeywordHandler');
34var execSync = require('child_process').execSync;
35var os = require('os');
36var isAgentLess = 'Y'
37var big_integer = require('./utils/BigInteger');
38var ndExceptionCaptureSettings = require('./exception/ndExceptionCaptureSettings');
39var ndExceptionMonitor = require('./exception/ndExceptionMonitor');
40var serverMonitor = require('./nodeServerMonitor/serverMonitor');
41var ndAsyncMonitor = require('./eventMonitor/ndAsyncEventMonitor');
42var serverConfig = require("./NDCServerConfig");
43var NDConnectionManager = require("./NDConnectionManager");
44var autoDiscovery = require('./autoDiscovery');
45var handleFPWithForce = require("./flowpath/handleFPWithForce");
46var captureProcessCoreDump = require('./captureProcessCoreDump');
47var btPercentile = require('./Percentile/ndBTPercentileMon');
48var ipPercentile = require('./Percentile/ndIPPercentileMon');
49
50var firstResTimer = undefined;
51var isfirstResReceived = false;
52
53var startInstrProcessing = false,
54 recoonectCount = 0,
55 healthCheckReplyCount = -1,
56 healthCheckReply = false,
57 Active= 1,
58 Backup= 0,
59 connectWithoutWait=0;
60
61function MessageHandler(clientSocket) {
62 this.clientSocket = clientSocket;
63}
64
65MessageHandler.prototype.setClientSocket = function(socket,type) {
66 try{
67 this.clientSocket = socket;
68
69 startInstrProcessing = false;
70 agentConfReader.runTimeChange = false;
71 instPrfParseobj.resetInstrListOnStart();
72 metaData = {data: ''};
73 expectedFileMetaData = {size: 0};
74 pendingChunk = '';
75 clearTimeout(firstResTimer);
76 firstResTimer = undefined;
77 isfirstResReceived = false;
78
79 }catch(e){
80 util.logger.error("Setting Client Socket Error : ",e);
81 }
82}
83
84MessageHandler.prototype.sendIntialMessages = function() {
85
86 var machineType = os.type(),
87 machine,controlMessage = '';
88
89 if(machineType && machineType.indexOf('Windows') > -1){
90 var data = execSync('tasklist').toString();
91 machine = 'win';
92 if(data.indexOf('CavMonAgent') > -1)
93 isAgentLess = 'N';
94 }
95 if(machineType && machineType.indexOf('Linux') > -1) {
96 var data = execSync('ps -ef |grep cmon').toString();
97 machine = machineType+"Ex"
98 if (data.indexOf('CavMonAgent') > -1)
99 isAgentLess = 'N';
100 }
101 var processId = process.pid;
102 var version = util.netjsagentVersion;
103 var build_ver = 0;
104 try {
105 var last_index_ver = -1;
106 last_index_ver = version.lastIndexOf(".");
107 if(last_index_ver > -1){
108 var last_version_field = version.slice(last_index_ver+1,version.length);
109 if(last_version_field.length > 2) {
110 build_ver = version.slice(last_index_ver+3);
111 version = version.slice(0,parseInt(version.length-build_ver.length));
112 }
113 }
114 }catch(err){
115 util.logger.error("version error ",err);
116 }
117
118 if(agentConfReader.lastConnTimeStamp > 0)
119 agentConfReader.connDuration = new Date().getTime() - agentConfReader.lastConnTimeStamp;
120
121 controlMessage = "nd_ctrl_msg_req:appName=" + agentConfReader.getInstance() + ";ndAppServerHost="
122 + agentConfReader.getServerName() + ";tierName=" + agentConfReader.getTierName() + ";bciVersion=VERSION " + version + " BUILD " + build_ver
123 + ";bciStartTime=" + agentConfReader.getBCIStartUpTime() + ";ndHome=" + process.cwd() + ";pid=" + processId
124 + ";BCITimeStamp=" + new Date().getTime() + ";serverIp=" + this.clientSocket.getLocalHost() + ";hostName=" + os.hostname()
125 + ";isAgentLess=" + isAgentLess + ";jvmType=NodeJS" + ";javaVersion=" + process.version
126 + ";javaHome=" + process.cwd() + ";machineType=" + machine + ";agentType=NodeJS;requestType=" + agentConfReader.requestType
127 + ";lastConnectionTimeStamp="+agentConfReader.lastConnTimeStamp+";connDuration="+agentConfReader.connDuration
128 + ";connDestination="+agentConfReader.lastConnHost+":"+agentConfReader.lastConnPort+";"+"\n";
129
130 // + ";javaHome="+process.cwd()+ ";machineType="+os.type()+"Ex;"+"\n";
131 // + ";javaHome="+process.cwd()+ ";machineType="+os.type()+"Ex"+";agentType=NodeJS;"+"\n";
132
133 /* var controlMessage = "nd_ctrl_msg_req:appName=" + agentConfReader.getInstance() + ";ndAppServerHost="
134 + agentConfReader.getServerName() + ";tierName=" + agentConfReader.getTierName() + ";bciVersion=VERSION 4.1.2.Local BUILD 18"
135 + ";bciStartTime=" + agentConfReader.getBCIStartUpTime() + ";ndHome=/opt/cavisson/netdaignostic;pid=" + processId + "\n";
136 */
137
138 util.logger.info(agentConfReader.currentTestRun+" | Message send to ndc : "+controlMessage);
139
140 this.clientSocket.write(controlMessage);
141 //Timer for FirstResponse from NDC , Time: 1 min.
142 if(firstResTimer == undefined && isfirstResReceived == false){
143 util.logger.info(agentConfReader.currentTestRun+" | Starting responseTimeoutHandler timer");
144 responseTimeoutHandler(this.clientSocket);
145 }
146
147 agentConfReader.runTimeChange = false ;startInstrProcessing = false
148}
149
150function resetMonitorCounters(){
151 try {
152 util.logger.info(agentConfReader.currentTestRun + " | Reseting all monitor Counters");
153 btManager.resetMonitorCounters();
154 ndMethodMonitor.resetMonitorCounters();
155 NDHttpConditionStats.resetMonitorCounters();
156 ndExceptionMonitor.resetMonitorCounter();
157 }catch(err){util.logger.error(err)}
158}
159
160//Used to accumulate incomplete messages received in socket
161function closeDataAutoConnections(){
162 try {
163 if (agentConfReader.dataConnHandler) { //Checking is dataConnHandler
164 agentConfReader.dataConnHandler.closeConnection();
165 delete agentConfReader.dataConnHandler;
166 }
167 if (agentConfReader.autoSensorConnHandler) { //Checking is autoSensorConn
168 agentConfReader.autoSensorConnHandler.closeConnection();
169 delete agentConfReader.autoSensorConnHandler;
170 }
171 }catch(err){util.logger.error(err)}
172}
173function stopAllMonitors(){
174 try {
175 util.logger.info(agentConfReader.currentTestRun + " | Clearing all Monitors ");
176 asMangerObj.stopMonitor(); //Stopping AS monitor from dumping 53 records.
177
178 //Stop all runing monitor's intervalTimer
179 ndAsyncMonitor.stop(); //Handling Asynchronous event trace
180 heapGcMonitor.stopHeapGC();
181 eventLoopMonitor.stopEvnetloopMonitor();
182 NDHttpConditionStats.stopHttpConditioMonitor();
183 ndBackendMonitor.stopBackendMonitor();
184 ndBTMonitor.stopBTMonitor();
185 ndMethodMonitor.stopMethodMonitor();
186 ndExceptionMonitor.stopExceptionMonitor();
187 serverMonitor.stopServerMonitor();
188 btPercentile.stopMonitor();
189 ipPercentile.stopMonitor();
190 if(agentConfReader.dumpFPForcefullyTimer) {
191 clearInterval(agentConfReader.dumpFPForcefullyTimer);
192 agentConfReader.dumpFPForcefullyTimer=undefined;
193 util.logger.info(agentConfReader.currentTestRun + " | Stopping ForceFP Timer on Stop_Instrumentation..");
194 }
195 }catch(err){util.logger.error("Error in stoping Monitors : ",err)}
196}
197function handleControlConnectionReply(clientMsg,clientSocket){
198
199 isfirstResReceived = true;
200 clearTimeout(firstResTimer);
201 firstResTimer = undefined;
202
203 if(clientMsg.trim().startsWith('nd_ctrl_msg_rep:result=Ok;status=NOT_RUNNING')) {
204 stopAllMonitors()
205 closeDataAutoConnections();
206 }
207 var parseData = clientMsg.split(';')
208 var state=-1;
209 var switch_channel=false
210
211 for(var j in parseData){
212 var temp = parseData[j].split('=')[1]
213 if(parseData[j].indexOf('state') > -1) {
214 state = serverConfig.currentActiveServer.state = temp.trim()
215 util.logger.info(agentConfReader.currentTestRun,'|State for Current server is ',temp)
216 if(serverConfig.currentActiveServer.state == 0){ //If current NDC is temporary then marking it as backup and switching to backup NDC
217 state = 0;
218 serverConfig.getNextBackupServer();
219 /*if(connectWithoutWait < serverConfig.serverList.length -1){
220 ++connectWithoutWait;
221 serverConfig.currentActiveServer.connectWithoutWait = true;
222 }*/
223
224 serverConfig.isSwitchOver=1
225 }
226 }
227 else if(parseData[j].indexOf('retryPolicy') > -1){
228 var policy = temp.split('%')
229 serverConfig.retryCount = policy[0]
230 if(policy.length >1)
231 serverConfig.sleepInterval = parseInt(policy[1] * 1000)
232 if(policy.length >2)
233 agentConfReader.healthCheckThreshold = parseInt(policy[2])
234 if(policy.length >3)
235 agentConfReader.healthCheckInterval = parseInt(policy[3] * 1000)
236
237 util.logger.info(agentConfReader.currentTestRun,'|RetryCount : ',serverConfig.retryCount,',Control Connection SleepInterval',
238 serverConfig.sleepInterval,',HealthCheckThreshold',agentConfReader.healthCheckThreshold,',HealthCheckInterval',agentConfReader.healthCheckInterval)
239 }
240 else if(parseData[j].indexOf('ProtoVersion') > -1){}
241 else if(state != 0 && parseData[j].indexOf('supportedProtocols') > -1){
242 if(!temp)continue;
243 switch_channel = serverConfig.updateActiveProtocol(temp)
244 }
245 }
246 if(state == 0 || switch_channel) {
247 util.logger.info(agentConfReader.currentTestRun,'| Closing current Control Channel. DR_State:',state,',Protocl_switing:',switch_channel);
248
249 clientSocket.destroy();
250 delete clientSocket;
251 clientSocket = undefined
252 NDConnectionManager.checkProtocolAndMakeConnection()
253 }
254 else if(state == 1){ //If state is coming in CC reply & it is enable, then starting timer to send health check
255 MessageHandler.startHealthCheckTimer(clientSocket);
256 }
257 state=-1
258
259}
260
261function makeDataAutoConnection(){
262 try {
263 stopAllMonitors()
264 closeDataAutoConnections();
265
266 /* *
267 * Getting current protocol , if protocol is tcp then we will make object of 'tcp dataConenction' else 'ws'
268 * Passing curerent active server , true/false to indicate temporary data connection , current-protocol for port and protol name
269 * */
270
271 var currProto = serverConfig.getCurrentActiveProtocol()
272
273 agentConfReader.dataConnHandler = NDConnectionManager.makeDataConnection(currProto)
274
275 agentConfReader.autoSensorConnHandler = NDConnectionManager.makeAutoConection(currProto)
276
277 if (agentConfReader.dataConnHandler && agentConfReader.autoSensorConnHandler) {
278 eventLoopMonitor.handleEventLoopMonitor();
279 heapGcMonitor.handleHeapGcMonitor();
280
281 ndBackendMonitor.handleBackendMonitor();
282 ndBTMonitor.handleBtMonitor();
283 ndMethodMonitor.startMethodMonitor();
284 ndExceptionMonitor.startExceptionMonitor();
285 NDHttpConditionStats.startHttpConditioMonitor();
286 serverMonitor.handleServerMonitor();
287 ndAsyncMonitor.handleAsyncEventMonitor(); //Handling Asynchronous event trace
288 if (asSettingObj.asSampleInterval > 0) {
289 asMangerObj.startMonitor(); //Starting AS monitor for dumping 53 records on basis of reportInterval keyword
290 }
291 //Starting Force Dump FPs
292 if(agentConfReader.FPMaxAllowedAgeInMillis > 1000) {
293 agentConfReader.forceFPDumpInterval = agentConfReader.FPMaxAllowedAgeInMillis * 3;
294 util.logger.info(agentConfReader.currentTestRun,"| Interval of forcefully dumping of timed FPs has been started with interval value "+agentConfReader.forceFPDumpInterval);
295 handleFPWithForce.dumpFPForcefully(agentConfReader);
296 }
297 if(agentConfReader.tDigestPercentileBT.enable == 1){
298 btPercentile.handleMonitor()
299 }
300 if(agentConfReader.tDigestPercentileIP.enable == 1){
301 ipPercentile.handleMonitor()
302 }
303 }
304 startInstrProcessing = false, agentConfReader.runTimeChange = false;
305 instPrfParseobj.resetInstrListOnStart(); //Clearing instrumentation & File base keyword array
306 metaData = {data: ''}, expectedFileMetaData = {size: 0}
307 }catch(err){util.logger.error(err)}
308}
309function calculateDataBufferLength(bufferSize,BufferCount){
310 agentConfReader.ndDataBufferSize = parseInt(bufferSize * BufferCount)
311 util.logger.info(agentConfReader.currentTestRun,"| ndDataBufferSize : ",agentConfReader.ndDataBufferSize)
312}
313function calculateASLength(bufferSize,BufferCount){
314 agentConfReader.ndASBufferSize = parseInt(bufferSize * BufferCount)
315 util.logger.info(agentConfReader.currentTestRun,"| ndASBufferSize : ",agentConfReader.ndASBufferSize)
316}
317
318var pendingChunk = "",expectedFileMetaData ={},metaData = {data:''};
319
320MessageHandler.prototype.handleMessages = function() {
321 var clientSocket = this.clientSocket;
322 //Rest complete state on creating new control connection with default values-
323 pendingChunk = "";
324 clientSocket.handleDataEvent(function (content) {
325 var findEOL = false;
326 var data= content.toString();
327
328 agentConfReader.lastHeartBeatReceived = new Date().getTime(); // for any data , updating the value.
329
330 util.logger.info(agentConfReader.currentTestRun + " Control message received from ndc : " + data + " . FileMetaData : "+ utilcore.inspect(expectedFileMetaData, false)+" , New Line : "+ (data.toString().indexOf('\n') > -1) +" , PendingChunks : "+ (pendingChunk.length ? pendingChunk : 'No Pending Chunk') +'\n');
331
332 try {
333 if(expectedFileMetaData.size > 0) { //Parsing file content coming from NDC
334 var fileData='';
335 pendingChunk = '';
336 if(data.trim().startsWith("nd_ctrl_msg_") || data.trim().startsWith("nd_control_") ||
337 data.trim().startsWith("nd_meta_data_")) {
338 healthCheckReply = true;
339 var first = data.indexOf("\n");
340 fileData = data.substring(first+1,data.length);
341 }
342 else{
343 fileData = data;
344 }
345 MessageHandler.readFileContent(fileData,clientSocket,expectedFileMetaData.keywordName);
346 }
347 else {
348 //1. One or more complete messages received
349 //2. Multiple complete messsages received except last
350 //3. One incomplete message received
351
352 if (data.toString().indexOf('\n') > -1) {
353 findEOL = true;
354 if (pendingChunk != "") {
355 data = pendingChunk + data.toString();
356 }
357 pendingChunk = "";
358 var last = data.toString().lastIndexOf("\n");
359 if (last !== data.toString().length - 1) {
360 var second = data.toString().substring(last + 1);
361 if (second) {
362 pendingChunk = second;
363 }
364 data = data.toString().substring(0, last);
365 }
366 }
367 else {
368 pendingChunk = pendingChunk + data.toString();
369 }
370 }
371 if(findEOL) {
372 //There should not be any incomplete message reached here
373 var ndcMsg = data.toString().split('\n');
374
375 for(var i=0;i<ndcMsg.length;i++) {
376
377 if(!ndcMsg[i])
378 continue
379 else {
380 healthCheckReply = true; //If any message is coming from NDC , it means current server is alive
381 healthCheckReplyCount = 0;
382 }
383 if (ndcMsg[i].trim().length === 0) {
384 //util.logger.warn(Server.TestRunIDValue,"","","Invalid line found, so ignoring.");
385 continue;
386 }
387 var clientMsg = ndcMsg[i];
388
389 if(clientMsg.trim().startsWith('nd_ctrl_msg_rep:result=Ok;status=NOT_RUNNING') || clientMsg.trim().startsWith('nd_ctrl_msg_rep:result=Ok;status=RUNNING')){
390 handleControlConnectionReply(clientMsg,clientSocket)
391 }
392 else if(clientMsg.trim().startsWith("nd_control_req:action=nd_switch_comm_protocol")) { //parsing health check reply
393 var list=clientMsg.split(';')
394 for(var m in list){
395 if(list[m].indexOf('supportedProtocols') > -1){
396 var temp = list[m].split('=')
397 if(!temp[1])continue;
398 var switch_channel = serverConfig.updateActiveProtocol(temp[1])
399 if(switch_channel){
400 clientSocket.destroy(switch_channel)
401 delete clientSocket;
402 clientSocket = undefined
403 NDConnectionManager.checkProtocolAndMakeConnection()
404 }
405 }
406 }
407 }
408 else if(clientMsg.trim().startsWith("nd_control_rep:action=reconnect;result=Ok")) { //parsing health check reply
409 healthCheckReply = true;
410 healthCheckReplyCount = 0;
411 }
412 else if (clientMsg.trim().startsWith("nd_control_req:action=bci_stat;")) {
413 util.logger.info(agentConfReader.currentTestRun,"| Message comes from ndc = " + clientMsg);
414 clientSocket.write("nd_control_rep:result=Success:<Recieved BCI Status At Runtime message successfuly from Client = " + clientSocket.toString() + '\n');
415
416 if(clientMsg.indexOf("log_agent_info") != -1)
417 agentConfReader.getAgentInfo();
418 }
419 else if (clientMsg.trim().startsWith("nd_control_req:action=start_instrumentation") ){
420 if (clientMsg.indexOf("cavEpochDiff") === -1)
421 agentConfReader.cavEpochDiffInMills = 1388534400000;
422
423 if(clientMsg.indexOf("TimeStampDiff") === -1)
424 agentConfReader.diffTimeFromNDC = 0;
425
426 var dataArray = ndcMsg[i].split(":");
427 var messageArray = dataArray[1].split(";");
428 var action = messageArray[0].split("=");
429
430 if (action[1] == "start_instrumentation") {
431 stopAllMonitors()
432 closeDataAutoConnections() //Clearing Old object of data and auto connection
433 resetMonitorCounters()
434 instPrfParseobj.resetInstrListOnStart(); //Clearing instrumentation & File base keyword array
435 try {
436 startInstrProcessing = true;
437 metaData={data:''},expectedFileMetaData={size :0}
438 agentConfReader.isTestRunning = true;
439 agentConfReader.startInstrResponse = false;
440 agentConfReader.invalidFileFormatMsg = true; //This keyword is used in case invalid file is coming from NDC, so start_instrumentaion reply will be sent
441 agentConfReader.runTimeChange = false;
442 var currTestId = 0;
443
444 util.logger.info(agentConfReader.currentTestRun + " | isToInstrument : " + agentConfReader.isToInstrument);
445 util.logger.info(agentConfReader.currentTestRun + " | isTestRunning : " + agentConfReader.isTestRunning);
446
447 for (var i = 0; i < messageArray.length; i++) {
448 var propertyValuePairs = messageArray[i].split("=");
449
450 if (propertyValuePairs[0] == "testIdx") {
451 currTestId = propertyValuePairs[1]
452 util.logger.info(currTestId + " | New Test run starting-----");
453 }
454 else if (propertyValuePairs[0] == "status") {
455 agentConfReader.status = propertyValuePairs[1]
456 util.logger.info(currTestId + " | Status value : " +agentConfReader.status);
457 }
458 else if (propertyValuePairs[0] == "enableBciDebug") {
459 agentConfReader.enableBciDebug = propertyValuePairs[1]
460 util.logger.info(currTestId + " | enableBciDebug value : " +agentConfReader.enableBciDebug);
461 }
462 else if (propertyValuePairs[0] == "ndMethodMonTraceLevel") {
463 agentConfReader.ndMethodMonTraceLevel = propertyValuePairs[1]
464 util.logger.info(currTestId + " | ndMethodMonTraceLevel : "+agentConfReader.ndMethodMonTraceLevel);
465 }
466 else if (propertyValuePairs[0] == "enableBackendMonTrace") {
467 agentConfReader.enableBackendMonTrace = propertyValuePairs[1]
468 util.logger.info(currTestId + " | enableBackendMonTrace : "+agentConfReader.enableBackendMonTrace);
469 }
470 else if (propertyValuePairs[0] == "ndCollectorIP") {
471 agentConfReader.ndcHost = propertyValuePairs[1]
472 util.logger.info(currTestId + " | ndcHost : "+agentConfReader.ndcHost);
473 }
474 else if (propertyValuePairs[0] == "ndCollectorPort") {
475 agentConfReader.ndcPort = propertyValuePairs[1]
476 util.logger.info(currTestId + " | ndcPort : "+agentConfReader.ndcPort);
477 }
478 /*Handling nodeJS specific keywords:
479 * 1- dynamicSlowVslowThreshold =It will set threshold of BT dynamically on basis of last 5 samples response time
480 * 2- excludeMethodOnRespTime = It will exclude all methods whose response time is less the specifeid keyword's value
481 * 3- eventLoopMonitor = To enable eventLoopMonitor (89 record)
482 * 4- gcProfiler = To enable gcProfiler (88 record)
483 * 5- nodejsCpuProfilingTime = This keyword will provide the cpuProfiling waiting time*/
484 else if (propertyValuePairs[0] == "excludeMethodOnRespTime") {
485 agentConfReader.excludeMethodOnRespTime = propertyValuePairs[1]
486 util.logger.info(currTestId + " | excludeMethodOnRespTime : "+agentConfReader.excludeMethodOnRespTime);
487 }
488 else if (propertyValuePairs[0] == "enableHSLongStack") {
489 agentConfReader.setEnableHSLongStackValue(propertyValuePairs[1])
490 }
491 else if (propertyValuePairs[0] == "dynamicSlowVslowThreshold") {
492 agentConfReader.dynamicThreshold = propertyValuePairs[1]
493 util.logger.info(currTestId + " | dynamicSlowVslowThreshold : "+agentConfReader.dynamicThreshold);
494 }
495 else if (propertyValuePairs[0] == "eventLoopMonitor") {
496 agentConfReader.enable_eventLoop_monitor = propertyValuePairs[1]
497 util.logger.info(currTestId + " | eventLoopMonitor : "+agentConfReader.enable_eventLoop_monitor);
498 }
499 else if (propertyValuePairs[0] == "gcProfiler") {
500 agentConfReader.enable_garbage_profiler = propertyValuePairs[1]
501 util.logger.info(currTestId + " | gcProfiler : "+agentConfReader.enable_garbage_profiler);
502 }
503 else if (propertyValuePairs[0] == "enableForcedFPChain") {
504 agentConfReader.enableForcedFPChain = propertyValuePairs[1]
505 util.logger.info(currTestId + " | enableForcedFPChain : "+agentConfReader.enableForcedFPChain);
506 }
507 else if (propertyValuePairs[0] == "nodejsCpuProfilingTime") {
508 if(propertyValuePairs[1] >0 ) //enabling this keyword if it is > 0, because timer for cpu profiling should't be zero
509 agentConfReader.nodejsCpuProfilingTime = parseInt(propertyValuePairs[1] * 1000);
510 else{
511 util.logger.warn(agentConfReader.currentTestRun + " | Ivalid value for nodejsCpuProfilingTime : "+agentConfReader.nodejsCpuProfilingTime)
512 }
513 util.logger.info(currTestId + " | nodejsCpuProfilingTime is :" + agentConfReader.nodejsCpuProfilingTime);
514 }
515 else if (propertyValuePairs[0] == "correlationIDHeader") {
516 agentConfReader.correlationIDHeader = propertyValuePairs[1];
517 util.logger.info(currTestId + " | correlationIDHeader : "+agentConfReader.correlationIDHeader);
518 }
519 else if (propertyValuePairs[0] == "enableBTMonitorTrace") {
520 agentConfReader.enableBTMonitorTrace = propertyValuePairs[1]
521 util.logger.info(currTestId + " | enableBTMonitorTrace : "+agentConfReader.enableBTMonitorTrace);
522 }
523 else if (propertyValuePairs[0] == "appName"){
524 if(agentConfReader.instance && agentConfReader.instance != propertyValuePairs[1]){
525 agentConfReader.isAppNameSame = true;
526 }
527 agentConfReader.instance = propertyValuePairs[1];
528 util.logger.info(currTestId + " | app name is : " + agentConfReader.instance);
529 }
530 else if (propertyValuePairs[0] == "tierName") {
531 agentConfReader.tier = propertyValuePairs[1]
532 util.logger.info(currTestId + " | tierName is : " + agentConfReader.tier);
533 }
534 else if (propertyValuePairs[0] == "appID") {
535 agentConfReader.appID = propertyValuePairs[1]
536 util.logger.info(currTestId + " | appID is : " + agentConfReader.appID);
537 }
538 else if (propertyValuePairs[0] == "tierName") {
539 agentConfReader.tier = propertyValuePairs[1]
540 util.logger.info(currTestId + " | tierName is : " + agentConfReader.tier);
541 }
542 else if (propertyValuePairs[0] == "clusterMode") {
543 if(serverConfig.currentActiveServer.type == 1){
544 agentConfReader.isClusterMode = propertyValuePairs[1]
545 util.logger.info(currTestId + " | Cluster Mode (NDCStaticScaling) is : " + agentConfReader.isClusterMode);
546 }else{
547 util.logger.error(currTestId + " | Cluster Mode (NDCStaticScaling) Non Primary NDC - Value :",propertyValuePairs[1]);
548 }
549 }
550 else if (propertyValuePairs[0] == "ndcHeartBeatThreshold") {
551 var HeartBeatThreshold = parseInt(propertyValuePairs[1])
552 if(!isNaN(HeartBeatThreshold)){
553 agentConfReader.ndcHeartBeatThreshold = HeartBeatThreshold;
554 }
555 util.logger.info(currTestId + " | ndcHeartBeatThreshold is : " + agentConfReader.ndcHeartBeatThreshold);
556 }
557 else if (propertyValuePairs[0] == "ndMonitorInterval") {
558 agentConfReader.ndMonitorInterval = propertyValuePairs[1]
559 util.logger.info(currTestId + " | ndMonitorInterval is : " + agentConfReader.ndMonitorInterval);
560 }
561 else if (propertyValuePairs[0] == "captureHttpTraceLevel") {
562 agentConfReader.captureHttpTraceLevel = propertyValuePairs[1]
563 util.logger.info(currTestId + " | captureHttpTraceLevel is : " + agentConfReader.captureHttpTraceLevel);
564 }
565 else if (propertyValuePairs[0] == "ndAppServerHost") {
566 agentConfReader.server = propertyValuePairs[1]
567 util.logger.info(currTestId + " | Server name is :" + agentConfReader.server);
568 }
569 else if (propertyValuePairs[0] == "ndAppServerID") {
570 agentConfReader.serverID = propertyValuePairs[1]
571 util.logger.info(currTestId + " | Server id is :" + agentConfReader.serverID);
572 }
573 else if (propertyValuePairs[0] == "appID") {
574 agentConfReader.appID = propertyValuePairs[1];
575 util.logger.info(currTestId + " | appID is : " + agentConfReader.instance);
576 }
577 else if (propertyValuePairs[0] == "tierID") {
578 agentConfReader.tierID = propertyValuePairs[1]
579 util.logger.info(currTestId + " | tierID is : " + agentConfReader.tier);
580 } else if (propertyValuePairs[0] == "ndVectorSeparator") {
581 agentConfReader.ndVectorSeparator = propertyValuePairs[1]
582 util.logger.info(currTestId + " | ndVectorSeparator is : " + agentConfReader.ndVectorSeparator);
583 }
584 else if (propertyValuePairs[0] == "cavEpochDiff") {
585 agentConfReader.cavEpochDiff = propertyValuePairs[1];
586 agentConfReader.cavEpochDiffInMills = parseInt(propertyValuePairs[1] * 1000);
587 util.logger.info(currTestId + " | cavEpochDiff is : " + agentConfReader.cavEpochDiff);
588 }
589 else if (propertyValuePairs[0] == "TimeStampDiff") {
590 agentConfReader.diffTimeFromNDC = propertyValuePairs[1]
591 util.logger.info(currTestId + " | diffTimeFromNDC is : " + agentConfReader.diffTimeFromNDC);
592 }
593 else if (propertyValuePairs[0] == "bciInstrSessionPct") {
594 agentConfReader.bciInstrSessionPct = propertyValuePairs[1];
595 util.logger.info(currTestId + " | bciInstrSessionPct is : " + agentConfReader.bciInstrSessionPct);
596 }
597 else if (propertyValuePairs[0] == "maxCharInSeqBlob") {
598 agentConfReader.maxCharInSeqBlob = parseInt(propertyValuePairs[1] / 35);
599 util.logger.info(currTestId + " | maxCharInSeqBlob is : " + agentConfReader.maxCharInSeqBlob);
600 }
601 else if (propertyValuePairs[0] == "bciMaxNonServiceMethodsPerFP") {
602 agentConfReader.bciMaxNonServiceMethodsPerFP = propertyValuePairs[1];
603 util.logger.info(currTestId + " | bciMaxNonServiceMethodsPerFP is : " + agentConfReader.bciMaxNonServiceMethodsPerFP);
604 }
605 else if (propertyValuePairs[0] == "captureHTTPReqFullFp") {
606 agentConfReader.httpReqCapturingSettings = NDHttpCaptureSettings.setHttpReqRespCaptureSettings(propertyValuePairs[1],'HTTPCaptureReqFullFP',true)
607 util.logger.info(currTestId + " | HttpRequestCapturingSettings are : " , agentConfReader.httpReqCapturingSettings);
608 }
609 else if (propertyValuePairs[0] == "captureHTTPRespFullFp") {
610 agentConfReader.httpResCapturingSettings = NDHttpCaptureSettings.setHttpReqRespCaptureSettings(propertyValuePairs[1],'HTTPCaptureResFullFP',false)
611 util.logger.info(currTestId + " | HttpResponseCapturingSettings is : " ,agentConfReader.httpResCapturingSettings);
612 }
613 else if (propertyValuePairs[0] == "bciDataBufferMaxCount") {
614 agentConfReader.bciDataBufferMaxCount = propertyValuePairs[1];
615 util.logger.info(currTestId + " | bciDataBufferMaxCount is : " ,agentConfReader.bciDataBufferMaxCount);
616 }
617 else if (propertyValuePairs[0] == "bciDataBufferMaxSize") {
618 agentConfReader.bciDataBufferMaxSize = propertyValuePairs[1];
619 util.logger.info(currTestId + " | bciDataBufferMaxSize is : " ,agentConfReader.bciDataBufferMaxSize);
620 }
621 else if (propertyValuePairs[0] == "ASDataBufferSize") {
622 agentConfReader.ASDataBufferSize = propertyValuePairs[1];
623 util.logger.info(currTestId + " | ASDataBufferSize is : " ,agentConfReader.ASDataBufferSize);
624 }
625 else if (propertyValuePairs[0] == "ASDataBufferMaxCount") {
626 agentConfReader.ASDataBufferMaxCount = propertyValuePairs[1];
627 util.logger.info(currTestId + " | ASDataBufferMaxCount is : " ,agentConfReader.ASDataBufferMaxCount);
628 }
629 else if (propertyValuePairs[0] == "maxBTCount") {
630 agentConfReader.maxBTCount = propertyValuePairs[1];
631 util.logger.info(currTestId + " | maxBTCount is : " ,agentConfReader.maxBTCount);
632 }
633 else if (propertyValuePairs[0] == "enableCaptureNetDelay") {
634 agentConfReader.enableCaptureNetDelay = propertyValuePairs[1];
635 util.logger.info(currTestId + " | enableCaptureNetDelay is : " + propertyValuePairs[1]);
636 }
637 else if (propertyValuePairs[0] == "enableBTMonitor") {
638 agentConfReader.enableBTMonitor = propertyValuePairs[1] ;
639 util.logger.info(currTestId + " | enableBTMonitor is : " + agentConfReader.enableBTMonitor);
640 }
641 else if (propertyValuePairs[0] == "BCILoggingMode") {
642 agentConfReader.BCILoggingMode = propertyValuePairs[1] ;
643 util.logger.info(currTestId + " | BCILoggingMode is : " + agentConfReader.BCILoggingMode);
644 }
645 else if (propertyValuePairs[0] == "startInstrResTimeout") {
646 agentConfReader.startInstrResTimeout = propertyValuePairs[1] ;
647 util.logger.info(currTestId + " | startInstrResTimeout is : " + agentConfReader.startInstrResTimeout);
648 }
649 else if (propertyValuePairs[0] == "enableNDSession") {
650 agentConfReader.enableNDSession.parseNDSessionKeywords(propertyValuePairs[1]) ;
651 util.logger.info(currTestId + " | enableNDSession is : " , agentConfReader.enableNDSession);
652 }
653 else if (propertyValuePairs[0] == "nodeServerMonitor") {
654 agentConfReader.nodeServerMonitor = parseInt(propertyValuePairs[1]) ;
655 util.logger.info(currTestId + " | nodeServerMonitor is : " + agentConfReader.nodeServerMonitor);
656 }
657 else if (propertyValuePairs[0] == "correlateEventCallback") {
658 agentConfReader.setCorelateEventCBValue(propertyValuePairs[1]);
659 util.logger.info(currTestId + " | correlateEventCallback is : " + propertyValuePairs[1]);
660 require('./utils/instrumentNodeEvents')(agentConfReader.corelateEventCallback, agentConfReader.wrapAsyncApi)
661 }
662 else if (propertyValuePairs[0] == "NVCookie" && !('' === propertyValuePairs[1])) {
663 agentConfReader.enableNDSession.NVCookie = propertyValuePairs[1] ;
664 util.logger.info(currTestId + " | NVCookie is : " + agentConfReader.enableNDSession.NVCookie);
665 }
666
667 else if (propertyValuePairs[0] == "enableBackendMonitor") {
668 if(propertyValuePairs[1] > 0) {
669 agentConfReader.isBackendMonitorEnabled = true;
670 util.logger.info(currTestId + " | enableBackendMonitor is : " + agentConfReader.isBackendMonitorEnabled);
671 }
672 else {
673 agentConfReader.isBackendMonitorEnabled = false;
674 }
675 }
676 else if (propertyValuePairs[0] == "ndFlowpathMasks") {
677 var FP_Instances = propertyValuePairs[1].split("%20");
678
679 if(FP_Instances[0].indexOf('0x') !== -1)
680 FP_Instances[0]=FP_Instances[0].split('0x')[1]
681
682 agentConfReader.flowPathInstanceInitialID = (big_integer(FP_Instances[0],16)).toString();
683 agentConfReader.timeStampMask = parseInt((FP_Instances[1]), 16);
684 agentConfReader.seqNoDigits = parseInt((FP_Instances[2]), 16);
685 agentConfReader.seqNumMask = parseInt((FP_Instances[3]), 16);
686 }
687 else if (propertyValuePairs[0] == "nodeAsyncEventMonitor") {
688 if(propertyValuePairs[1] > 0) {
689 agentConfReader.isAsyncEventMonitorEnable = true;
690 util.logger.info(currTestId + " | nodeAsyncEventMonitor is : " + agentConfReader.isAsyncEventMonitorEnable);
691 }
692 else {
693 agentConfReader.isAsyncEventMonitorEnable = false;
694 }
695 }
696 else if(propertyValuePairs[0] == "enableUpdateLogMsgForNF"){
697 agentConfReader.enableUpdateLogMsgForNF = (parseInt(propertyValuePairs[1]) ? parseInt(propertyValuePairs[1]) : 0) ;
698 util.logger.info(currTestId + " | enableUpdateLogMsgForNF is (ND-NF Integration) : " + agentConfReader.enableUpdateLogMsgForNF);
699 if(Object.keys(NDEntryPointManager.entryPointMap).length)
700 instPrfParseobj.checkAndInstrumentLoggerObject();
701 }
702 else if (propertyValuePairs[0] == "FPMaxAllowedAgeInSec") {
703 agentConfReader.FPMaxAllowedAgeInMillis = parseInt(propertyValuePairs[1]) ? parseInt(propertyValuePairs[1])*1000 : 0;
704 util.logger.info(currTestId + " | FPMaxAllowedAgeInMillis's value is : " + agentConfReader.FPMaxAllowedAgeInMillis);
705 }
706 else if (propertyValuePairs[0] == "enableDumpAsyncId") {
707 agentConfReader.enableDumpAsyncId = (Number(propertyValuePairs[1]) == 1) ? 1:0;
708 util.logger.info(currTestId + " | enableDumpAsyncId's value is : " + agentConfReader.enableDumpAsyncId);
709 }
710 else if (propertyValuePairs[0] == "tDigestPercentileBT") {
711 parseTDigestPercentileDATA(propertyValuePairs[0],propertyValuePairs[1])
712 util.logger.info(currTestId + " | tDigestPercentileBT's value is : " + JSON.stringify(agentConfReader.tDigestPercentileBT));
713 }
714 else if (propertyValuePairs[0] == "tDigestPercentileIP") {
715 parseTDigestPercentileDATA(propertyValuePairs[0],propertyValuePairs[1])
716 util.logger.info(currTestId + " | tDigestPercentileIP's value is : " + JSON.stringify(agentConfReader.tDigestPercentileIP));
717 }
718 else {
719 agentConfReader[propertyValuePairs[0]] = propertyValuePairs[1]
720 }
721 }
722 util.initializeLogger(agentConfReader.logLevel,agentConfReader.BCILoggingMode,agentConfReader.instance,true)
723 agentConfReader.cavEpochDiffInMills = agentConfReader.cavEpochDiffInMills - agentConfReader.diffTimeFromNDC ;
724 util.logger.info(currTestId," | cavEpochDiffInMills : ",agentConfReader.cavEpochDiffInMills);
725 agentConfReader.vectorPrefix = agentConfReader.tier + agentConfReader.ndVectorSeparator + agentConfReader.server + agentConfReader.ndVectorSeparator + agentConfReader.instance + agentConfReader.ndVectorSeparator;
726 agentConfReader.vectorPrefixForNodeMonitors = agentConfReader.tier + agentConfReader.ndVectorSeparator + agentConfReader.server + agentConfReader.ndVectorSeparator + agentConfReader.instance ;
727 agentConfReader.vectorPrefixID = agentConfReader.tierID + "|" + agentConfReader.appID + "|";
728 /*
729 if Test run is changed then reseting all the maps and generating FP_Mask again
730 */
731 if (agentConfReader.previousTestRun !== currTestId) {
732 util.logger.info(currTestId + " | Cleaning all maps");
733
734 flowpathHandler.clearCounter();
735 agentConfReader.backendRecordMap = new Object();
736 agentConfReader.backendMetaMap = new Object();
737 agentConfReader.flowMap = new Object();
738 agentConfReader.backendID = 0;
739
740 ndAsyncMonitor.clearMap();
741
742 }
743 //Checking is continous running test or not
744 agentConfReader.continousRunningTest = agentConfReader.previousTestRun === currTestId ? true : false;
745 //setting Test Run id comming from ndc as a current test run id
746 agentConfReader.currentTestRun = currTestId;
747 instPrfParseobj.processInstrFileList(messageArray, clientSocket,makeDataAutoConnection);
748 //fileBasedKeywordGenricFile.parseFileBasedKeywords(messageArray, clientSocket);
749 ndExceptionCaptureSettings.parseExceptionCaptureSettings(clientMsg);
750 calculateDataBufferLength(agentConfReader.bciDataBufferMaxCount,agentConfReader.bciDataBufferMaxSize)
751 calculateDataBufferLength(agentConfReader.ASDataBufferMaxCount,agentConfReader.ASDataBufferSize)
752 otherKeywordHandler.parsingKeywordvalue(messageArray); //Parse all keyword other than file based keywords
753 util.logger.info(agentConfReader.currentTestRun,'| agentConfReader.settingFileMode is : ',agentConfReader.settingFileMode)
754 if (agentConfReader.settingFileMode.toUpperCase() == "EXCLUSIVE") {
755 var properties = null,list=[];
756 try {
757 properties = fs.readFileSync(agentConfReader.ndSettingFile).toString()
758 }
759 catch (err) {
760 util.logger.warn(agentConfReader.currentTestRun + " | Cannot read propery file due to : " + err);
761 }
762 if(properties) {
763 list = properties.trim().split('\n');
764 for (var m = 0; m < list.length; m++) {
765 if (list[m] && list[m].trim().startsWith('tier')) {
766 list.splice(m, 1);
767 m = m - 1
768 }
769 else if (list[m] && list[m].trim().startsWith('server')) {
770 list.splice(m, 1);
771 m = m - 1
772 }
773 else if (list[m] && list[m].trim().startsWith('instance')) {
774 list.splice(m, 1);
775 m = m - 1
776 }
777 }
778 list.push('tier=' + agentConfReader.tier)
779 list.push('server=' + agentConfReader.server);
780 list.push('instance=' + agentConfReader.instance);
781
782 list = list.join('\n')
783 util.logger.info(agentConfReader.currentTestRun, '| Updating ndsettings.conf file : ', list)
784 fs.writeFile(agentConfReader.ndSettingFile, list, function (err) {
785 if (err)util.logger.error(err);
786
787 var stat = fs.statSync(agentConfReader.ndSettingFile) //Getting the stat of file .
788 agentConfReader.lastModifiedSize = stat.size;
789 agentConfReader.lastModifiedTime = stat.mtime;
790 });
791 }
792 }
793 }
794 catch (err) {
795 util.logger.warn(err);
796 }
797 }
798 }
799 else if (clientMsg.trim().startsWith("nd_control_req:action=reconnect")) {
800 agentConfReader.lastHeartBeatReceived = new Date().getTime();
801 if(expectedFileMetaData.size >0)
802 metaData={data:''},expectedFileMetaData={size :0}
803 if(agentConfReader.runTimeChange){
804 agentConfReader.runTimeChange = false;
805 util.logger.info(agentConfReader.currentTestRun + " | Got wrong file ",expectedFileMetaData.keywordName,'So clearing maps')
806 }
807 }
808 else if (clientMsg.trim().startsWith("nd_control_req:action=stop_instrumentation")) {
809 var dataArray = clientMsg.split(":");
810 var messageArray = dataArray[1].split(";");
811 var action = messageArray[0].split("=");
812 var status = messageArray[1].split("=")[1];
813
814 util.logger.info(agentConfReader.currentTestRun + " | stop_instrumentation message from ndc ")
815
816 if (status == "stopping" || status == "running") {
817 metaData={data:''},expectedFileMetaData={size :0}
818 if (agentConfReader.dataConnHandler && agentConfReader.autoSensorConnHandler) {
819
820 MessageHandler.dumpMethodLastRecord(10, agentConfReader.dataConnHandler);
821
822 agentConfReader.isToInstrument = false;
823 agentConfReader.isTestRunning = false;
824 agentConfReader.previousTestRun = agentConfReader.currentTestRun;
825 agentConfReader.currentTestRun = 0;
826 agentConfReader.runTimeChange = false;
827 //creating control message
828 controlMessage = "nd_control_rep:action=stop_instrumentation;status=" + status + ";result=Ok;" + "\n";
829
830 util.logger.info(agentConfReader.currentTestRun + " | Destroying the Data and AutoSensor connection . ")
831 stopAllMonitors()
832 closeDataAutoConnections()
833 instPrfParseobj.resetInstrListOnStart(); //Clearing instrumentation & File base keyword array
834 util.logger.info(agentConfReader.currentTestRun + " | " + controlMessage);
835 clientSocket.write(controlMessage); //Stopping the connection
836 }
837 }
838 }
839 else if (clientMsg.trim().startsWith("nd_meta_data_req:action=send_meta_data;")) {
840 ndMetaDataRecoveryProcess.processClientMessage(clientMsg, clientSocket);
841 clientSocket.write("nd_meta_data_rep:status=complete;\n");
842 }
843 else if (clientMsg.trim().startsWith("nd_meta_data_req:action=get_thread_dump;")) {
844 try {
845 var dataArray = clientMsg.split(":");
846 //This message needs BCIAgent to take threaddump
847 //log the cline message
848 //start the threaddump processor
849 //send the completion response
850 //if error send the response
851 var compressMode = false;
852 if (dataArray[1].indexOf(";CompressMode=1;") != -1)
853 compressMode = true;
854
855 util.logger.info(agentConfReader.currentTestRun + " | Invoking CPU Profiling request for 10 min .");
856 v8_profiler.startCpuProfiling(clientSocket);
857 }
858 catch (err) {
859 clientSocket.write("nd_meta_data_rep:action=get_thread_dump;result=Error:<Unable to take cpuProfiling , please check NodeAgent logs>;\n");
860 util.logger.warn(agentConfReader.currentTestRun + " | Unable to take cpu_profiling : " + err);
861 }
862 }
863 else if (clientMsg.trim().startsWith("nd_meta_data_req:action=get_heap_dump;")) {
864 try {
865 util.logger.info(agentConfReader.currentTestRun + " | Invoking for Heap Dump .");
866 MessageHandler.handleClientMessageForTakingHeapDump(clientMsg, clientSocket);
867 }
868 catch (e) {
869 clientSocket.write("nd_meta_data_rep:action=get_heap_dump;result=Error:<Unable to take heapDump Because Of Exception.Check BCI error log for detail.>;\n");
870 util.logger.warn(agentConfReader.currentTestRun + " | Unable to take heapDump : " + e);
871 }
872 }
873 else if (clientMsg.trim().startsWith("run_async_command_req:")){
874 try{
875 var command = clientMsg.trim().split(';')[0].split('=')[1]
876 var asyncId = clientMsg.split(';')[1].split('=')[1]
877 var currProto = serverConfig.getCurrentActiveProtocol()
878 var dataSocket = NDConnectionManager.makeTemporaryWsDataConnection(currProto)
879 clientSocket.write("run_async_command_rep:Id=" + asyncId + ";Result=Success;\n")
880 var tempClientMsg = clientMsg;
881 dataSocket.createDataConn(serverConfig.currentActiveServer,true,currProto,function(err){
882 dataSocket.client._readableState.highWaterMark = 1024 * 1024 * 15;
883 dataSocket.client._writableState.highWaterMark = 1024 * 1024 * 15;
884
885 util.logger.info(agentConfReader.currentTestRun+" | Temporary Data Connection established with NDCollector : Socket[addr="+agentConfReader.ndcHost+",port="+agentConfReader.ndcPort + ",localport=" +((currProto.protocol == 'tcp') ? this.localPort : dataSocket.client.socket._socket.address().port)+']');
886 var v8Instance = new v8_profiler();
887 v8Instance.takeHeapSnapShotOnNewConn(clientSocket, dataSocket, tempClientMsg, asyncId, command,function(err){
888 try{
889 if(err){
890 var errMsg = "run_async_command_rep:Id="+asyncId+";Result=Error;Output="+err+";\n"
891 clientSocket.write(errMsg)
892 util.logger.warn(agentConfReader.currentTestRun + "| Error occured during Taking HeapDump main: "+err)
893 }
894 delete v8Instance
895 }
896 catch(e){
897 util.logger.warn(agentConfReader.currentTestRun + "| Error occured during Taking HeapDump CallBack : "+e)
898 }
899 });
900 })
901 }
902 catch (e){
903 if(dataSocket){
904 dataSocket.closeConnection()
905 delete dataSocket
906 }
907 var errMsg = "run_async_command_rep:Id="+asyncId+";Result=Error;Output="+e+";\n"
908 clientSocket.write(errMsg)
909 util.logger.warn(agentConfReader.currentTestRun + " | Unable to take heapDump (Error during Parsing Req.): " + e);
910 }
911 }
912 else if (clientMsg.trim().startsWith("download_file_req:")){
913 try{
914 var id, fileName, filePath, deleteFile = 0
915 var tempClientMsg = clientMsg;
916 let compressMode, timeOut;
917 var splitMsg = clientMsg.trim().split(";");
918 for (var i = 0; i < splitMsg.length; i++) {
919 if(!splitMsg[i])
920 continue;
921
922 if (splitMsg[i].indexOf("Id") > -1) {
923 id = splitMsg[i].split(":")[1].split("=")[1];
924 } else if (splitMsg[i].indexOf("TimeOut") > -1) {
925 timeOut = splitMsg[i].split("=")[1];
926 } else if (splitMsg[i].indexOf("FileName") > -1) {
927 fileName = splitMsg[i].split("=")[1];
928 } else if (splitMsg[i].indexOf("FileType") > -1) {
929 filePath = splitMsg[i].split("=")[1];
930 } else if (splitMsg[i].indexOf("DeleteFile") > -1) {
931 deleteFile = splitMsg[i].split("=")[1];
932 }
933 }
934 if (filePath)
935 fileName = filePath +'/'+ fileName;
936 else
937 fileName = "/tmp/" + fileName;
938
939 var isFileExists= fs.existsSync(fileName)
940 if(!isFileExists)throw new Error('File is not present at path :',fileName)
941 var currProto = serverConfig.getCurrentActiveProtocol()
942 var dataSocket = NDConnectionManager.makeTemporaryWsDataConnection(currProto)
943
944 clientSocket.write("download_file_rep:Id=" + id + ";Result=Success;\n")
945
946 dataSocket.createDataConn(serverConfig.currentActiveServer,true,currProto,function(err){
947
948 dataSocket.client._readableState.highWaterMark = 1024 * 1024 * 15;
949 dataSocket.client._writableState.highWaterMark = 1024 * 1024 * 15;
950
951 util.logger.info(agentConfReader.currentTestRun+" | Temporary Data Connection established with NDCollector : Socket[addr="+agentConfReader.ndcHost+",port="+agentConfReader.ndcPort + ",localport=" +((currProto.protocol == 'tcp') ? this.localPort : dataSocket.client.socket._socket.address().port) +']' );
952 var v8Instance = new v8_profiler();
953 v8Instance.downloadFileOnNewConn(clientSocket, dataSocket, tempClientMsg, id, fileName, deleteFile,function(err){
954 try{
955 if(err){
956 var errMsg = "download_file_rep:Id="+id+";Result=Error;Output="+err+";\n"
957 clientSocket.write(errMsg)
958 util.logger.warn(agentConfReader.currentTestRun + "| Error occured during downloading file in controllMsg: "+err)
959 }
960 delete v8Instance
961 }
962 catch(e){
963 util.logger.warn(agentConfReader.currentTestRun + "| Error occured during downloading file CallBack : "+e)
964 }
965 });
966 })
967 }
968 catch (e){
969 if(dataSocket){
970 dataSocket.closeConnection()
971 delete dataSocket
972 }
973 var errMsg = "download_file_rep:Id="+id+";Result=Error;Output="+e+";\n"
974 clientSocket.write(errMsg)
975 util.logger.warn(agentConfReader.currentTestRun + " | Unable to download file (Error during Parsing Req.): " + e);
976 }
977 }
978 else if(clientMsg.trim().startsWith("nd_control_req:action=modify;")) {
979 // instrProfileParseSuccess = true;//for every instrument profile starting this will be true, if during any failure occur it will false
980 /*if(!controlCommunicationBusyFlag)
981 sendOutput("nd_control_rep:result=Error:<Unable to process modify message because of no control connection is on established." + '\n');
982 else*/
983
984 if (!agentConfReader.isTestRunning)
985 clientSocket.write("nd_control_rep:result=Error:<Unable to process modify message because of stop instrument recieved or startInstrument not recieved." + '\n');
986 else
987 MessageHandler.handleRunTimeChangeCase(clientMsg,clientSocket);
988 }
989
990 else if(clientMsg.trim().startsWith("nd_control_rep:action=file") || clientMsg.trim().startsWith("nd_control_rep:action=instrumentation_profile")) {
991 metaData={data:''},expectedFileMetaData={size :0}
992 var dataArray = clientMsg.split(":");
993 var messageArray = dataArray[1].split(";");
994 var action = messageArray[0].split("=");
995 if (action[1] == "file") {
996 expectedFileMetaData = fileBasedKeywordGenricFile.readFileContent(messageArray[1], clientSocket);
997 }
998 else if(action[1] == "instrumentation_profile") {
999 expectedFileMetaData = fileBasedKeywordGenricFile.readInstrProfileContent(messageArray)
1000 }
1001
1002 //Error case if the file has size=0,
1003 instPrfParseobj.isValidExpectedFileMetaData(expectedFileMetaData,clientSocket,makeDataAutoConnection,function(isValid){
1004 if(!isValid) {
1005 util.logger.error(agentConfReader.currentTestRun,' | Expected Meta Data is not Valid, So resetting the Metadata')
1006 metaData={data:''},expectedFileMetaData={size :0}
1007 }else
1008 util.logger.info(agentConfReader.currentTestRun,' | Expected File Meta Data is Valid.')
1009 });
1010 if( i < ndcMsg.length -2) { //Checking if nd_control_rep:action=file msg and data coming in same chunk or not, ig it is same then going to read
1011 metaData={data:''}
1012 if(data.indexOf('nd_control_rep:action=file') > -1) {
1013 var con = content.toString()
1014 var fileIndex = con.indexOf('action=file');
1015 var indexofN = con.indexOf('\n',fileIndex) //Checking first indexOf \n after nd_control_rep:action=file
1016 var msg = con.substring(indexofN +1, con.length)
1017 MessageHandler.readFileContent(msg, clientSocket,expectedFileMetaData.keywordName);
1018 break;
1019 }
1020 else if(data.indexOf('nd_control_rep:action=instrumentation_profile') > -1) {
1021 var con = content.toString()
1022 var fileIndex = con.indexOf('action=instrumentation_profile');
1023 var indexofN = con.indexOf('\n',fileIndex) //Checking first indexOf \n after nd_control_rep:action=file
1024 var msg = con.substring(indexofN +1, con.length)
1025 MessageHandler.readFileContent(msg, clientSocket,expectedFileMetaData.keywordName);
1026 break;
1027 }
1028 }
1029 }
1030 else if(clientMsg.trim().startsWith("nd_control_req:action=reroute_ctrl_con;")){
1031
1032 MessageHandler.parseReRouteMessageAndUpdateClientInfo(clientMsg);
1033 MessageHandler.updateNDSettingFile();
1034 if (agentConfReader.isTestRunning) {
1035 metaData = {data: ''}, expectedFileMetaData = {size: 0} ,agentConfReader.runTimeChange=false
1036 if (agentConfReader.dataConnHandler && agentConfReader.autoSensorConnHandler) {
1037 agentConfReader.isTestRunning = false;
1038 agentConfReader.isToInstrument = false;
1039 agentConfReader.runTimeChange = false;
1040 agentConfReader.previousTestRun = agentConfReader.currentTestRun;
1041 agentConfReader.currentTestRun = 0;
1042 MessageHandler.dumpMethodLastRecord(10, agentConfReader.dataConnHandler);
1043 stopAllMonitors();
1044 closeDataAutoConnections();
1045 instPrfParseobj.resetInstrListOnStart(); //Clearing instrumentation & File base keyword array
1046 clientSocket.write("nd_control_rep:action=stop_instrumentation;status=stopping;result=Ok;" + "\n");
1047 }
1048 }
1049 try{
1050 clientSocket.destroy();
1051 delete clientSocket;
1052 clientSocket = undefined
1053 NDConnectionManager.checkProtocolAndMakeConnection();
1054 }catch(ee){
1055 util.logger.warn(agentConfReader.currentTestRun + " | Error in re-routing : " + ee);
1056 }
1057 }
1058 else if(clientMsg.trim().startsWith("nd_control_req:action=reroute_ctrl_con_v2;")){
1059
1060 MessageHandler.parseReRouteMessageAndUpdateClientInfo(clientMsg);
1061 if(!agentConfReader.isClusterMode)
1062 MessageHandler.updateNDSettingFile();
1063
1064 if (agentConfReader.isTestRunning) {
1065 metaData = {data: ''}, expectedFileMetaData = {size: 0} ,agentConfReader.runTimeChange=false
1066 if (agentConfReader.dataConnHandler && agentConfReader.autoSensorConnHandler) {
1067 agentConfReader.isTestRunning = false;
1068 agentConfReader.isToInstrument = false;
1069 agentConfReader.runTimeChange = false;
1070 agentConfReader.previousTestRun = agentConfReader.currentTestRun;
1071 agentConfReader.currentTestRun = 0;
1072 MessageHandler.dumpMethodLastRecord(10, agentConfReader.dataConnHandler);
1073 stopAllMonitors();
1074 closeDataAutoConnections();
1075 instPrfParseobj.resetInstrListOnStart(); //Clearing instrumentation & File base keyword array
1076 clientSocket.write("nd_control_rep:action=stop_instrumentation;status=stopping;result=Ok;" + "\n");
1077 }
1078 }
1079 try{
1080 clientSocket.destroy();
1081 delete clientSocket;
1082 clientSocket = undefined
1083 NDConnectionManager.checkProtocolAndMakeConnection();
1084 }catch(ee){
1085 util.logger.warn(agentConfReader.currentTestRun + " | Error in re-routing : " + ee);
1086 }
1087 }else if (clientMsg.trim().startsWith("ndc_req:action=discover_loaded_classes;")) {
1088
1089 try{
1090 var ID, classFilters, methodFilters;
1091 var command=clientMsg.split(':');
1092 var value = command[1].split(';')
1093 for (var a in value){
1094 var data = value[a].split('=');
1095 if(data[0].indexOf('Id') > -1)
1096 ID = parseInt(data[1])
1097 if(data[0].indexOf('classFilters') > -1)
1098 classFilters = data[1].toString()
1099 if(data[0].indexOf('methodFilters') > -1)
1100 methodFilters = data[1].toString()
1101 }
1102
1103 var currProto = serverConfig.getCurrentActiveProtocol()
1104 var dataSocket = NDConnectionManager.makeTemporaryWsDataConnection(currProto)
1105 clientSocket.write("ndc_rep:action=discover_loaded_classes;Id="+ID+";result=Success;\n");
1106
1107 dataSocket.createDataConn(serverConfig.currentActiveServer, true, currProto, function (err) {
1108
1109 dataSocket.client._readableState.highWaterMark = 1024 * 1024 * 15;
1110 dataSocket.client._writableState.highWaterMark = 1024 * 1024 * 15;
1111 util.logger.info(agentConfReader.currentTestRun + " | Temporary Data Connection established with NDCollector : Socket[addr=" + agentConfReader.ndcHost + ",port=" + agentConfReader.ndcPort + ",localport=" + ((currProto.protocol == 'tcp') ? this.localPort : dataSocket.client.socket._socket.address().port) + ']')
1112
1113 try{
1114 autoDiscovery.findModules(ID,classFilters,methodFilters,dataSocket)
1115 }catch(e){
1116 if(dataSocket){
1117 dataSocket.closeConnection()
1118 delete dataSocket
1119 }
1120 util.logger.warn(agentConfReader.currentTestRun + " | Error in findModules : " + e);
1121 }
1122 })
1123 }catch(e){
1124 if(dataSocket){
1125 dataSocket.closeConnection()
1126 delete dataSocket
1127 }
1128 util.logger.warn(agentConfReader.currentTestRun + " | Error in discover_loaded_class : " + e);
1129 }
1130 } else if(clientMsg.trim().startsWith("nd_control_req:action=captureProcessCoreDump;")) {
1131 try {
1132 var fileName, commPath;
1133 var command = clientMsg.split(':');
1134 var value = command[1].split(';')
1135
1136 for (var a in value) {
1137 var data = value[a].split('=');
1138 if (data[0].indexOf('coreDumpCommandPath') > -1)
1139 commPath = data[1].toString().trim()
1140 if (data[0].indexOf('coreDumpFileName') > -1)
1141 fileName = data[1].toString().trim()
1142 }
1143 captureProcessCoreDump.parseCommand(commPath,fileName,clientSocket)
1144
1145 } catch (e) {
1146 util.logger.warn(agentConfReader.currentTestRun + 'Error in captureProcessCoreDump', e);
1147 }
1148 }
1149 else{
1150 //instPrfParseobj.processInstrFile(ndcMsg[i], clientSocket,makeDataAutoConnection);
1151 }
1152 }
1153 }
1154 }
1155 catch(err){util.logger.warn(err)}
1156 })
1157};
1158
1159MessageHandler.readFileContent= function(data,clientSocket,keywordName) {
1160 if(!data)return;
1161 if( pendingChunk != '') {
1162 //data += pendingChunk +'\n';
1163 pendingChunk=''
1164 }
1165 if(parseInt(data.length) === parseInt(expectedFileMetaData.size)) {
1166 isFileBasedOrInstrProfile(data,clientSocket,makeDataAutoConnection,keywordName)
1167 }
1168 else if(metaData.data.length === expectedFileMetaData.size){
1169 isFileBasedOrInstrProfile(metaData.data,clientSocket,makeDataAutoConnection,keywordName)
1170 }
1171 else if(parseInt(data.length )< parseInt(expectedFileMetaData.size)) {
1172 metaData.data +=data ;
1173 if(parseInt(metaData.data.length) === parseInt(expectedFileMetaData.size)){
1174 isFileBasedOrInstrProfile(metaData.data,clientSocket,makeDataAutoConnection,keywordName)
1175 }
1176 else if(parseInt(metaData.data.length) > parseInt(expectedFileMetaData.size)) {
1177 metaData.data = metaData.data.substring(0,parseInt(expectedFileMetaData.size))
1178 if(parseInt(metaData.data.length) === parseInt(expectedFileMetaData.size))
1179 isFileBasedOrInstrProfile(metaData.data,clientSocket,makeDataAutoConnection,keywordName)
1180 }
1181 }
1182 else if(parseInt(data.length) > parseInt(expectedFileMetaData.size)) {
1183 metaData.data +=data ;
1184 metaData.data = metaData.data.substring(0,parseInt(expectedFileMetaData.size))
1185 if(parseInt(metaData.data.length) === parseInt(expectedFileMetaData.size))
1186 isFileBasedOrInstrProfile(metaData.data,clientSocket,makeDataAutoConnection,keywordName)
1187 }
1188}
1189
1190function parseTDigestPercentileDATA(keyword,data){
1191 try{
1192 if(keyword && keyword.length > 0 && data && data.length > 0){
1193 if(data.indexOf('%20') > -1){
1194 let temp = data.split('%20');
1195 if(temp.length == 7){
1196 var obj ={};
1197 obj.enable = Number(temp[0]);
1198 obj.aggInterval = temp[1]; //string example (5m , 1h)
1199 obj.sMode = Number(temp[2]);
1200 obj.delta = Number(temp[3]) > 0 ? Number(temp[3]) : 100;
1201 obj.k = Number(temp[4]);
1202 obj.groupId = Number(temp[5]);
1203 obj.graphId = Number(temp[6]);
1204
1205 if(keyword == 'tDigestPercentileBT'){
1206 agentConfReader.tDigestPercentileBT = obj;
1207 if(agentConfReader.tDigestPercentileBT.enable == 1)
1208 btPercentile.handleMonitor()
1209 }
1210 else if(keyword == 'tDigestPercentileIP'){
1211 agentConfReader.tDigestPercentileIP = obj;
1212 if(agentConfReader.tDigestPercentileIP.enable == 1)
1213 ipPercentile.handleMonitor()
1214 }
1215 obj = undefined;
1216 }else{
1217 temp = undefined;
1218 util.logger.error(agentConfReader.currentTestRun,'|TDigestDATA : Incomplete data')
1219 }
1220 }
1221 }else{
1222 util.logger.error(agentConfReader.currentTestRun,'| Invalid TDigestPercentile keyword value')
1223 }
1224 }catch(e){
1225 util.logger.error(agentConfReader.currentTestRun,'| Error while parsing the tDigest Keyword Value',e)
1226 }
1227}
1228
1229function isFileBasedOrInstrProfile (data,clientSocket,makeDataAutoConnection,keywordName){
1230 util.logger.info('Complete data recieved for '+keywordName+' : ',data)
1231
1232 if(expectedFileMetaData.type ==="instrumentationProfile")
1233 instPrfParseobj.processInstrFile(data, clientSocket,makeDataAutoConnection);
1234 else
1235 instPrfParseobj.readFileBasedKeywordContent(data, clientSocket,makeDataAutoConnection,keywordName);
1236
1237 metaData={data:''},expectedFileMetaData={size :0}
1238 if(agentConfReader.runTimeChange) {
1239 clientSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1240 util.logger.info(agentConfReader.currentTestRun + " | nd_control_rep:action=modify;result=Ok;" + '\n');
1241 agentConfReader.runTimeChange = false;
1242 }
1243}
1244
1245MessageHandler.parseAllFieldsAndSetInModelIfAllSuccess = function (clientMsg,controlSocket){
1246 if(clientMsg.indexOf(";") !== -1) {
1247 var allArguments = clientMsg.trim().split(";");
1248 allArguments.length >0 && otherKeywordHandler.parsingKeywordvalue(allArguments)
1249 for (var i in allArguments) {
1250 if(!allArguments[i])
1251 continue
1252 var argumentAndValue = allArguments[i].split("=");
1253 var strKeyword = argumentAndValue[0].toString().trim();
1254 var strKeywordValue = argumentAndValue[1].toString().trim();
1255
1256 if (argumentAndValue == null || argumentAndValue.length != 2) {
1257 util.logger.info(agentConfReader.currentTestRun, " | Ignoring Argument as it is not in proper foramt. Argument = ", allArguments[i]);
1258 continue;
1259 }
1260 else if (allArguments[i].startsWith("bciInstrSessionPct")) {
1261 agentConfReader.bciInstrSessionPct = strKeywordValue;
1262 util.logger.info(agentConfReader.currentTestRun + " | bciInstrSessionPct : "+agentConfReader.bciInstrSessionPct);
1263 }
1264 else if (allArguments[i].startsWith("BCILoggingMode")) {
1265 agentConfReader.BCILoggingMode = strKeywordValue;
1266 util.logger.info(agentConfReader.currentTestRun + " | BCILoggingMode : "+agentConfReader.BCILoggingMode);
1267 util.initializeLogger(agentConfReader.logLevel,agentConfReader.BCILoggingMode,agentConfReader.instance,true)
1268 }
1269 else if (allArguments[i].startsWith("maxCharInSeqBlob")) {
1270 agentConfReader.maxCharInSeqBlob = parseInt(strKeywordValue / 25);
1271 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for maxCharInSeqBlob is : " + agentConfReader.maxCharInSeqBlob);
1272 }
1273 else if (allArguments[i].startsWith("bciDataBufferMaxCount")) {
1274 agentConfReader.bciDataBufferMaxCount = strKeywordValue;
1275 calculateDataBufferLength(agentConfReader.bciDataBufferMaxCount,agentConfReader.bciDataBufferMaxSize)
1276 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for bciDataBufferMaxCount is : " ,agentConfReader.bciDataBufferMaxCount);
1277 }
1278 else if (allArguments[i].startsWith("bciDataBufferMaxSize")) {
1279 agentConfReader.bciDataBufferMaxSize = strKeywordValue;
1280 calculateDataBufferLength(agentConfReader.bciDataBufferMaxCount,agentConfReader.bciDataBufferMaxSize)
1281 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for bciDataBufferMaxSize is : " ,agentConfReader.bciDataBufferMaxSize);
1282 }
1283 else if (allArguments[i].startsWith("enableNDSession")) {
1284 agentConfReader.enableNDSession.parseNDSessionKeywords(strKeywordValue) ;
1285 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for enableNDSession is : " + agentConfReader.enableNDSession);
1286 }
1287 else if (allArguments[i].startsWith("NVCookie") && !('' === strKeywordValue)) {
1288 agentConfReader.enableNDSession.NVCookie = strKeywordValue ;
1289 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for NVCookie is : " + agentConfReader.enableNDSession.NVCookie);
1290 }
1291 else if (allArguments[i].startsWith("nodeServerMonitor") && !('' === strKeywordValue)) {
1292 agentConfReader.nodeServerMonitor = parseInt(strKeywordValue) ;
1293 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for nodeServerMonitor is : " + agentConfReader.nodeServerMonitor);
1294 serverMonitor.handleServerMonitor()
1295 }
1296 else if (allArguments[i].startsWith("ASDataBufferSize")) {
1297 agentConfReader.ASDataBufferSize = strKeywordValue;
1298 calculateASLength(agentConfReader.ASDataBufferSize,agentConfReader.ASDataBufferMaxCount)
1299 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for ASDataBufferSize is : " ,agentConfReader.ASDataBufferSize);
1300 }
1301 else if (allArguments[i].startsWith("ASDataBufferMaxCount")) {
1302 agentConfReader.ASDataBufferMaxCount = strKeywordValue;
1303 calculateASLength(agentConfReader.ASDataBufferSize,agentConfReader.ASDataBufferMaxCount)
1304 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for ASDataBufferMaxCount is : " ,agentConfReader.ASDataBufferMaxCount);
1305 }
1306 else if (allArguments[i].startsWith("correlationIDHeader")) {
1307 agentConfReader.correlationIDHeader = strKeywordValue
1308 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for correlationIDHeader is : " + agentConfReader.correlationIDHeader);
1309 }
1310 else if (allArguments[i].startsWith("enableForcedFPChain")) {
1311 agentConfReader.enableForcedFPChain = strKeywordValue;
1312 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for enableForcedFPChain is : " + agentConfReader.enableForcedFPChain);
1313 }
1314 else if (allArguments[i].startsWith("enableHSLongStack")) {
1315 agentConfReader.setEnableHSLongStackValue(strKeywordValue)
1316 if(agentConfReader.isAsyncEventMonitorEnable)
1317 ndAsyncMonitor.filterAndUpdateCommonMap();
1318 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for enableHSLongStack is : " + agentConfReader.enableHSLongStack);
1319 }
1320 else if (allArguments[i].startsWith("bciMaxNonServiceMethodsPerFP")) {
1321 agentConfReader.bciMaxNonServiceMethodsPerFP = strKeywordValue;
1322 util.logger.info(agentConfReader.currentTestRun + " | Applying run time change for bciMaxNonServiceMethodsPerFP is : " + agentConfReader.bciMaxNonServiceMethodsPerFP);
1323 }
1324 else if (allArguments[i].startsWith("nodejsCpuProfilingTime")) {
1325 if(strKeywordValue >0 )
1326 agentConfReader.nodejsCpuProfilingTime = parseInt(strKeywordValue * 1000);
1327 else{
1328 util.logger.warn(agentConfReader.currentTestRun + " | Ivalid value for nodejsCpuProfilingTime : "+agentConfReader.nodejsCpuProfilingTime)
1329 }
1330 util.logger.info(agentConfReader.currentTestRun + " | nodejsCpuProfilingTime : "+agentConfReader.nodejsCpuProfilingTime);
1331 }
1332 else if (allArguments[i].startsWith("excludeMethodOnRespTime")) {
1333 agentConfReader.excludeMethodOnRespTime = strKeywordValue
1334 util.logger.info(agentConfReader.currentTestRun ,"| excludeMethodOnRespTime : "+agentConfReader.excludeMethodOnRespTime);
1335 }
1336 else if (allArguments[i].startsWith("dynamicSlowVslowThreshold")) {
1337 agentConfReader.dynamicThreshold = strKeywordValue
1338 util.logger.info(agentConfReader.currentTestRun + " | dynamicSlowVslowThreshold : "+agentConfReader.dynamicThreshold);
1339 }
1340 else if (allArguments[i].startsWith("eventLoopMonitor")) {
1341 agentConfReader.enable_eventLoop_monitor = strKeywordValue
1342 util.logger.info(agentConfReader.currentTestRun + " | eventLoopMonitor : "+agentConfReader.enable_eventLoop_monitor);
1343 eventLoopMonitor.handleEventLoopMonitor();
1344 }
1345 else if (allArguments[i].startsWith("gcProfiler")) {
1346 agentConfReader.enable_garbage_profiler = strKeywordValue
1347 util.logger.info(agentConfReader.currentTestRun + " | gcProfiler : "+agentConfReader.enable_garbage_profiler);
1348 heapGcMonitor.handleHeapGcMonitor();
1349 }
1350 else if (allArguments[i].startsWith("correlateEventCallback")) {
1351 agentConfReader.setCorelateEventCBValue(strKeywordValue);
1352 util.logger.info(agentConfReader.currentTestRun + " | correlateEventCallback is : "+ strKeywordValue);
1353 require('./utils/instrumentNodeEvents')(agentConfReader.corelateEventCallback, agentConfReader.wrapAsyncApi)
1354 }
1355 else if (allArguments[i].startsWith("enableBTMonitorTrace")) {
1356 agentConfReader.enableBTMonitorTrace = strKeywordValue
1357 util.logger.info(agentConfReader.currentTestRun + " | enableBTMonitorTrace : "+agentConfReader.enableBTMonitorTrace);
1358 }
1359 else if (allArguments[i].startsWith("enableBackendMonTrace")) {
1360 agentConfReader.enableBackendMonTrace = strKeywordValue
1361 util.logger.info(agentConfReader.currentTestRun + " | enableBackendMonTrace : "+agentConfReader.enableBackendMonTrace);
1362 }
1363 else if (allArguments[i].startsWith("ndMethodMonTraceLevel")) {
1364 agentConfReader.ndMethodMonTraceLevel = strKeywordValue
1365 util.logger.info(agentConfReader.currentTestRun + " | ndMethodMonTraceLevel : "+agentConfReader.ndMethodMonTraceLevel);
1366 }
1367 else if (allArguments[i].startsWith("captureHttpTraceLevel")) {
1368 agentConfReader.captureHttpTraceLevel = strKeywordValue
1369 util.logger.info(agentConfReader.currentTestRun + " | captureHttpTraceLevel : "+agentConfReader.captureHttpTraceLevel);
1370 }
1371 else if (allArguments[i].startsWith("ndMonitorInterval")) {
1372 agentConfReader.ndMonitorInterval = strKeywordValue;
1373 util.logger.info(agentConfReader.currentTestRun + " | ndMonitorInterval is : " + agentConfReader.ndMonitorInterval);
1374 }
1375 else if (allArguments[i].startsWith("enableBciDebug")) {
1376 agentConfReader.enableBciDebug = strKeywordValue
1377 util.logger.info(agentConfReader.currentTestRun + " | enableBciDebug value : " +agentConfReader.enableBciDebug);
1378 }
1379 else if (allArguments[i].startsWith("startInstrResTimeout")) {
1380 agentConfReader.startInstrResTimeout = strKeywordValue
1381 util.logger.info(agentConfReader.currentTestRun + " | startInstrResTimeout value : " +agentConfReader.startInstrResTimeout);
1382 }
1383 else if (allArguments[i].startsWith("captureHTTPReqFullFp")) {
1384 agentConfReader.httpReqCapturingSettings = NDHttpCaptureSettings.setHttpReqRespCaptureSettings(strKeywordValue,'HTTPCaptureReqFullFP',true)
1385 util.logger.info(agentConfReader.currentTestRun + " | HttpRequestCapturingSettings are : " , agentConfReader.httpReqCapturingSettings);
1386 }
1387 else if (allArguments[i].startsWith("captureHTTPRespFullFp")) {
1388 agentConfReader.httpResCapturingSettings = NDHttpCaptureSettings.setHttpReqRespCaptureSettings(strKeywordValue,'HTTPCaptureResFullFP',false)
1389 util.logger.info(agentConfReader.currentTestRun + " | HttpResponseCapturingSettings is : " ,agentConfReader.httpResCapturingSettings);
1390 }
1391 else if (allArguments[i].startsWith("enableCaptureNetDelay")) {
1392 agentConfReader.enableCaptureNetDelay = strKeywordValue
1393 util.logger.info(agentConfReader.currentTestRun + " | enableCaptureNetDelay : "+agentConfReader.enableCaptureNetDelay);
1394 }
1395 else if (allArguments[i].startsWith("ASSampleInterval=")) {
1396 if (strKeywordValue > 0) {
1397 asMangerObj.startMonitor();
1398 util.logger.info(agentConfReader.currentTestRun + " | enableAutosensordMonitor is Enabled ");
1399 }
1400 else {
1401 asMangerObj.stopMonitor();
1402 }
1403 }
1404 else if (allArguments[i].startsWith("enableBTMonitor")) {
1405 agentConfReader.enableBTMonitor = strKeywordValue;
1406 ndBTMonitor.handleBtMonitor();
1407 util.logger.info(agentConfReader.currentTestRun + " | enableBTMonitor is : " + agentConfReader.enableBTMonitor);
1408 }
1409 else if (allArguments[i].startsWith("enableBackendMonitor=")) {
1410 if (strKeywordValue > 0) {
1411 agentConfReader.isBackendMonitorEnabled = true;
1412 ndBackendMonitor.handleBackendMonitor();
1413 util.logger.info(agentConfReader.currentTestRun + " | enableBackendMonitor is : " + agentConfReader.isBackendMonitorEnabled);
1414 }
1415 else {
1416 agentConfReader.isBackendMonitorEnabled = false;
1417 ndBackendMonitor.handleBackendMonitor();
1418 }
1419 }
1420 else if (allArguments[i].startsWith("enableFPTrace=")) {}
1421 else if (allArguments[i].startsWith("nodeAsyncEventMonitor=")) {
1422 if (strKeywordValue > 0) {
1423 if(!agentConfReader.isAsyncEventMonitorEnable){
1424 agentConfReader.isAsyncEventMonitorEnable = true;
1425 ndAsyncMonitor.handleAsyncEventMonitor();
1426 util.logger.info(agentConfReader.currentTestRun + " | nodeAsyncEventMonitor is : " + agentConfReader.isAsyncEventMonitorEnable);
1427 }
1428 }
1429 else {
1430 if(agentConfReader.isAsyncEventMonitorEnable){
1431 agentConfReader.isAsyncEventMonitorEnable = false;
1432 ndAsyncMonitor.handleAsyncEventMonitor();
1433 }
1434 }
1435 }
1436 else if (allArguments[i].startsWith("enableUpdateLogMsgForNF=")) {
1437 if (strKeywordValue > 0) {
1438 agentConfReader.enableUpdateLogMsgForNF = strKeywordValue;
1439 util.logger.info(agentConfReader.currentTestRun + " | Runtime Change - enableUpdateLogMsgForNF is (ND-NF Integration) : " + agentConfReader.enableUpdateLogMsgForNF);
1440 instPrfParseobj.checkAndInstrumentLoggerObject();
1441 }else{
1442 agentConfReader.enableUpdateLogMsgForNF = 0;
1443 agentConfReader.mapForWinstonLogMeths = {};
1444 agentConfReader.mapForConsoleMeths = {};
1445 util.logger.info(agentConfReader.currentTestRun + " | Runtime Change - enableUpdateLogMsgForNF is (ND-NF Integration) : " + agentConfReader.enableUpdateLogMsgForNF);
1446 }
1447 }
1448 else if(allArguments[i].startsWith("FPMaxAllowedAgeInSec")){
1449 if(strKeywordValue > 1) {
1450 agentConfReader.FPMaxAllowedAgeInMillis = parseInt(strKeywordValue) ? parseInt(strKeywordValue) * 1000 : 0;
1451 util.logger.info(agentConfReader.currentTestRun + " | Applying run time - Starting timer for forcefully dumping flowpath , FPMaxAllowedAgeInMillis keyword value is : "+ agentConfReader.FPMaxAllowedAgeInMillis)
1452 if (agentConfReader.FPMaxAllowedAgeInMillis > 1000) {
1453 agentConfReader.forceFPDumpInterval = agentConfReader.FPMaxAllowedAgeInMillis * 3;
1454 handleFPWithForce.dumpFPForcefully(agentConfReader);
1455 }
1456 }
1457 else{
1458 if(agentConfReader.dumpFPForcefullyTimer) {
1459 clearInterval(agentConfReader.dumpFPForcefullyTimer);
1460 agentConfReader.dumpFPForcefullyTimer=undefined;
1461 util.logger.info(agentConfReader.currentTestRun + " | Applying run time - Stoping timer for forcefully dumping flowpath ");
1462 }
1463 }
1464 }
1465 else if (allArguments[i].startsWith("enableDumpAsyncId")) {
1466 agentConfReader.enableDumpAsyncId = (Number(strKeywordValue) == 1)?1:0;
1467 util.logger.info(agentConfReader.currentTestRun + " | enableDumpAsyncId : "+agentConfReader.enableDumpAsyncId);
1468 }
1469 else if (allArguments[i].startsWith("tDigestPercentileBT")) {
1470 btPercentile.stopMonitor();
1471 parseTDigestPercentileDATA(strKeyword,strKeywordValue)
1472 util.logger.info(agentConfReader.currentTestRun + " | tDigestPercentileBT : " + JSON.stringify(agentConfReader.tDigestPercentileBT));
1473 }
1474 else if (allArguments[i].startsWith("tDigestPercentileIP")) {
1475 ipPercentile.stopMonitor();
1476 parseTDigestPercentileDATA(strKeyword,strKeywordValue)
1477 util.logger.info(agentConfReader.currentTestRun + " | tDigestPercentileIP : " + JSON.stringify(agentConfReader.tDigestPercentileIP));
1478 }
1479 }
1480 }
1481 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1482}
1483
1484MessageHandler.handleRunTimeChangeCase = function(clientMsg,controlSocket) {
1485 try {
1486 if (clientMsg.indexOf("size=0;lmd=") != -1) {
1487 controlSocket.write("nd_control_rep:action=instrumentation_profile;result=Error:<Could not recieve modify message because of instrument profile having size 0.Check Instrument profile and retry again.>" + '\n');
1488
1489 util.logger.info(agentConfReader.currentTestRun + " | nd_control_rep:action=instrumentation_profile;result=Error:<Could not recieve modify message because of instrument profile having size 0.Check Instrument profile and retry again.>" + '\n');
1490 return;//No need to process more forwards
1491 }
1492 if (clientMsg.indexOf("ndMethodMonFile=NA;") != -1) {
1493 ndMethodMonitor.clearMmMap();
1494 ndMethodMonitor.clearMMList();
1495 instPrfParseobj.removeFilebasedKeyword('ndMethodMonFile');
1496 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1497 return;
1498 }
1499 if (clientMsg.indexOf("BTTConfig=NA;") != -1) {
1500 instPrfParseobj.removeFilebasedKeyword('BTTConfig')
1501 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1502 return;
1503 }
1504 if (clientMsg.indexOf("BTRuleConfig=NA;") != -1) {
1505
1506 btManager.clear();
1507 btGlobalRule.clearGlobalObj();
1508 btConfig.isPatternBasedRulePresnt = false;
1509 btRuleList.clearList();
1510 btConfig.resetBtId();
1511 instPrfParseobj.removeFilebasedKeyword('BTRuleConfig');
1512 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1513 return;
1514 }
1515 if (clientMsg.indexOf("ndBackendNamingRulesFile=NA;") != -1) {
1516 backendRecord.clearBackendRuleList()
1517 instPrfParseobj.removeFilebasedKeyword('ndBackendNamingRulesFile')
1518 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1519 return;
1520 }
1521 if (clientMsg.indexOf("HTTPStatsCondCfg=NA") != -1) {
1522 NDHttpConditionStats.resetValues();
1523 instPrfParseobj.removeFilebasedKeyword('HTTPStatsCondCfg')
1524 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1525 return;
1526 }
1527 if (clientMsg.indexOf("captureCustomData=NA") != -1) {
1528 NDSessionCaptureSettings.resetValues();
1529 instPrfParseobj.removeFilebasedKeyword('captureCustomData')
1530 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1531 return;
1532 }
1533 if (clientMsg.indexOf("NDEntryPointsFile=NA") != -1){
1534 NDEntryPointManager.reset();
1535 controlSocket.write("nd_control_rep:action=modify;result=Ok;" + '\n');
1536 return;
1537 }
1538 else if ((clientMsg.indexOf("HTTPStatsCondCfg") != -1) || (clientMsg.indexOf("NDHTTPRe") != -1)
1539 || (clientMsg.indexOf("ndMethodMonFile") != -1) || (clientMsg.indexOf("ndExceptionMonFile") != -1)
1540 || (clientMsg.indexOf("NDAppLogFile") != -1) || (clientMsg.indexOf("ndBackendMonFile") != -1)
1541 || (clientMsg.indexOf("cavNVURLFile") != -1) || (clientMsg.indexOf("NDInterfaceFile") != -1)
1542 || (clientMsg.indexOf("NDEntryPointsFile") != -1) || (clientMsg.indexOf("BTTConfig") != -1)
1543 || (clientMsg.indexOf("BTRuleConfig") != -1) || (clientMsg.indexOf("BTErrorRules") != -1)
1544 || (clientMsg.indexOf("ndBackendNamingRulesFile") != -1) || (clientMsg.indexOf("generateExceptionConfFile") != -1)
1545 || (clientMsg.indexOf("captureCustomData") != -1)|| (clientMsg.indexOf("instrProfile") != -1)) {
1546
1547 var messageArray = clientMsg.split(';');
1548 agentConfReader.runTimeChange = true
1549 instPrfParseobj.processInstrFileList(messageArray, controlSocket,makeDataAutoConnection,true);
1550 return;
1551 }
1552 MessageHandler.parseAllFieldsAndSetInModelIfAllSuccess(clientMsg,controlSocket);
1553
1554 }
1555 catch(e)
1556 {
1557 util.logger.warn(e);
1558 }
1559}
1560
1561MessageHandler.dumpMethodLastRecord = function(num,dataSocket){
1562 var tenRecord = num + "," + '\n';
1563 try
1564 {
1565 util.logger.info(agentConfReader.currentTestRun+ " | DumpMethodLastRecord "+tenRecord);
1566 dataSocket.write(tenRecord);
1567 }
1568 catch(e)
1569 {
1570 util.logger.warn(e);
1571 }
1572}
1573
1574
1575MessageHandler.handleClientMessageForTakingHeapDump = function(clientMsg,clientSocket) {
1576 var respMessage = "";
1577 /* if (agentConfReader.isHeapDumpInProgress) {
1578 try { //log a message and return from here
1579 //send error message to ndc and return
1580 respMessage = "nd_meta_data_rep:action=get_heap_dump;result=Error:<Unable to take heapDump Because Of BCI is already busy for previous request. previous request time :" + lastHeapdumpReqTime + ".>;\n";
1581 clientSocket.write(respMessage);
1582
1583 return;
1584 } catch (err) {
1585 util.logger.warn(agentConfReader.currentTestRun + " | nd_meta_data_rep:action=get_heap_dump;result=Error:<Unable to take heapDump Because Of BCI is already busy for previous request. previous request time :" + lastHeapdumpReqTime + ".>;\n" + err)
1586 }
1587
1588 }*/
1589 //Save the requested time for next time logging in case
1590
1591 lastHeapdumpReqTime = new Date().toString();
1592 agentConfReader.isHeapDumpInProgress = true;
1593 v8_profiler.takeHeapSnapShot(clientSocket);
1594};
1595
1596MessageHandler.findParametersAndValidate = function(clientMsg,clientSocket){
1597 var allFields = clientMsg.split(";");
1598 var respMessage = "";
1599 var fileName;
1600 var fileParentDir;
1601 var pathFromNDC;
1602 var file_path;
1603 var isOnlyLive = true;
1604 var heapDirExists =false;
1605 try {
1606 for (var i in allFields) {
1607
1608 //Collect file path and validate if parent dir is present or not ??
1609 if (-1 != allFields[i].indexOf("File=")) {
1610
1611 file_path = allFields[i].split("=")[1].toString();
1612 if (-1 != file_path.indexOf('.'))
1613 file_path = file_path.split('.')[0] + '.heapsnapshot';
1614 else
1615 file_path = file_path + '.heapsnapshot';
1616
1617 util.logger.info(agentConfReader.currentTestRun+" | File path for Heap Dump is : "+file_path);
1618 if(file_path.startsWith('/')) {
1619 fileParentDir = file_path.substring(0, file_path.lastIndexOf(path.sep));
1620 fileName = file_path.substring(file_path.lastIndexOf(path.sep) + 1, file_path.length);
1621 }
1622 else{
1623 if(file_path.indexOf('/') != -1) {
1624 fileParentDir = '/opt/cavisson/netdiagnostics/logs/heapdump/'+file_path.substring(0, file_path.lastIndexOf(path.sep));
1625 fileName = file_path.substring(file_path.lastIndexOf(path.sep) + 1, file_path.length);
1626 file_path = fileParentDir + '/' + fileName
1627 }
1628 else {
1629 fileParentDir = '/opt/cavisson/netdiagnostics/logs/heapdump';
1630 file_path = fileParentDir + '/' + file_path
1631 }
1632 }
1633 if (fs.existsSync(fileParentDir)) {
1634 heapDirExists = true;
1635 }
1636 else{
1637 try {
1638 execSync('mkdir -p '+fileParentDir)
1639 heapDirExists = true;
1640 }
1641 catch(e){
1642 }
1643 }
1644 }
1645 else if (-1 != allFields.indexOf("live")) {
1646 if (val == "1")
1647 isOnlyLive = true;
1648 else
1649 isOnlyLive = false;
1650 }
1651 }
1652 }catch(err){util.logger.warn(agentConfReader.currentTestRun+" | Invalid path for Heap dump file ."+err)}
1653
1654 try {
1655 if (!fs.existsSync(file_path)) {
1656 if (heapDirExists ) {
1657 isHeapDumpInProgress = true;
1658 v8_profiler.takeHeapSnapShot(file_path, clientSocket);
1659 isHeapDumpInProgress = false;
1660 }
1661 else{
1662 clientSocket.write("nd_meta_data_rep:action=get_heap_dump;result=Error:<Unable to take heapDump Because heap directory not exist>;\n");
1663 util.logger.warn(agentConfReader.currentTestRun+" | Unable to take heapDump Because heap directory not exist")
1664 }
1665 }
1666 else{
1667 respMessage = "nd_meta_data_rep:action=get_heap_dump;result=Error:<Unable to take heapDump Because file path specified by user, already exists. File name : " + file_path + ".>;\n";
1668 clientSocket.write(respMessage);
1669 util.logger.warn(agentConfReader.currentTestRun+" | ",respMessage);
1670 return ;
1671 }
1672 }
1673 catch (e) {
1674 clientSocket.write("nd_meta_data_rep:action=get_heap_dump;result=Error:<Unable to take heapDump, please check in agent logs>;\n");
1675 util.logger.warn(agentConfReader.currentTestRun+" | Unable to take heapDump " + e);
1676 }
1677
1678 return true;
1679};
1680
1681MessageHandler.startHealthCheckTimer = function(clientSocket) {
1682 if(agentConfReader.healthCheckInterval >0) {
1683 if(agentConfReader.reconnectTimer == undefined) { //If timer is defined then no need to run new timer
1684 agentConfReader.reconnectTimer = setInterval(function () {
1685 if(agentConfReader.runTimeChange || startInstrProcessing || agentConfReader.isHeapDumpInProgress) // If agent is busy with NDC, then dont send health check msg
1686 return;
1687
1688 if (healthCheckReply == false)++healthCheckReplyCount;
1689
1690 healthCheckReply = false;
1691 if (healthCheckReplyCount >= agentConfReader.healthCheckThreshold) { //After failing for some particular time, agent will switch over and close connection
1692 healthCheckReplyCount=-1;
1693 serverConfig.currentActiveServer.type = Backup
1694 util.logger.error(agentConfReader.currentTestRun,"| NDC is not responding over HeartBeat ,Closing connection with" +
1695 serverConfig.currentActiveServer.ndcHost+':'+serverConfig.currentActiveServer.ndcPort)
1696 //serverConfig.getNextBackupServer();
1697
1698 //serverConfig.isSwitchOver=1
1699 clientSocket.destroy();
1700 delete clientSocket;
1701 clientSocket = undefined
1702 NDConnectionManager.checkProtocolAndMakeConnection();
1703 //clientSocket.end();
1704 return;
1705 }
1706 if(recoonectCount == Number.MAX_VALUE)
1707 recoonectCount=0;
1708 var msg = "nd_control_req:action=reconnect;heartBeat " + (++recoonectCount) + ";\n";
1709 clientSocket.write(msg);
1710 if(agentConfReader.enableBciDebug > 1)
1711 util.logger.info(agentConfReader.currentTestRun+" | HeartBeat :",msg)
1712 }, agentConfReader.healthCheckInterval)
1713 }
1714 }
1715 else{
1716 clearInterval(agentConfReader.reconnectTimer) //Clearing reconnect timer interval
1717 agentConfReader.reconnectTimer = undefined;
1718 }
1719}
1720
1721MessageHandler.parseReRouteMessageAndUpdateClientInfo = function(clientmsg){
1722 //nd_control_req:action=reroute_ctrl_con;tier=T1;server=S1;instance=I1;ndcHost=192.168.1.66;ndcPort=7772;
1723 //In the case of tier=All ... , we should not update tier,server,instance properties
1724 try {
1725 var allFields = clientmsg.split(";");
1726 var ndcHost , ndcPort , bkpNdcHost , bkpNdcPort ,protocolType ;
1727 for (var eachKeyVal in allFields) {
1728
1729 var currString = allFields[eachKeyVal];
1730 if (!currString)
1731 continue;
1732
1733 var all = currString.split("=");
1734
1735 if (all.length <= 1)
1736 continue;
1737
1738 var key = all[0].toString();
1739
1740 if(key == "clusterMode"){
1741 agentConfReader.isClusterMode = parseInt(all[1])
1742 if(agentConfReader.isClusterMode)
1743 agentConfReader.requestType = 2;
1744 }else if(key == 'protocolType'){
1745 protocolType = all[1]
1746 }else if (key == "ndcHost") {
1747 ndcHost = all[1];
1748 if (ndcHost)
1749 agentConfReader.ndcHost = ndcHost;
1750 }
1751 else if (key == "ndcPort") {
1752 ndcPort = parseInt(all[1]);
1753 if (ndcPort)
1754 agentConfReader.ndcPort = ndcPort;
1755 }
1756 else if (key == "backupNdcHostName") {
1757 bkpNdcHost = all[1];
1758 agentConfReader.backupNdcHostName = bkpNdcHost;
1759 }
1760 else if (key == "backupNdcPort") {
1761 bkpNdcPort = all[1];
1762 agentConfReader.backupNdcPort = bkpNdcPort;
1763 }
1764 else if (key == "instance") {
1765 var value = all[1].toString();
1766
1767 if (value.toUpperCase() != "ALL")
1768 agentConfReader.instance = value;
1769 }
1770 else if (key == "server") {
1771 var value = all[1].toString();
1772
1773 if (value.toUpperCase() != "ALL")
1774 agentConfReader.server = value;
1775 }
1776 else if (key == "tier") {
1777 var value = all[1].toString();
1778
1779 if (value.toUpperCase() != "ALL")
1780 agentConfReader.tier = value;
1781 }
1782 }
1783
1784 if(!agentConfReader.isClusterMode){
1785 serverConfig.addServers([{host:agentConfReader.ndcHost,port:agentConfReader.ndcPort,type:1,protocols : protocolType}])
1786 serverConfig.currentActiveServer = serverConfig.serverList[0];
1787 }else{
1788 if(serverConfig.serverList.length > 1){
1789 util.logger.info(agentConfReader.currentTestRun+' | Removing first index from serverlist ',serverConfig.serverList)
1790 serverConfig.serverList.pop();
1791 }
1792 serverConfig.addServers([{host:agentConfReader.ndcHost,port:agentConfReader.ndcPort,type:0,protocols : protocolType}])
1793 serverConfig.currentActiveServer = serverConfig.serverList[1];
1794 util.logger.info(agentConfReader.currentTestRun+' | Setting the Assinged NDC ip:port on Index 1.',serverConfig.serverList)
1795 }
1796 if ( bkpNdcHost && bkpNdcPort && !agentConfReader.isClusterMode) {
1797 serverConfig.addServers([{host:agentConfReader.ndcHost,port:agentConfReader.ndcPort,type:0,protocols : protocolType}])
1798 util.logger.info(agentConfReader.currentTestRun +'Setting Backup NDC ip:port at index 1')
1799 }
1800 /*if(agentConfReader.isClusterMode){
1801 if(agentConfReader.reconnectTimer != undefined){
1802 clearInterval(agentConfReader.reconnectTimer) //Clearing reconnect timer interval
1803 agentConfReader.reconnectTimer = undefined;
1804 }
1805 }*/
1806 }catch(err){
1807 util.logger.warn(agentConfReader.currentTestRun + " | Cannot parse value : " + err);
1808 }
1809}
1810
1811MessageHandler.updateNDSettingFile = function(){
1812 try{
1813 if (agentConfReader.settingFileMode.toUpperCase() == "EXCLUSIVE") {
1814 var properties = null,list=[];
1815 try {
1816 properties = fs.readFileSync(agentConfReader.ndSettingFile).toString()
1817 }
1818 catch (err) {
1819 util.logger.warn(agentConfReader.currentTestRun + " | Cannot read propery file due to : " + err);
1820 return ;
1821 }
1822 if(!properties)return;
1823
1824 list = properties.trim().split('\n');
1825 for(var m =0;m<list.length;m++){
1826 if(list[m] &&list[m].startsWith('tier')) {
1827 list.splice(m,1);
1828 m =m-1
1829 }
1830 else if(list[m] &&list[m].startsWith('server')) {
1831 list.splice(m, 1);
1832 m =m-1
1833 }
1834 else if(list[m] &&list[m].startsWith('instance')) {
1835 list.splice(m, 1);
1836 m =m-1
1837 }
1838 else if(list[m] &&list[m].startsWith('ndcHost')) {
1839 list.splice(m, 1);
1840 m =m-1
1841 }
1842 else if(list[m] &&list[m].startsWith('ndcPort')) {
1843 list.splice(m, 1);
1844 m =m-1
1845 }
1846 else if(list[m] &&list[m].startsWith('backupNdcHostName')) {
1847 list.splice(m, 1);
1848 m =m-1
1849 }
1850 else if(list[m] &&list[m].startsWith('backupNdcPort')) {
1851 list.splice(m, 1);
1852 m =m-1
1853 }
1854 }
1855 list.push('tier='+agentConfReader.tier)
1856 list.push('server='+agentConfReader.server);
1857 list.push('instance='+agentConfReader.instance);
1858 if(agentConfReader.ndcHost)
1859 list.push('ndcHost='+agentConfReader.ndcHost);
1860 if(agentConfReader.ndcPort)
1861 list.push('ndcPort='+agentConfReader.ndcPort);
1862 if(agentConfReader.backupNdcHostName)
1863 list.push('backupNdcHostName='+agentConfReader.backupNdcHostName);
1864 if(agentConfReader.backupNdcPort)
1865 list.push('backupNdcPort='+agentConfReader.backupNdcPort);
1866 list = list.join('\n')
1867 util.logger.info(agentConfReader.currentTestRun,'| Updating ndsettings.conf file : ',list)
1868 fs.writeFileSync(agentConfReader.ndSettingFile, list)
1869 var stat = fs.statSync(agentConfReader.ndSettingFile) //Getting the stat of file .
1870 if(stat) {
1871 agentConfReader.lastModifiedSize = stat.size;
1872 agentConfReader.lastModifiedTime = stat.mtime;
1873 }
1874 }
1875 }
1876 catch (err) {
1877 util.logger.warn(agentConfReader.currentTestRun + " | Cannot read propery file due to : " + err);
1878 return ;
1879 }
1880}
1881
1882function responseTimeoutHandler(clientSocket){
1883 //Used for setting 1 minute time Period to break the CC ,if First Response in not received.
1884 try{
1885 firstResTimer = setTimeout(function(){
1886 if(!isfirstResReceived) {
1887 util.logger.warn(agentConfReader.currentTestRun + " | Unable to Receive the First nd_ctrl_msg Hence, Breaking the connection.: " );
1888 clientSocket.destroy();
1889 delete clientSocket;
1890 clientSocket = undefined
1891 NDConnectionManager.checkProtocolAndMakeConnection();
1892 }
1893 else if(isfirstResReceived){
1894 isfirstResReceived = false;
1895 }
1896 clearTimeout(firstResTimer);
1897 firstResTimer = undefined;
1898 },60000)
1899 }catch(e){
1900 util.logger.warn(agentConfReader.currentTestRun + " | Exception in First Response Timer :" + e);
1901 }
1902}
1903
1904module.exports = MessageHandler;