whatap 0.4.50 → 0.4.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/help.txt CHANGED
@@ -1,5 +1,5 @@
1
1
  //whatap.conf를 다른 것으로 사용하고 싶을때
2
- process.env.WHATAP_CONF = "wtap";
2
+ process.env.WHATAP_CONF = "whtap";
3
3
  process.env.WHATAP_NAME = "NODE-{ip2}-{ip3}"
4
4
 
5
5
  //플러그인추가
package/lib/core/agent.js CHANGED
@@ -7,8 +7,7 @@
7
7
  var os = require('os'),
8
8
  fs = require('fs'),
9
9
  path = require('path');
10
- const RequestLog = require('../requestlog');
11
-
10
+
12
11
  var Interceptor = require('./interceptor').Interceptor,
13
12
  HttpObserver = require('../observers/http-observer').HttpObserver,
14
13
  NetObserver = require('../observers/net-observer').NetObserver,
@@ -123,11 +122,7 @@ NodeAgent.prototype.init = function(cb) {
123
122
  return;
124
123
  }
125
124
  Logger.print('WHATAP-101', 'Finish initialize configuration...', false);
126
- if(self._conf['reqlog_enabled'] === true ) {
127
- Logger.print("WHATAP-REQLOG" , "ReqLog Init Start !!!! " , false);
128
- RequestLog.initializer.process();
129
- }
130
-
125
+
131
126
  self._securityMaster.run( function (err) {
132
127
  if(err) {
133
128
  Logger.printError('WHATAP-104', 'Failed to connect to whatap server', err, false);
@@ -41,9 +41,9 @@ TcpSession.prototype.open = function(cb){
41
41
  if(cb) return cb(new Error('PCODE is not defined..'));
42
42
  }
43
43
  if(this.isOpen()) {
44
- ++reconnectCnt;
45
- if(reconnectCnt === 3) {
46
- this.close();
44
+ ++self.reconnectCnt;
45
+ if(self.reconnectCnt === 3) {
46
+ self.close();
47
47
  }
48
48
  return cb(new Error('Already connected..'));
49
49
  }
@@ -6,7 +6,7 @@
6
6
 
7
7
  const { reqlog_x_txid } = require('../conf/config-default');
8
8
  const controlHandler = require('../control/control-handler');
9
- const RequestLog = require('../requestlog');
9
+
10
10
  var TraceContextManager = require('../trace/trace-context-manager'),
11
11
  URLPatternDetector = require('../trace/serviceurl-pattern-detector').Detector,
12
12
  DataTextAgent = require('../data/datatext-agent'),
@@ -402,11 +402,7 @@ HttpObserver.prototype.__endTransaction = function(error, ctx, req, res) {
402
402
 
403
403
  profile.oid = SecurityMaster.OID;
404
404
  profile.service = wtx;
405
- if(conf.reqlog_enabled === true) {
406
- ctx.endTime = wtx.endTime;
407
- ctx.elapsed = wtx.elapsed;
408
- RequestLog.setRecord(ctx);
409
- }
405
+
410
406
  //duplicated executed... so end() first
411
407
  TraceContextManager.end(ctx._id);
412
408
  setTimeout(function () {
@@ -4,154 +4,156 @@
4
4
  * can be found in the LICENSE file.
5
5
  */
6
6
 
7
- var fs = require('fs'),
8
- path = require('path');
9
-
7
+ var fs = require('fs'),
8
+ path = require('path'),
9
+ hahsUtil = require('../util/hashutil2'),
10
+ IPUtil = require('../util/iputil');
10
11
  function isLiveProcess(pid) {
11
- if(!pid || pid.length === 0) return true;
12
+ if(!pid || pid.length === 0) return true;
12
13
 
13
- try {
14
- return process.kill(pid,0)
15
- }
16
- catch (e) {
17
- return e.code === 'EPERM'
18
- }
14
+ try {
15
+ return process.kill(pid,0)
16
+ }
17
+ catch (e) {
18
+ return e.code === 'EPERM'
19
+ }
19
20
  }
20
21
 
21
22
  function LockCompetition(key){
22
- this.MAIN_KEY = key;
23
- var Configuration = require('./../conf/configure');
24
- var root = Configuration['app.root'];
25
- var cwd = process.cwd();
26
- if(root == undefined) {
27
- root = cwd;
28
- }
29
- this.rootFolder = path.join(root,'SSwhatapSS').replace('SSwhatapSS','\.'+key);
30
- this.LOCK_FILE = path.join(this.rootFolder,this.MAIN_KEY+'.lock');
31
- this.initComplete = false;
23
+ this.MAIN_KEY = key;
24
+ var Configuration = require('./../conf/configure');
25
+ var root = Configuration['app.root'];
26
+ var cwd = process.cwd();
27
+ if(root == undefined) {
28
+ root = cwd;
29
+ }
30
+ let gubun = hahsUtil.hash(IPUtil.getIp());
31
+ this.rootFolder = path.join(root,'SSwhatapSS').replace('SSwhatapSS','\.'+key + '/' + gubun);
32
+ this.LOCK_FILE = path.join(this.rootFolder,this.MAIN_KEY+'.lock');
33
+ this.initComplete = false;
32
34
  }
33
35
 
34
36
  LockCompetition.prototype.init = function(cb){
35
- if(this.initComplete) {
36
- if(cb) cb();
37
- }
38
- fs.mkdir( this.rootFolder, function(err){
39
- if(!err || err.code === 'EEXIST'){
40
- this.initComplete = true;
41
- if(cb) cb();
42
- }else{
43
- return console.error(err);
44
- }
45
- });
37
+ if(this.initComplete) {
38
+ if(cb) cb();
39
+ }
40
+ fs.mkdir( this.rootFolder, function(err){
41
+ if(!err || err.code === 'EEXIST'){
42
+ this.initComplete = true;
43
+ if(cb) cb();
44
+ }else{
45
+ return console.error(err);
46
+ }
47
+ });
46
48
  }
47
49
 
48
50
  LockCompetition.prototype.accessAuth = function(cb){
49
- var self = this;
50
- self.init(function(){
51
- var i = setInterval(function(){
52
- self.createLockFile(path.join(self.LOCK_FILE), function(result){
53
- if(result){
54
- self.checkFileIndex(1, function(idx){
55
- self.releaseLockFile( function(result){
56
- if(result){
57
- cb(idx);
58
- clearInterval(i);
59
- }
60
- })
61
- })
62
- }
63
- })
64
- },10)
65
- });
51
+ var self = this;
52
+ self.init(function(){
53
+ var i = setInterval(function(){
54
+ self.createLockFile(path.join(self.LOCK_FILE), function(result){
55
+ if(result){
56
+ self.checkFileIndex(1, function(idx){
57
+ self.releaseLockFile( function(result){
58
+ if(result){
59
+ cb(idx);
60
+ clearInterval(i);
61
+ }
62
+ })
63
+ })
64
+ }
65
+ })
66
+ },10)
67
+ });
66
68
  }
67
69
 
68
70
  LockCompetition.prototype.readLockFile = function(cb){
69
- fs.readFile( this.LOCK_FILE, 'utf-8', function(err,data){
70
- if(cb) cb(err, data);
71
- });
71
+ fs.readFile( this.LOCK_FILE, 'utf-8', function(err,data){
72
+ if(cb) cb(err, data);
73
+ });
72
74
  }
73
75
 
74
76
  LockCompetition.prototype.createLockFile = function(file, cb){
75
- var self = this;
76
- self.readLockFile(function(err, data){
77
- if(err){
78
- fs.writeFile(file, process.pid + '', 'utf-8', function(err,data){
79
- if(err){
80
- if(cb) return cb(false);
81
- }else{
82
- self.readLockFile( function(err, data){
83
- if(err && cb) return cb(false);
84
- if(parseInt(data) === process.pid){
85
- if(cb) return cb(true);
86
- }else{
87
- if(cb) return cb(false);
88
- }
89
- });
90
- }
91
- });
92
- }else{
93
- if(isLiveProcess(data)){
94
- if(cb) return cb(false);
95
- }else{
96
- fs.unlink(self.LOCK_FILE, function(err){
97
- if(err){
98
- if(cb) return cb(false);
99
- }else{
100
- if(cb) return cb(true);
101
- }
102
- });
103
- }
104
- }
105
- });
77
+ var self = this;
78
+ self.readLockFile(function(err, data){
79
+ if(err){
80
+ fs.writeFile(file, process.pid + '', 'utf-8', function(err,data){
81
+ if(err){
82
+ if(cb) return cb(false);
83
+ }else{
84
+ self.readLockFile( function(err, data){
85
+ if(err && cb) return cb(false);
86
+ if(parseInt(data) === process.pid){
87
+ if(cb) return cb(true);
88
+ }else{
89
+ if(cb) return cb(false);
90
+ }
91
+ });
92
+ }
93
+ });
94
+ }else{
95
+ if(isLiveProcess(data)){
96
+ if(cb) return cb(false);
97
+ }else{
98
+ fs.unlink(self.LOCK_FILE, function(err){
99
+ if(err){
100
+ if(cb) return cb(false);
101
+ }else{
102
+ if(cb) return cb(true);
103
+ }
104
+ });
105
+ }
106
+ }
107
+ });
106
108
  }
107
109
 
108
110
  LockCompetition.prototype.releaseLockFile = function(cb){
109
- var self = this;
110
- fs.readFile(self.LOCK_FILE, 'utf-8', function(err,data){
111
- if(err && cb) return cb(err, data);
111
+ var self = this;
112
+ fs.readFile(self.LOCK_FILE, 'utf-8', function(err,data){
113
+ if(err && cb) return cb(err, data);
112
114
 
113
- if(parseInt(data) === process.pid){
114
- fs.unlink(self.LOCK_FILE, function(err){
115
- if(err){
116
- if(cb) return cb(false);
117
- }else{
118
- if(cb) return cb(true);
119
- }
120
- });
121
- }else{
122
- if(cb) return cb(false);
123
- }
124
- });
115
+ if(parseInt(data) === process.pid){
116
+ fs.unlink(self.LOCK_FILE, function(err){
117
+ if(err){
118
+ if(cb) return cb(false);
119
+ }else{
120
+ if(cb) return cb(true);
121
+ }
122
+ });
123
+ }else{
124
+ if(cb) return cb(false);
125
+ }
126
+ });
125
127
  }
126
128
 
127
129
  LockCompetition.prototype.checkFileIndex = function(idx,cb){
128
- var self = this;
129
- idx = idx || 1;
130
- fs.readFile(path.join(self.rootFolder, self.MAIN_KEY+idx), 'utf-8', function(err,data){
131
- if(err){
132
- fs.writeFile(path.join(self.rootFolder, self.MAIN_KEY+idx), process.pid + '', 'utf-8', function(err){
133
- if(err){
134
- self.checkFileIndex(++idx,cb);
135
- }else{
136
- if(cb) cb(idx);
137
- }
138
- });
139
- }else{
140
- if( isLiveProcess(data) ){
141
- self.checkFileIndex(++idx,cb);
142
- }else{
143
- fs.writeFile(path.join(self.rootFolder, self.MAIN_KEY+idx), process.pid + '', 'utf-8', function(result){
144
- if(err){
145
- self.checkFileIndex(++idx,cb);
146
- }else{
147
- if(cb) cb(idx);
148
- }
149
- });
150
- }
151
- }
152
- })
130
+ var self = this;
131
+ idx = idx || 1;
132
+ fs.readFile(path.join(self.rootFolder, self.MAIN_KEY+idx), 'utf-8', function(err,data){
133
+ if(err){
134
+ fs.writeFile(path.join(self.rootFolder, self.MAIN_KEY+idx), process.pid + '', 'utf-8', function(err){
135
+ if(err){
136
+ self.checkFileIndex(++idx,cb);
137
+ }else{
138
+ if(cb) cb(idx);
139
+ }
140
+ });
141
+ }else{
142
+ if( isLiveProcess(data) ){
143
+ self.checkFileIndex(++idx,cb);
144
+ }else{
145
+ fs.writeFile(path.join(self.rootFolder, self.MAIN_KEY+idx), process.pid + '', 'utf-8', function(result){
146
+ if(err){
147
+ self.checkFileIndex(++idx,cb);
148
+ }else{
149
+ if(cb) cb(idx);
150
+ }
151
+ });
152
+ }
153
+ }
154
+ })
153
155
  }
154
156
 
155
157
  module.exports = function(key){
156
- return new LockCompetition(key);
158
+ return new LockCompetition(key);
157
159
  };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "whatap",
3
3
  "homepage": "http://www.whatap.io",
4
- "version": "0.4.50",
5
- "releaseDate": "20220711",
4
+ "version": "0.4.53",
5
+ "releaseDate": "20220714",
6
6
  "description": "Monitoring and Profiling Service",
7
7
  "main": "index.js",
8
8
  "scripts": {},
package/lib/requestlog.js DELETED
@@ -1,327 +0,0 @@
1
- /**
2
- * Copyright 2016 the WHATAP project authors. All rights reserved.
3
- * Use of this source code is governed by a license that
4
- * can be found in the LICENSE file.
5
- */
6
- var WHATAP_CONF = 'reqlog';
7
-
8
- var conf = require('./conf/configure'),
9
- DateUtil = require('./util/dateutil'),
10
- IPUtil = require('./util/iputil'),
11
- path = require('path'),
12
- fs = require('fs'),
13
- LOGGER = require('./logger');
14
-
15
- var PID=process.pid;
16
-
17
- var initializer = {
18
- last : DateUtil.currentTime(),
19
- lastDateUnit : DateUtil.getDateUnit(),
20
- lastFileRotation : true,
21
- reset : function () {
22
- if(RequestLog.printWriter) RequestLog.printWriter.close();
23
- RequestLog.logfile = null;
24
- RequestLog.openFile();
25
- },
26
- process : function () {
27
- conf = require('./conf/configure');
28
- var now = DateUtil.currentTime();
29
- if(now > this.last + DateUtil.MILLIS_PER_HOUR) {
30
- this.last = now;
31
- RequestLog.clearOldLog();
32
- }
33
- if(this.lastFileRotation !== conf.reqlog_rotation_enabled
34
- || this.lastDateUnit !== DateUtil.getDateUnit()
35
- || (RequestLog.logfile !== null && fs.existsSync(RequestLog.logfile) == false)) {
36
- try {
37
- if(RequestLog.printWriter){
38
- RequestLog.printWriter.close();
39
- }
40
- RequestLog.logfile = null;
41
- this.lastFileRotation = conf.reqlog_rotation_enabled;
42
- this.lastDateUnit = DateUtil.getDateUnit();
43
- } catch(e) {
44
- console.log(e);
45
- }
46
- }
47
- try {
48
- RequestLog.openFile();
49
- } catch(e) {
50
- console.log(e);
51
- return false;
52
- }
53
- return true;
54
- }
55
- };
56
-
57
- var RequestLog = {
58
- ONAME : null,
59
- logfile : null,
60
- lastLog : {},
61
- printWriter : null,
62
- setRecord : async function (ctx) {
63
- try{
64
- if(this.printWriter != null) {
65
- this.buildRecord(ctx).then(e => {
66
- this.printWriter.write(e + '\n');
67
- }).catch((err)=> {
68
- LOGGER.printError('[WHATAP-LOG]' ,'setRecord_1' , err , false);
69
- });
70
- } else {
71
- this.openFile();
72
- }
73
- } catch (e){
74
- LOGGER.printError('[WHATAP-LOG]' ,'setRecord_2' , err , false);
75
- }
76
- },
77
- checkOk : function (id, sec) {
78
- if(Object.keys(RequestLog.lastLog).length >= 1000) {
79
- RequestLog.lastLog = {};
80
- }
81
-
82
- if(sec > 0) {
83
- var last = RequestLog.lastLog[id];
84
- if(last == null) {
85
- last = 0;
86
- }
87
- var now = Date.now();
88
- if(now < last + sec * 1000) {
89
- return false;
90
- }
91
- RequestLog.lastLog[id] = now;
92
- }
93
- return true;
94
- },
95
- buildRecord : async function (ctx) {
96
- var str = '';
97
- let seperator = conf.reqlog_seperator;
98
- str += "stime=" + ctx.start_time;
99
- if (conf.reqlog_x_etime) {
100
- str += seperator + "etime=" + ctx.endTime;
101
- }
102
- if (conf.reqlog_x_elapsed) {
103
- str += seperator + "elapsed=" + ctx.elapsed;
104
- }
105
- if (conf.reqlog_x_url) {
106
- str += seperator + "url=" + ctx.service_name;
107
- }
108
- if (conf.reqlog_x_httphost && ctx.http_host!=null) {
109
- str += seperator + "httphost=" + ctx.http_host;
110
- }
111
- if (conf.reqlog_x_method) {
112
- str += seperator + "method=" + ctx.http_method;
113
- }
114
- if (conf.reqlog_x_ip && ctx.remoteIp != 0) {
115
- str += seperator + "ip=" + IPUtil.intToString(ctx.remoteIp);
116
- }
117
- if (conf.reqlog_x_status) {
118
- str += seperator + "status=" + ctx.status;
119
- }
120
- /*
121
- if (conf.reqlog_x_wcid && x.wclientId != 0) {
122
- str += seperator + "wcid=" + x.wclientId;
123
- }
124
- */
125
- if (conf.reqlog_x_login && ctx.login != null) {
126
- str += seperator + "login=" + ctx.login;
127
- }
128
-
129
- if (conf.reqlog_x_error && ctx.error != null && ctx.statusMessage !== undefined) {
130
- str += seperator + "errMsg=" + ctx.statusMessage;
131
- }
132
- if (conf.reqlog_x_useragent) {
133
- str += seperator + "userAgent=" + ctx.userAgentString;
134
- }
135
- if (conf.reqlog_x_txid) {
136
- str += seperator + "txid=" + ctx.txid;
137
- }
138
- if (ctx.custid != null) {
139
- if (conf.reqlog_x_custid) {
140
- str += seperator + "custid=" + ctx.custid;
141
- } else if (conf.reqlog_x_gtid) {
142
- str += seperator + "gtid=" + ctx.custid;
143
- }
144
- }
145
- if (conf.reqlog_x_mtid && ctx.mtid != 0) {
146
- str += seperator + "mtid=" + ctx.mtid;
147
- if (conf.reqlog_x_mdepth) {
148
- str += seperator + "mdepth=" + ctx.mdepth;
149
- }
150
- }
151
- /*
152
- if (conf.reqlog_x_dbc && x.dbc_time > 0) {
153
- str += seperator + "dbcTime=" + x.dbc_time;
154
- }
155
- */
156
- if (conf.reqlog_x_sql && ctx.sql_count > 0) {
157
- str += seperator + "sqlCnt=" + ctx.sql_count;
158
- str += seperator + "sqlTime=" + ctx.sql_time;
159
- }
160
- if (conf.reqlog_x_httpc && ctx.httpc_count > 0) {
161
- str += seperator + "httpCallCnt=" + ctx.httpc_count;
162
- str += seperator + "httpCallTime=" + ctx.httpc_time;
163
- }
164
- if (conf.reqlog_x_rs && ctx.rs_count > 0) {
165
- str += seperator + "rsCnt=" + ctx.rs_count;
166
- str += seperator + "rsTime=" + ctx.rs_time;
167
- }
168
-
169
- return str;
170
- },
171
- openFile : function () {
172
- if(conf.log_file_enabled === false ) { return; }
173
- var log_prefix = WHATAP_CONF+"-";
174
-
175
- var root = conf['app.root'];
176
- if(root==null || root ==undefined){
177
- console.log('[WHATAP]RequestLog Error - WHATAP ROOT DIR IS NULL!!!!!!!!!');
178
- return;
179
- }
180
- var dir = path.join(root, 'logs');
181
- if(fs.existsSync(dir) == false) {
182
- fs.mkdirSync(dir);
183
- }
184
-
185
- if(conf.reqlog_rotation_enabled) {
186
- var file = path.join(dir, log_prefix + DateUtil.yyyymmdd() + '.log');
187
- this.logfile = file;
188
- this.printWriter = fs.createWriteStream(file, {flags : 'a'});
189
- } else {
190
- var file = path.join(dir, 'reqlog.log');
191
- this.logfile = file;
192
- this.printWriter = fs.createWriteStream(file, {flags : 'a'});
193
- }
194
-
195
- },
196
- clearOldLog : function () {
197
- if(conf.reqlog_rotation_enabled === false || conf.reqlog_enabled === false) { return; }
198
- if(conf.reqlog_keep_days <= 0) { return; }
199
-
200
- var nowUnit = DateUtil.getDateUnit(),
201
- root = conf['app.root'],
202
- dir = path.join(root, 'logs'),
203
- log_prefix = WHATAP_CONF+"-";
204
-
205
- fs.readdir(dir, function (err, files) {
206
-
207
- for(var i=0; i<files.length; i++) {
208
- var stat = fs.statSync(path.join(dir, files[i]));
209
- if(stat.isDirectory()) {
210
- return true;
211
- }
212
- var name = files[i];
213
- if(name.indexOf(log_prefix) < 0) {
214
- return true;
215
- }
216
- var x = name.lastIndexOf('.');
217
- if(x < 0) {
218
- return true;
219
- }
220
- var date = name.substr(log_prefix.length + 1, (x - log_prefix.length - 1));
221
- if(date.length != 8) {
222
- return true;
223
- }
224
- var d = DateUtil.yyyymmdd(date);
225
- var fileUnit = DateUtil.getDateUnit(d);
226
- try {
227
- if (nowUnit - fileUnit > conflog_keep_days) {
228
- fs.unlinkSync(path.join(dir, files[i]));
229
- }
230
- } catch (e) { }
231
- }
232
-
233
- });
234
- },
235
- read : function( file, endpos, length , callback) {
236
-
237
- if ( file == null || length === 0)
238
- return null;
239
- if (file.startsWith(WHATAP_CONF) == false) return null;
240
-
241
- var root = conf['app.root'];
242
- if(root==null ){
243
- return null;
244
- }
245
- var dir = path.join(root, 'logs');
246
- var fileFullPath = path.join(dir, file);
247
-
248
- if(fs.existsSync(fileFullPath) == false) {
249
- return null;
250
- }
251
- const stats = fs.statSync(fileFullPath);
252
-
253
- if (endpos < 0) {
254
- endpos = stats.size;
255
- }
256
-
257
- var start = Math.max(0, endpos - length);
258
-
259
- if ( stats.size < start)
260
- return null;
261
-
262
- var available = stats.size - start;
263
- var readable = Math.min(available, length);
264
- var next=-1;
265
- var buffer = Buffer.alloc(readable);
266
- fs.open(fileFullPath, 'r', function (err, fd) {
267
- fs.read(fd, buffer, 0, buffer.length, start,function(e,l,b){
268
- next = endpos + l;
269
- if (next > stats.size) {
270
- next = -1;
271
- }
272
- callback(start, next,b.toString("utf8",0,l)) ;
273
- });
274
- fs.close(fd);
275
- });
276
-
277
- },
278
- getLogFiles : function () {
279
- var MapValue = require('./value/map-value');
280
- var log_prefix = WHATAP_CONF+"-";
281
-
282
- var o = new MapValue();
283
- if(conf.log_file_enabled === false ) { return o; }
284
- var root = conf['app.root'];
285
- if(root==null){
286
- return o;
287
- }
288
- var dir = path.join(root, 'logs');
289
- if(fs.existsSync(dir) === false) {
290
- return o;
291
- }
292
- var agoOneMonthTime=DateUtil.getMonth(Date.now(), -1);
293
-
294
- if(conf.reqlog_rotation_enabled) {
295
- var files = fs.readdirSync(dir);
296
- files.forEach(function (file) {
297
- if (file.startsWith(log_prefix) == false) {
298
- return;
299
- }
300
- var x = file.lastIndexOf('.');
301
- if (x < 0) {
302
- return;
303
- }
304
- var date = file.substring(log_prefix.length , x);
305
- if (date.length != 8) {
306
- return;
307
- }
308
- if (DateUtil.yyyymmdd(date) < agoOneMonthTime) {
309
- return;
310
- }
311
- const stats = fs.statSync(dir + '/'+file);
312
- if(stats){
313
- o.putLong(file, stats.size);
314
- }
315
- });
316
- } else {
317
- if (fs.existsSync(dir + "/reqlog.log")) {
318
- const stats = fs.statSync(dir + "/reqlog.log");
319
- o.putLong(file, stats.size);
320
- }
321
- }
322
- return o;
323
- },
324
- initializer : initializer
325
- };
326
-
327
- module.exports = RequestLog;