whatap 0.4.79 → 0.4.80

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.
Files changed (216) hide show
  1. package/.vscode/keep-context.json +3 -3
  2. package/README.md +51 -51
  3. package/bindings/darwin/x64/whatap.node +0 -0
  4. package/bindings/linux/ia32/whatap.node +0 -0
  5. package/bindings/linux/x64/whatap.node +0 -0
  6. package/help.txt +10 -10
  7. package/index.js +8 -8
  8. package/lib/conf/conf-sys-mon.js +100 -100
  9. package/lib/conf/config-default.js +238 -238
  10. package/lib/conf/configure.js +423 -423
  11. package/lib/conf/license.js +41 -41
  12. package/lib/control/cmd-config.js +23 -23
  13. package/lib/control/control-handler.js +344 -344
  14. package/lib/control/packagectr-helper.js +149 -149
  15. package/lib/core/agent.js +329 -328
  16. package/lib/core/interceptor.js +142 -142
  17. package/lib/core/request-agent.js +26 -26
  18. package/lib/counter/counter-manager.js +127 -127
  19. package/lib/counter/meter/meter-activex.js +66 -66
  20. package/lib/counter/meter/meter-httpc.js +57 -57
  21. package/lib/counter/meter/meter-resource.js +9 -9
  22. package/lib/counter/meter/meter-service.js +167 -167
  23. package/lib/counter/meter/meter-socket.io.js +50 -50
  24. package/lib/counter/meter/meter-sql.js +70 -70
  25. package/lib/counter/meter/meter-users.js +57 -57
  26. package/lib/counter/meter.js +183 -183
  27. package/lib/counter/task/activetransaction.js +93 -93
  28. package/lib/counter/task/agentinfo.js +105 -105
  29. package/lib/counter/task/counter-task.js +9 -9
  30. package/lib/counter/task/gcstat.js +34 -34
  31. package/lib/counter/task/heapmem.js +24 -24
  32. package/lib/counter/task/httpc.js +75 -75
  33. package/lib/counter/task/proc-cpu.js +28 -28
  34. package/lib/counter/task/realtimeuser.js +30 -30
  35. package/lib/counter/task/res/systemECSTask.js +54 -54
  36. package/lib/counter/task/res/systemKubeTask.js +52 -52
  37. package/lib/counter/task/res/util/awsEcsClientThread.js +166 -166
  38. package/lib/counter/task/res/util/linuxProcStatUtil.js +13 -13
  39. package/lib/counter/task/res-sys-cpu.js +61 -61
  40. package/lib/counter/task/service.js +201 -201
  41. package/lib/counter/task/socketio.js +29 -29
  42. package/lib/counter/task/sql.js +104 -104
  43. package/lib/counter/task/systemperf.js +42 -42
  44. package/lib/data/datapack-sender.js +256 -256
  45. package/lib/data/dataprofile-agent.js +136 -136
  46. package/lib/data/datatext-agent.js +135 -135
  47. package/lib/data/event-level.js +15 -15
  48. package/lib/data/test.js +48 -48
  49. package/lib/env/constants.js +20 -20
  50. package/lib/kube/kube-client.js +143 -143
  51. package/lib/lang/text-types.js +58 -58
  52. package/lib/logger.js +319 -319
  53. package/lib/net/netflag.js +54 -54
  54. package/lib/net/paramdef.js +40 -40
  55. package/lib/net/receiver.js +65 -65
  56. package/lib/net/security-master.js +182 -173
  57. package/lib/net/sender.js +140 -140
  58. package/lib/net/tcp-return.js +17 -17
  59. package/lib/net/tcp-session.js +285 -285
  60. package/lib/net/tcpreq-client-proxy.js +69 -69
  61. package/lib/net/tcprequest-mgr.js +57 -57
  62. package/lib/observers/cluster-observer.js +21 -21
  63. package/lib/observers/express-observer.js +214 -214
  64. package/lib/observers/file-observer.js +184 -184
  65. package/lib/observers/global-observer.js +30 -30
  66. package/lib/observers/http-observer.js +704 -704
  67. package/lib/observers/maria-observer.js +382 -382
  68. package/lib/observers/memcached-observer.js +55 -55
  69. package/lib/observers/mongo-observer.js +262 -265
  70. package/lib/observers/mongodb-observer.js +197 -197
  71. package/lib/observers/mongoose-observer.js +83 -83
  72. package/lib/observers/mssql-observer.js +205 -205
  73. package/lib/observers/mysql-observer.js +436 -394
  74. package/lib/observers/net-observer.js +72 -72
  75. package/lib/observers/pgsql-observer.js +295 -295
  76. package/lib/observers/process-observer.js +25 -25
  77. package/lib/observers/promise-observer.js +31 -31
  78. package/lib/observers/redis-observer.js +156 -109
  79. package/lib/observers/schedule-observer.js +66 -66
  80. package/lib/observers/socket.io-observer.js +54 -54
  81. package/lib/observers/stream-observer.js +19 -19
  82. package/lib/observers/thrift-observer.js +196 -196
  83. package/lib/pack/activestack-pack.js +54 -54
  84. package/lib/pack/counter-pack.js +649 -649
  85. package/lib/pack/errorsnap-pack.js +68 -68
  86. package/lib/pack/event-pack.js +53 -53
  87. package/lib/pack/hitmap-pack.js +62 -62
  88. package/lib/pack/hitmap-pack1.js +146 -146
  89. package/lib/pack/netstat.js +14 -14
  90. package/lib/pack/pack.js +49 -49
  91. package/lib/pack/packenum.js +60 -60
  92. package/lib/pack/param-pack.js +213 -213
  93. package/lib/pack/profile-pack.js +48 -48
  94. package/lib/pack/realtimeuser-pack.js +40 -40
  95. package/lib/pack/stat-general-pack.js +95 -95
  96. package/lib/pack/staterror-pack.js +119 -119
  97. package/lib/pack/stathttpc-pack.js +66 -66
  98. package/lib/pack/stathttpc-rec.js +78 -78
  99. package/lib/pack/statremote-pack.js +45 -45
  100. package/lib/pack/statservice-pack.js +62 -62
  101. package/lib/pack/statservice-pack1.js +87 -87
  102. package/lib/pack/statservice-rec.js +292 -292
  103. package/lib/pack/statservice-rec_dep.js +151 -151
  104. package/lib/pack/statsql-pack.js +69 -69
  105. package/lib/pack/statsql-rec.js +100 -100
  106. package/lib/pack/statuseragent-pack.js +43 -43
  107. package/lib/pack/tagcount-pack.js +398 -398
  108. package/lib/pack/tagctr.js +14 -14
  109. package/lib/pack/text-pack.js +49 -49
  110. package/lib/pack/time-count.js +25 -25
  111. package/lib/pack/websocket.js +14 -14
  112. package/lib/plugin/plugin-loadermanager.js +56 -56
  113. package/lib/plugin/plugin.js +75 -75
  114. package/lib/requestlog.js +326 -326
  115. package/lib/service/tx-record.js +288 -288
  116. package/lib/stat/stat-error.js +116 -116
  117. package/lib/stat/stat-httpc.js +97 -97
  118. package/lib/stat/stat-remoteip.js +46 -46
  119. package/lib/stat/stat-sql.js +112 -112
  120. package/lib/stat/stat-tranx.js +57 -57
  121. package/lib/stat/stat-tx-caller.js +159 -159
  122. package/lib/stat/stat-tx-domain.js +110 -110
  123. package/lib/stat/stat-tx-referer.js +111 -111
  124. package/lib/stat/stat-useragent.js +48 -48
  125. package/lib/stat/timingsender.js +72 -72
  126. package/lib/step/activestack-step.js +37 -37
  127. package/lib/step/dbc-step.js +35 -35
  128. package/lib/step/http-stepx.js +66 -66
  129. package/lib/step/message-step.js +39 -39
  130. package/lib/step/method-stepx.js +46 -46
  131. package/lib/step/resultset-step.js +39 -39
  132. package/lib/step/securemsg-step.js +43 -43
  133. package/lib/step/socket-step.js +46 -46
  134. package/lib/step/sql-stepx.js +67 -67
  135. package/lib/step/sqlxtype.js +15 -15
  136. package/lib/step/step.js +65 -65
  137. package/lib/step/stepenum.js +53 -53
  138. package/lib/trace/local-context.js +13 -13
  139. package/lib/trace/parsed-sql.js +13 -13
  140. package/lib/trace/profile-collector.js +70 -70
  141. package/lib/trace/serviceurl-pattern-detector.js +117 -117
  142. package/lib/trace/trace-context-manager.js +195 -195
  143. package/lib/trace/trace-context.js +134 -134
  144. package/lib/util/anylist.js +102 -102
  145. package/lib/util/array-util.js +100 -100
  146. package/lib/util/bitutil.js +27 -27
  147. package/lib/util/cardinality/hyperloglog.js +105 -105
  148. package/lib/util/cardinality/murmurhash.js +31 -31
  149. package/lib/util/cardinality/registerset.js +74 -74
  150. package/lib/util/config-util.js +17 -17
  151. package/lib/util/cypher.js +89 -89
  152. package/lib/util/datetimehelper.js +237 -229
  153. package/lib/util/dateutil.js +110 -106
  154. package/lib/util/errordata.js +20 -20
  155. package/lib/util/escape-literal-sql.js +342 -342
  156. package/lib/util/hashutil2.js +126 -126
  157. package/lib/util/hexa32.js +57 -57
  158. package/lib/util/index.js +78 -78
  159. package/lib/util/intint-map.js +47 -47
  160. package/lib/util/intkey-linkedmap.js +26 -26
  161. package/lib/util/intkey-map.js +25 -25
  162. package/lib/util/intset.js +82 -82
  163. package/lib/util/iputil.js +119 -119
  164. package/lib/util/iputil_x.js +526 -526
  165. package/lib/util/keygen.js +17 -17
  166. package/lib/util/kube-util.js +72 -72
  167. package/lib/util/longint-linkedmap.js +35 -35
  168. package/lib/util/longkey-linkedmap.js +25 -25
  169. package/lib/util/longlong-linkedmap.js +37 -37
  170. package/lib/util/nodeutil.js +67 -67
  171. package/lib/util/oidutil.js +96 -93
  172. package/lib/util/paramsecurity.js +78 -78
  173. package/lib/util/pathtree.js +172 -172
  174. package/lib/util/pre-process.js +13 -13
  175. package/lib/util/process-seq.js +165 -165
  176. package/lib/util/property-util.js +35 -35
  177. package/lib/util/request-queue.js +42 -42
  178. package/lib/util/requestdouble-queue.js +72 -72
  179. package/lib/util/resourceprofile.js +156 -156
  180. package/lib/util/seedrandom.js +242 -242
  181. package/lib/util/stop-watch.js +29 -29
  182. package/lib/util/string-util.js +9 -9
  183. package/lib/util/stringkey-linkedmap.js +28 -28
  184. package/lib/util/stringnum-linkedmap.js +31 -31
  185. package/lib/util/stringset.js +65 -65
  186. package/lib/util/system-util.js +9 -9
  187. package/lib/util/userid-util.js +57 -57
  188. package/lib/util/utils.js +67 -67
  189. package/lib/value/blob-value.js +61 -61
  190. package/lib/value/boolean-value.js +51 -51
  191. package/lib/value/decimal-value.js +71 -71
  192. package/lib/value/double-summary.js +105 -105
  193. package/lib/value/double-value.js +50 -50
  194. package/lib/value/float-array.js +59 -59
  195. package/lib/value/float-value.js +64 -64
  196. package/lib/value/int-array.js +59 -59
  197. package/lib/value/int-map-value.js +151 -151
  198. package/lib/value/int-value.js +64 -64
  199. package/lib/value/ip4-value.js +83 -83
  200. package/lib/value/list-value.js +136 -136
  201. package/lib/value/long-array.js +59 -59
  202. package/lib/value/long-summary.js +105 -105
  203. package/lib/value/map-value.js +175 -175
  204. package/lib/value/metric-value.js +157 -157
  205. package/lib/value/null-value.js +42 -42
  206. package/lib/value/number-value.js +34 -34
  207. package/lib/value/summary-value.js +29 -29
  208. package/lib/value/text-array.js +117 -117
  209. package/lib/value/text-value.js +59 -59
  210. package/lib/value/texthash-value.js +49 -49
  211. package/lib/value/value.js +14 -14
  212. package/lib/value/valueenum.js +99 -99
  213. package/logs/whatap-20230906.log +54 -0
  214. package/package.json +28 -28
  215. package/whatap.conf +1 -1
  216. package/logs/whatap-20230616.log +0 -13
