1 |
|
2 |
|
3 |
|
4 |
|
5 | var package_json = require('./../package.json')
|
6 | var winston = require('winston');
|
7 | var mkdirp = require('mkdirp');
|
8 | var fs = require('fs');
|
9 | var path = require('path');
|
10 | var os = require('os');
|
11 | var heapStatistics ;
|
12 | try{
|
13 | heapStatistics= require('v8').getHeapStatistics();
|
14 | }
|
15 | catch(e){console.log("cant find module v8")}
|
16 | function util (){}
|
17 | util.logger=undefined;
|
18 | util.instrumentedModules={};
|
19 | util.netjsagentVersion = package_json.version
|
20 | function checkAndCreateDir(logDir,os,pid,instanceName,logLevel){
|
21 | if (!fs.existsSync(logDir)) {
|
22 | mkdirp(logDir, function (err) {
|
23 | });
|
24 | }
|
25 | |
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 | if (instanceName) {
|
33 | var curr, newFile=[];
|
34 | var dir = fs.readdirSync(logDir)
|
35 | for (i in dir) {
|
36 | if (dir[i].indexOf(pid) !== -1) {
|
37 | var file = dir[i]
|
38 | if (file.indexOf('error') > -1) {
|
39 | if (os == 'window') {
|
40 | curr = logDir + '\\' + file;
|
41 | newFile[1] = logDir + '\\nd_node_error_' + instanceName + '.log'
|
42 | fs.renameSync(curr, newFile[1])
|
43 | }
|
44 | else if (os == 'linux') {
|
45 | curr = logDir + '/' + file;
|
46 | newFile[1] = logDir + '/nd_node_error_' + instanceName + '.log'
|
47 | fs.renameSync(curr, newFile[1])
|
48 | }
|
49 | }
|
50 | else {
|
51 | if (os == 'window') {
|
52 | curr = logDir + '\\' + file;
|
53 | newFile[0] = logDir + '\\nd_node_' + logLevel + '_' + instanceName + '.log'
|
54 | fs.renameSync(curr, newFile[0])
|
55 | }
|
56 | else if (os == 'linux') {
|
57 | curr = logDir + '/' + file;
|
58 | newFile[0] = logDir + '/nd_node_' + logLevel + '_' + instanceName + '.log'
|
59 | fs.renameSync(curr, newFile[0])
|
60 | }
|
61 | }
|
62 | }
|
63 | }
|
64 | if(newFile.length == 0){
|
65 | if (os == 'window')
|
66 | return [ logDir + '\\nd_node_' + logLevel + '_' + instanceName + '.log' , logDir + '\\nd_node_error_' + instanceName + '.log'];
|
67 | else if (os == 'linux')
|
68 | return [logDir + '/nd_node_' + logLevel + '_' + instanceName + '.log' , logDir + '/nd_node_error_' + instanceName + '.log']
|
69 |
|
70 | }
|
71 | else
|
72 | return newFile
|
73 | }
|
74 | else {
|
75 | if (os == 'window')
|
76 | return [ logDir + '\\nd_node_' + logLevel + '_' + pid + '.log' , logDir + '\\nd_node_error_' + pid + '.log'];
|
77 | else if (os == 'linux')
|
78 | return [logDir + '/nd_node_' + logLevel + '_' + pid + '.log' , logDir + '/nd_node_error_' + pid + '.log']
|
79 | }
|
80 | }
|
81 |
|
82 | util.initializeLogger = function(logLevel,BCILoggingMode,instanceName,isTestRunning)
|
83 | {
|
84 | try {
|
85 | var machine = os.type(),
|
86 | logDir,
|
87 | filename;
|
88 | if(machine.indexOf('Windows') != -1){
|
89 | logDir='C:\\netjsagent\\logs';
|
90 | filename = checkAndCreateDir(logDir,'window',process.pid,instanceName,logLevel)
|
91 |
|
92 | }
|
93 | else if(machine.indexOf('Linux') != -1) {
|
94 | logDir = "/tmp/cavisson/logs";
|
95 | filename = checkAndCreateDir(logDir,'linux',process.pid,instanceName,logLevel)
|
96 |
|
97 |
|
98 | }
|
99 | |
100 |
|
101 |
|
102 | if(BCILoggingMode && BCILoggingMode.toUpperCase() == 'OUTPUT_STREAM'){
|
103 | util.logger = new (winston.Logger)
|
104 | ({
|
105 | transports: [
|
106 | new (winston.transports.Console)({
|
107 | timestamp: function () {
|
108 | var date = new Date();
|
109 | return date;
|
110 | },
|
111 |
|
112 | colorize: true ,
|
113 | |
114 |
|
115 |
|
116 |
|
117 |
|
118 | })]
|
119 | });
|
120 | }
|
121 | else if(BCILoggingMode && (BCILoggingMode.toUpperCase() == 'FILE' || BCILoggingMode.toUpperCase() == 'BOTH')){
|
122 | util.logger = new (winston.Logger)
|
123 | ({
|
124 | transports: [
|
125 | new (winston.transports.File)({
|
126 | timestamp: function () {
|
127 | var date = new Date();
|
128 | return date;
|
129 | },
|
130 | name: 'info-file',
|
131 | filename: filename[0],
|
132 | level: logLevel,
|
133 | maxsize: 5242880,
|
134 | maxFiles: 3,
|
135 | json: false,
|
136 | formatter: function (options) {
|
137 |
|
138 | if(BCILoggingMode && BCILoggingMode.toUpperCase() == 'BOTH') {
|
139 | console.log(options.timestamp() + ' | ' + process.pid + ' | ' + options.level.toUpperCase() + ' | ' + (undefined !== options.message ? options.message : '') +
|
140 | (options.meta && Object.keys(options.meta).length ? '\n\t' + JSON.stringify(options.meta) : '' ))
|
141 | }
|
142 | return options.timestamp() + ' | ' + process.pid + ' | ' + options.level.toUpperCase() + ' | ' + (undefined !== options.message ? options.message : '') +
|
143 | (options.meta && Object.keys(options.meta).length ? '\n\t' + JSON.stringify(options.meta) : '' );
|
144 | }
|
145 | }),
|
146 | new (winston.transports.File)({
|
147 | timestamp: function () {
|
148 | var date = new Date();
|
149 | return date;
|
150 | },
|
151 | name: 'error-file',
|
152 | filename: filename[1],
|
153 | level: 'warn',
|
154 | handleExceptions: true,
|
155 | humanReadableUnhandledException: true,
|
156 | maxsize: 5242880,
|
157 | maxFiles: 2,
|
158 | json: false,
|
159 | formatter: function (options) {
|
160 |
|
161 | if(BCILoggingMode &&BCILoggingMode.toUpperCase() == 'BOTH') {
|
162 | console.error(options.timestamp() + ' | ' + process.pid + ' | ' + options.level.toUpperCase() + ' | ' + (undefined !== options.message ? options.message : '') +
|
163 | (options.meta && Object.keys(options.meta).length ? '\n\t' + JSON.stringify(options.meta) : '' ))
|
164 | }
|
165 | return options.timestamp() + ' | ' + process.pid + ' | ' + options.level.toUpperCase() + ' | ' + (undefined !== options.message ? options.message : '') +
|
166 | (options.meta && Object.keys(options.meta).length ? '\n\t' + JSON.stringify(options.meta) : '' );
|
167 | }
|
168 | })
|
169 | ]
|
170 | });
|
171 | }
|
172 | }
|
173 | catch(err){console.log(err.stack)}
|
174 |
|
175 |
|
176 | |
177 |
|
178 |
|
179 |
|
180 |
|
181 |
|
182 |
|
183 |
|
184 |
|
185 |
|
186 |
|
187 | |
188 |
|
189 |
|
190 | util.logger.info("-----------Initializing Cavisson NodeJS Agent ",util.netjsagentVersion,"------------",process.argv);
|
191 | util.logger.error("-----------Initializing Cavisson NodeJS Agent ",util.netjsagentVersion,"------------");
|
192 | util.logger.info('0 | command lines argument passed : ',process.argv);
|
193 | util.logger.info('0 | heap_size_limit :',(heapStatistics ? heapStatistics.heap_size_limit/1000000000 : 0)+' GB');
|
194 |
|
195 | }
|
196 |
|
197 | util.getRequestObject = function(functionArguments)
|
198 | {
|
199 | if(functionArguments == null)
|
200 |
|
201 | {
|
202 | return null;
|
203 | }
|
204 | else if(functionArguments.callee.caller == null)
|
205 | {
|
206 | return null;
|
207 | }
|
208 | var requestedArgument = util.checkArguments(functionArguments, "IncomingMessage");
|
209 |
|
210 |
|
211 | if(requestedArgument.raw || requestedArgument)
|
212 | return requestedArgument;
|
213 |
|
214 | else
|
215 | return util.getRequestObject(functionArguments.callee.caller.arguments);
|
216 | }
|
217 |
|
218 | util.checkArguments = function(args, type){
|
219 | var cavisson_details_obj = new Object();
|
220 | try {
|
221 | if(args == undefined){
|
222 | return;
|
223 | }
|
224 | for (var i = 0; i < args.length; i++) {
|
225 |
|
226 | if(args[i] === undefined)
|
227 | continue;
|
228 | if (args[i].constructor.name == type) {
|
229 | if(args[i].flowPathId) {
|
230 | cavisson_details_obj.flowPathId = args[i].flowPathId;
|
231 | cavisson_details_obj.timeInMillis = args[i].timeInMillis;
|
232 | cavisson_details_obj.res = args[i].res;
|
233 | cavisson_details_obj.req=args[i];
|
234 | return cavisson_details_obj;
|
235 | }
|
236 | }
|
237 | if(args[i].raw != undefined && args[i].raw !=null )
|
238 | {
|
239 | if(args[i].raw.req.flowPathId)
|
240 | {
|
241 | cavisson_details_obj.flowPathId = args[i].raw.req.flowPathId;
|
242 | cavisson_details_obj.timeInMillis = args[i].raw.req.timeInMillis;
|
243 | cavisson_details_obj.res = args[i].raw.res;
|
244 | cavisson_details_obj.req=args[i].raw.req;
|
245 | return cavisson_details_obj;
|
246 | }
|
247 |
|
248 | }
|
249 | }
|
250 | return false;
|
251 | }
|
252 | catch(err)
|
253 | {
|
254 | util.logger.warn("Error in checking arguments type" + err);
|
255 | }
|
256 |
|
257 | }
|
258 |
|
259 | util.canWrite= function (directory) {
|
260 | try {
|
261 | var stat = fs.statSync(directory);
|
262 |
|
263 |
|
264 | return !!( 2 & (stat.mode & parseInt('777', 8)).toString(8)[0] )
|
265 | }
|
266 | catch(err){util.logger.error(err)}
|
267 | }
|
268 |
|
269 | util.canRead= function (directory) {
|
270 | var stat = fs.statSync(directory);
|
271 |
|
272 |
|
273 | return !!( 1 & (stat.mode & parseInt('777', 8)).toString(8)[0] )
|
274 | }
|
275 |
|
276 | module.exports = util;
|