package/lib/logger.js CHANGED
@@ -1,320 +1,320 @@
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 = process.env.WHATAP_CONF || 'whatap';
7
-
8
- var conf = require('./conf/configure'),
9
- DateUtil = require('./util/dateutil'),
10
- path = require('path'),
11
- fs = require('fs');
12
-
13
- var PID=process.pid;
14
-
15
- var initializer = {
16
- last : DateUtil.currentTime(),
17
- lastDateUnit : DateUtil.getDateUnit(),
18
- lastFileRotation : true,
19
- reset : function () {
20
- if(Logger.printWriter)
21
- Logger.printWriter.close();
22
- Logger.logfile = null;
23
- Logger.openFile();
24
- },
25
- process : function () {
26
- conf = require('./conf/configure');
27
- var now = DateUtil.currentTime();
28
- if(now > this.last + DateUtil.MILLIS_PER_HOUR) {
29
- this.last = now;
30
- Logger.clearOldLog();
31
- }
32
- if(this.lastFileRotation !== conf.log_rotation_enabled
33
- || this.lastDateUnit !== DateUtil.getDateUnit()
34
- || (Logger.logfile !== null && fs.existsSync(Logger.logfile) == false)) {
35
- try {
36
- if(Logger.printWriter){
37
- Logger.printWriter.close();
38
- }
39
- Logger.logfile = null;
40
- this.lastFileRotation = conf.log_rotation_enabled;
41
- this.lastDateUnit = DateUtil.getDateUnit();
42
- } catch(e) {
43
- console.log(e);
44
- }
45
- }
46
- try {
47
- Logger.openFile();
48
- } catch(e) {
49
- console.log(e);
50
- }
51
- }
52
- };
53
-
54
- var Logger = {
55
- ONAME : null,
56
- logfile : null,
57
- lastLog : {},
58
- printWriter : null,
59
- printAll : function (id, message, sysout) {
60
- try{
61
- var b_msg = this.build(id, message);
62
- if(this.printWriter != null) {
63
- this.printWriter.write(b_msg);
64
- this.printWriter.write('\n');
65
- } else {
66
- this.openFile();
67
- }
68
- sysout = (sysout || process.env.WHATAP_PRINT);
69
- if(sysout) {
70
- console.log(b_msg);
71
- }
72
- } catch (e){
73
- if(sysout) {
74
- console.log(e);
75
- }
76
- }
77
- },
78
- print : function (id, message, sysout) {
79
- if(this.checkOk(id, 10) == false) {
80
- return;
81
- }
82
- try{
83
- var b_msg = this.build(id, message);
84
- if(this.printWriter != null) {
85
- this.printWriter.write(b_msg);
86
- this.printWriter.write('\n');
87
- } else {
88
- this.openFile();
89
- }
90
- sysout = (sysout || process.env.WHATAP_PRINT);
91
- if(sysout) {
92
- console.log(b_msg);
93
- }
94
- } catch (e){
95
- if(sysout) {
96
- console.log(e);
97
- }
98
- }
99
- },
100
- initPrint : function (message) {
101
- try{
102
- var b_msg = this.build("WHATAP-INIT", message + " starting!");
103
- if(this.printWriter != null) {
104
- this.printWriter.write(b_msg);
105
- this.printWriter.write('\n');
106
- } else {
107
- this.openFile();
108
- }
109
- } catch (e){
110
-
111
- }
112
- },
113
- printError : function (id, message, err, sysout) {
114
- if(this.checkOk(id, 10) == false) {
115
- return;
116
- }
117
- this.print(id, message, false);
118
- sysout = (sysout || process.env.WHATAP_PRINT);
119
- if(sysout) {
120
- console.error(this.build(id, message));
121
- }
122
- if(err) {
123
- if(this.printWriter != null) {
124
- this.printWriter.write(err.stack);
125
- this.printWriter.write('\n');
126
- }
127
- }
128
- },
129
- checkOk : function (id, sec) {
130
- if(conf.log_print_enabled === false) { return false; }
131
- if(conf.isIgnoreLog && conf.isIgnoreLog(id)) { return false; }
132
-
133
- if(Object.keys(Logger.lastLog).length >= 1000) {
134
- Logger.lastLog = {};
135
- }
136
-
137
- if(sec > 0) {
138
- var last = Logger.lastLog[id];
139
- if(last == null) {
140
- last = 0;
141
- }
142
- var now = Date.now();
143
- if(now < last + sec * 1000) {
144
- return false;
145
- }
146
- Logger.lastLog[id] = now;
147
- }
148
- return true;
149
- },
150
- build : function (id, message) {
151
- var str = DateUtil.datetime(Date.now());
152
- str += ' [';
153
- str += id;
154
- str += '] <' + PID + '> ';
155
- str += message;
156
- return str;
157
- },
158
- openFile : function () {
159
- if(conf.log_file_enabled === false ) { return; }
160
- var log_prefix = WHATAP_CONF+"-";
161
-
162
- var root = conf['app.root'];
163
- if(root==null || root ==undefined){
164
- console.log('[WHATAP]Logger Error - WHATAP ROOT DIR IS NULL!!!!!!!!!');
165
- return;
166
- }
167
- var dir = path.join(root, 'logs');
168
- if(fs.existsSync(dir) == false) {
169
- fs.mkdirSync(dir);
170
- }
171
-
172
- if(conf.log_rotation_enabled) {
173
- var file = path.join(dir, log_prefix + DateUtil.yyyymmdd() + '.log');
174
- this.logfile = file;
175
- this.printWriter = fs.createWriteStream(file, {flags : 'a'});
176
- } else {
177
- var file = path.join(dir, 'whatap.log');
178
- this.logfile = file;
179
- this.printWriter = fs.createWriteStream(file, {flags : 'a'});
180
- }
181
-
182
- },
183
- clearOldLog : function () {
184
- if(conf.log_rotation_enabled === false || conf.log_enabled === false) { return; }
185
- if(conf.log_keep_days <= 0) { return; }
186
-
187
- var nowUnit = DateUtil.getDateUnit(),
188
- root = conf['app.root'],
189
- dir = path.join(root, 'logs'),
190
- log_prefix = WHATAP_CONF+"-";
191
-
192
- fs.readdir(dir, function (err, files) {
193
-
194
- for(var i=0; i<files.length; i++) {
195
- var stat = fs.statSync(path.join(dir, files[i]));
196
- if(stat.isDirectory()) {
197
- return true;
198
- }
199
- var name = files[i];
200
- if(name.indexOf(log_prefix) < 0) {
201
- return true;
202
- }
203
- var x = name.lastIndexOf('.');
204
- if(x < 0) {
205
- return true;
206
- }
207
- var date = name.substr(log_prefix.length + 1, (x - log_prefix.length - 1));
208
- if(date.length != 8) {
209
- return true;
210
- }
211
- var d = DateUtil.yyyymmdd(date);
212
- var fileUnit = DateUtil.getDateUnit(d);
213
- try {
214
- if (nowUnit - fileUnit > conflog_keep_days) {
215
- fs.unlinkSync(path.join(dir, files[i]));
216
- }
217
- } catch (e) { }
218
- }
219
-
220
- });
221
- },
222
- read : function( file, endpos, length , callback) {
223
-
224
- if ( file == null || length === 0)
225
- return null;
226
- if (file.startsWith(WHATAP_CONF) == false)
227
- return null;
228
-
229
-
230
-
231
- var root = conf['app.root'];
232
- if(root==null ){
233
- return null;
234
- }
235
- var dir = path.join(root, 'logs');
236
- var fileFullPath = path.join(dir, file);
237
-
238
- if(fs.existsSync(fileFullPath) == false) {
239
- return null;
240
- }
241
- const stats = fs.statSync(fileFullPath);
242
-
243
- if (endpos < 0) {
244
- endpos = stats.size;
245
- }
246
-
247
- var start = Math.max(0, endpos - length);
248
-
249
- if ( stats.size < start)
250
- return null;
251
-
252
- var available = stats.size - start;
253
- var readable = Math.min(available, length);
254
- var next=-1;
255
- var buffer = Buffer.alloc(readable);
256
- fs.open(fileFullPath, 'r', function (err, fd) {
257
- fs.read(fd, buffer, 0, buffer.length, start,function(e,l,b){
258
- next = endpos + l;
259
- if (next > stats.size) {
260
- next = -1;
261
- }
262
- callback(start, next,b.toString("utf8",0,l)) ;
263
- });
264
- fs.close(fd);
265
- });
266
-
267
- },
268
- getLogFiles : function () {
269
- var MapValue = require('./value/map-value');
270
- var log_prefix = WHATAP_CONF+"-";
271
-
272
- var o = new MapValue();
273
- if(conf.log_file_enabled === false ) { return o; }
274
- var root = conf['app.root'];
275
- if(root==null){
276
- return o;
277
- }
278
- var dir = path.join(root, 'logs');
279
- if(fs.existsSync(dir) === false) {
280
- return o;
281
- }
282
- var agoOneMonthTime=DateUtil.getMonth(Date.now(), -1);
283
-
284
- if(conf.log_rotation_enabled) {
285
- var files = fs.readdirSync(dir);
286
- files.forEach(function (file) {
287
- if (file.startsWith(log_prefix) == false) {
288
- return;
289
- }
290
- var x = file.lastIndexOf('.');
291
- if (x < 0) {
292
- return;
293
- }
294
- var date = file.substring(log_prefix.length , x);
295
- if (date.length != 8) {
296
- return;
297
- }
298
- if (DateUtil.yyyymmdd(date) < agoOneMonthTime) {
299
- return;
300
- }
301
- const stats = fs.statSync(dir + '/'+file);
302
- if(stats){
303
- o.putLong(file, stats.size);
304
- }
305
- });
306
- } else {
307
- if (fs.existsSync(dir + "/whatap.log")) {
308
- const stats = fs.statSync(dir + "/whatap.log");
309
- o.putLong(file, stats.size);
310
- }
311
- }
312
- return o;
313
- },
314
- initializer : initializer,
315
- CODE: {
316
-
317
- }
318
- };
319
-
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 = process.env.WHATAP_CONF || 'whatap';
7
+
8
+ var conf = require('./conf/configure'),
9
+ DateUtil = require('./util/dateutil'),
10
+ path = require('path'),
11
+ fs = require('fs');
12
+
13
+ var PID=process.pid;
14
+
15
+ var initializer = {
16
+ last : DateUtil.currentTime(),
17
+ lastDateUnit : DateUtil.getDateUnit(),
18
+ lastFileRotation : true,
19
+ reset : function () {
20
+ if(Logger.printWriter)
21
+ Logger.printWriter.close();
22
+ Logger.logfile = null;
23
+ Logger.openFile();
24
+ },
25
+ process : function () {
26
+ conf = require('./conf/configure');
27
+ var now = DateUtil.currentTime();
28
+ if(now > this.last + DateUtil.MILLIS_PER_HOUR) {
29
+ this.last = now;
30
+ Logger.clearOldLog();
31
+ }
32
+ if(this.lastFileRotation !== conf.log_rotation_enabled
33
+ || this.lastDateUnit !== DateUtil.getDateUnit()
34
+ || (Logger.logfile !== null && fs.existsSync(Logger.logfile) == false)) {
35
+ try {
36
+ if(Logger.printWriter){
37
+ Logger.printWriter.close();
38
+ }
39
+ Logger.logfile = null;
40
+ this.lastFileRotation = conf.log_rotation_enabled;
41
+ this.lastDateUnit = DateUtil.getDateUnit();
42
+ } catch(e) {
43
+ console.log(e);
44
+ }
45
+ }
46
+ try {
47
+ Logger.openFile();
48
+ } catch(e) {
49
+ console.log(e);
50
+ }
51
+ }
52
+ };
53
+
54
+ var Logger = {
55
+ ONAME : null,
56
+ logfile : null,
57
+ lastLog : {},
58
+ printWriter : null,
59
+ printAll : function (id, message, sysout) {
60
+ try{
61
+ var b_msg = this.build(id, message);
62
+ if(this.printWriter != null) {
63
+ this.printWriter.write(b_msg);
64
+ this.printWriter.write('\n');
65
+ } else {
66
+ this.openFile();
67
+ }
68
+ sysout = (sysout || process.env.WHATAP_PRINT);
69
+ if(sysout) {
70
+ console.log(b_msg);
71
+ }
72
+ } catch (e){
73
+ if(sysout) {
74
+ console.log(e);
75
+ }
76
+ }
77
+ },
78
+ print : function (id, message, sysout) {
79
+ if(this.checkOk(id, 10) == false) {
80
+ return;
81
+ }
82
+ try{
83
+ var b_msg = this.build(id, message);
84
+ if(this.printWriter != null) {
85
+ this.printWriter.write(b_msg);
86
+ this.printWriter.write('\n');
87
+ } else {
88
+ this.openFile();
89
+ }
90
+ sysout = (sysout || process.env.WHATAP_PRINT);
91
+ if(sysout) {
92
+ console.log(b_msg);
93
+ }
94
+ } catch (e){
95
+ if(sysout) {
96
+ console.log(e);
97
+ }
98
+ }
99
+ },
100
+ initPrint : function (message) {
101
+ try{
102
+ var b_msg = this.build("WHATAP-INIT", message + " starting!");
103
+ if(this.printWriter != null) {
104
+ this.printWriter.write(b_msg);
105
+ this.printWriter.write('\n');
106
+ } else {
107
+ this.openFile();
108
+ }
109
+ } catch (e){
110
+
111
+ }
112
+ },
113
+ printError : function (id, message, err, sysout) {
114
+ if(this.checkOk(id, 10) == false) {
115
+ return;
116
+ }
117
+ this.print(id, message, false);
118
+ sysout = (sysout || process.env.WHATAP_PRINT);
119
+ if(sysout) {
120
+ console.error(this.build(id, message));
121
+ }
122
+ if(err) {
123
+ if(this.printWriter != null) {
124
+ this.printWriter.write(err.stack);
125
+ this.printWriter.write('\n');
126
+ }
127
+ }
128
+ },
129
+ checkOk : function (id, sec) {
130
+ if(conf.log_print_enabled === false) { return false; }
131
+ if(conf.isIgnoreLog && conf.isIgnoreLog(id)) { return false; }
132
+
133
+ if(Object.keys(Logger.lastLog).length >= 1000) {
134
+ Logger.lastLog = {};
135
+ }
136
+
137
+ if(sec > 0) {
138
+ var last = Logger.lastLog[id];
139
+ if(last == null) {
140
+ last = 0;
141
+ }
142
+ var now = Date.now();
143
+ if(now < last + sec * 1000) {
144
+ return false;
145
+ }
146
+ Logger.lastLog[id] = now;
147
+ }
148
+ return true;
149
+ },
150
+ build : function (id, message) {
151
+ var str = DateUtil.datetime(Date.now());
152
+ str += ' [';
153
+ str += id;
154
+ str += '] <' + PID + '> ';
155
+ str += message;
156
+ return str;
157
+ },
158
+ openFile : function () {
159
+ if(conf.log_file_enabled === false ) { return; }
160
+ var log_prefix = WHATAP_CONF+"-";
161
+
162
+ var root = conf['app.root'];
163
+ if(root==null || root ==undefined){
164
+ console.log('[WHATAP]Logger Error - WHATAP ROOT DIR IS NULL!!!!!!!!!');
165
+ return;
166
+ }
167
+ var dir = path.join(root, 'logs');
168
+ if(fs.existsSync(dir) == false) {
169
+ fs.mkdirSync(dir);
170
+ }
171
+
172
+ if(conf.log_rotation_enabled) {
173
+ var file = path.join(dir, log_prefix + DateUtil.yyyymmdd() + '.log');
174
+ this.logfile = file;
175
+ this.printWriter = fs.createWriteStream(file, {flags : 'a'});
176
+ } else {
177
+ var file = path.join(dir, 'whatap.log');
178
+ this.logfile = file;
179
+ this.printWriter = fs.createWriteStream(file, {flags : 'a'});
180
+ }
181
+
182
+ },
183
+ clearOldLog : function () {
184
+ if(conf.log_rotation_enabled === false || conf.log_enabled === false) { return; }
185
+ if(conf.log_keep_days <= 0) { return; }
186
+
187
+ var nowUnit = DateUtil.getDateUnit(),
188
+ root = conf['app.root'],
189
+ dir = path.join(root, 'logs'),
190
+ log_prefix = WHATAP_CONF+"-";
191
+
192
+ fs.readdir(dir, function (err, files) {
193
+
194
+ for(var i=0; i<files.length; i++) {
195
+ var stat = fs.statSync(path.join(dir, files[i]));
196
+ if(stat.isDirectory()) {
197
+ return true;
198
+ }
199
+ var name = files[i];
200
+ if(name.indexOf(log_prefix) < 0) {
201
+ return true;
202
+ }
203
+ var x = name.lastIndexOf('.');
204
+ if(x < 0) {
205
+ return true;
206
+ }
207
+ var date = name.substr(log_prefix.length + 1, (x - log_prefix.length - 1));
208
+ if(date.length != 8) {
209
+ return true;
210
+ }
211
+ var d = DateUtil.yyyymmdd(date);
212
+ var fileUnit = DateUtil.getDateUnit(d);
213
+ try {
214
+ if (nowUnit - fileUnit > conflog_keep_days) {
215
+ fs.unlinkSync(path.join(dir, files[i]));
216
+ }
217
+ } catch (e) { }
218
+ }
219
+
220
+ });
221
+ },
222
+ read : function( file, endpos, length , callback) {
223
+
224
+ if ( file == null || length === 0)
225
+ return null;
226
+ if (file.startsWith(WHATAP_CONF) == false)
227
+ return null;
228
+
229
+
230
+
231
+ var root = conf['app.root'];
232
+ if(root==null ){
233
+ return null;
234
+ }
235
+ var dir = path.join(root, 'logs');
236
+ var fileFullPath = path.join(dir, file);
237
+
238
+ if(fs.existsSync(fileFullPath) == false) {
239
+ return null;
240
+ }
241
+ const stats = fs.statSync(fileFullPath);
242
+
243
+ if (endpos < 0) {
244
+ endpos = stats.size;
245
+ }
246
+
247
+ var start = Math.max(0, endpos - length);
248
+
249
+ if ( stats.size < start)
250
+ return null;
251
+
252
+ var available = stats.size - start;
253
+ var readable = Math.min(available, length);
254
+ var next=-1;
255
+ var buffer = Buffer.alloc(readable);
256
+ fs.open(fileFullPath, 'r', function (err, fd) {
257
+ fs.read(fd, buffer, 0, buffer.length, start,function(e,l,b){
258
+ next = endpos + l;
259
+ if (next > stats.size) {
260
+ next = -1;
261
+ }
262
+ callback(start, next,b.toString("utf8",0,l)) ;
263
+ });
264
+ fs.close(fd);
265
+ });
266
+
267
+ },
268
+ getLogFiles : function () {
269
+ var MapValue = require('./value/map-value');
270
+ var log_prefix = WHATAP_CONF+"-";
271
+
272
+ var o = new MapValue();
273
+ if(conf.log_file_enabled === false ) { return o; }
274
+ var root = conf['app.root'];
275
+ if(root==null){
276
+ return o;
277
+ }
278
+ var dir = path.join(root, 'logs');
279
+ if(fs.existsSync(dir) === false) {
280
+ return o;
281
+ }
282
+ var agoOneMonthTime=DateUtil.getMonth(Date.now(), -1);
283
+
284
+ if(conf.log_rotation_enabled) {
285
+ var files = fs.readdirSync(dir);
286
+ files.forEach(function (file) {
287
+ if (file.startsWith(log_prefix) == false) {
288
+ return;
289
+ }
290
+ var x = file.lastIndexOf('.');
291
+ if (x < 0) {
292
+ return;
293
+ }
294
+ var date = file.substring(log_prefix.length , x);
295
+ if (date.length != 8) {
296
+ return;
297
+ }
298
+ if (DateUtil.yyyymmdd(date) < agoOneMonthTime) {
299
+ return;
300
+ }
301
+ const stats = fs.statSync(dir + '/'+file);
302
+ if(stats){
303
+ o.putLong(file, stats.size);
304
+ }
305
+ });
306
+ } else {
307
+ if (fs.existsSync(dir + "/whatap.log")) {
308
+ const stats = fs.statSync(dir + "/whatap.log");
309
+ o.putLong(file, stats.size);
310
+ }
311
+ }
312
+ return o;
313
+ },
314
+ initializer : initializer,
315
+ CODE: {
316
+
317
+ }
318
+ };
319
+
320
320
  module.exports = Logger;