whatap 1.0.1 → 1.0.2

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 (198) hide show
  1. package/README.md +32 -78
  2. package/lib/conf/conf-sys-mon.js +101 -0
  3. package/lib/conf/config-default.js +10 -3
  4. package/lib/conf/configure.js +369 -349
  5. package/lib/conf/license.js +1 -1
  6. package/lib/control/cmd-config.js +24 -0
  7. package/lib/control/control-handler.js +367 -0
  8. package/lib/control/packagectr-helper.js +34 -3
  9. package/lib/core/agent.js +176 -882
  10. package/lib/core/interceptor.js +6 -6
  11. package/lib/core/request-agent.js +27 -0
  12. package/lib/core/shimmer.js +82 -36
  13. package/lib/counter/counter-manager.js +79 -8
  14. package/lib/counter/meter/meter-activex.js +67 -0
  15. package/lib/counter/meter/meter-httpc.js +57 -0
  16. package/lib/counter/meter/meter-resource.js +9 -0
  17. package/lib/counter/meter/meter-service.js +168 -0
  18. package/lib/counter/meter/meter-socket.io.js +51 -0
  19. package/lib/counter/meter/meter-sql.js +71 -0
  20. package/lib/counter/meter/meter-users.js +58 -0
  21. package/lib/counter/meter.js +183 -0
  22. package/lib/counter/task/activetransaction.js +68 -17
  23. package/lib/counter/task/agentinfo.js +107 -0
  24. package/lib/{system → counter/task}/gc-action.js +27 -74
  25. package/lib/counter/task/gcstat.js +34 -0
  26. package/lib/counter/task/heapmem.js +25 -0
  27. package/lib/counter/task/httpc.js +76 -0
  28. package/lib/counter/task/metering-info.js +125 -0
  29. package/lib/counter/task/proc-cpu.js +29 -0
  30. package/lib/counter/task/realtimeuser.js +31 -0
  31. package/lib/counter/task/res/systemECSTask.js +39 -0
  32. package/lib/counter/task/res/systemKubeTask.js +53 -0
  33. package/lib/counter/task/res/util/awsEcsClientThread.js +218 -0
  34. package/lib/counter/task/res/util/linuxProcStatUtil.js +14 -0
  35. package/lib/counter/task/res-sys-cpu.js +62 -0
  36. package/lib/counter/task/service.js +202 -0
  37. package/lib/counter/task/socketio.js +30 -0
  38. package/lib/counter/task/sql.js +105 -0
  39. package/lib/counter/task/systemperf.js +43 -0
  40. package/lib/data/datapack-sender.js +289 -0
  41. package/lib/data/dataprofile-agent.js +162 -0
  42. package/lib/data/datatext-agent.js +135 -0
  43. package/lib/data/event-level.js +15 -0
  44. package/lib/data/test.js +49 -0
  45. package/lib/data/zipprofile.js +197 -0
  46. package/lib/env/constants.js +21 -0
  47. package/lib/error/error-handler.js +437 -0
  48. package/lib/io/data-inputx.js +13 -3
  49. package/lib/io/data-outputx.js +268 -206
  50. package/lib/kube/kube-client.js +144 -0
  51. package/lib/lang/text-types.js +58 -0
  52. package/lib/logger.js +6 -6
  53. package/lib/logsink/line-log-util.js +87 -0
  54. package/lib/logsink/line-log.js +12 -0
  55. package/lib/logsink/log-sender.js +78 -0
  56. package/lib/logsink/log-tracer.js +40 -0
  57. package/lib/logsink/sender-util.js +56 -0
  58. package/lib/logsink/zip/zip-send.js +177 -0
  59. package/lib/net/netflag.js +55 -0
  60. package/lib/net/receiver.js +66 -0
  61. package/lib/net/security-master.js +139 -20
  62. package/lib/net/sender.js +141 -0
  63. package/lib/net/tcp-return.js +18 -0
  64. package/lib/net/tcp-session.js +286 -0
  65. package/lib/net/tcpreq-client-proxy.js +70 -0
  66. package/lib/net/tcprequest-mgr.js +58 -0
  67. package/lib/observers/apollo-server-observer.js +33 -27
  68. package/lib/observers/cluster-observer.js +22 -0
  69. package/lib/observers/express-observer.js +215 -0
  70. package/lib/observers/file-observer.js +184 -0
  71. package/lib/observers/global-observer.js +155 -80
  72. package/lib/observers/grpc-observer.js +336 -0
  73. package/lib/observers/http-observer.js +666 -236
  74. package/lib/observers/maria-observer.js +204 -362
  75. package/lib/observers/memcached-observer.js +56 -0
  76. package/lib/observers/mongo-observer.js +317 -0
  77. package/lib/observers/mongodb-observer.js +169 -226
  78. package/lib/observers/mongoose-observer.js +518 -323
  79. package/lib/observers/mssql-observer.js +177 -418
  80. package/lib/observers/mysql-observer.js +342 -449
  81. package/lib/observers/mysql2-observer.js +396 -358
  82. package/lib/observers/net-observer.js +77 -0
  83. package/lib/observers/oracle-observer.js +559 -384
  84. package/lib/observers/pgsql-observer.js +231 -489
  85. package/lib/observers/prisma-observer.js +303 -92
  86. package/lib/observers/process-observer.js +79 -35
  87. package/lib/observers/promise-observer.js +31 -0
  88. package/lib/observers/redis-observer.js +166 -331
  89. package/lib/observers/schedule-observer.js +67 -0
  90. package/lib/observers/socket.io-observer.js +226 -187
  91. package/lib/observers/stream-observer.js +19 -0
  92. package/lib/observers/thrift-observer.js +197 -0
  93. package/lib/observers/websocket-observer.js +175 -301
  94. package/lib/pack/activestack-pack.js +55 -0
  95. package/lib/pack/apenum.js +8 -0
  96. package/lib/pack/counter-pack.js +3 -0
  97. package/lib/pack/errorsnap-pack.js +69 -0
  98. package/lib/pack/event-pack.js +54 -0
  99. package/lib/pack/hitmap-pack.js +63 -0
  100. package/lib/pack/hitmap-pack1.js +152 -0
  101. package/lib/pack/log-sink-pack.js +14 -52
  102. package/lib/pack/netstat.js +15 -0
  103. package/lib/pack/otype.js +7 -0
  104. package/lib/pack/profile-pack.js +49 -0
  105. package/lib/pack/realtimeuser-pack.js +41 -0
  106. package/lib/pack/stat-general-pack.js +96 -0
  107. package/lib/pack/staterror-pack.js +120 -0
  108. package/lib/pack/stathttpc-pack.js +66 -0
  109. package/lib/pack/stathttpc-rec.js +78 -0
  110. package/lib/pack/statremote-pack.js +46 -0
  111. package/lib/pack/statservice-pack.js +63 -0
  112. package/lib/pack/statservice-pack1.js +88 -0
  113. package/lib/pack/statservice-rec.js +292 -0
  114. package/lib/pack/statservice-rec_dep.js +151 -0
  115. package/lib/pack/statsql-pack.js +69 -0
  116. package/lib/pack/statsql-rec.js +100 -0
  117. package/lib/pack/statuseragent-pack.js +44 -0
  118. package/lib/pack/tagcount-pack.js +4 -4
  119. package/lib/pack/tagctr.js +15 -0
  120. package/lib/pack/text-pack.js +50 -0
  121. package/lib/pack/time-count.js +25 -0
  122. package/lib/pack/websocket.js +15 -0
  123. package/lib/pack/zip-pack.js +70 -0
  124. package/lib/pii/pii-item.js +31 -0
  125. package/lib/pii/pii-mask.js +174 -0
  126. package/lib/plugin/plugin-loadermanager.js +57 -0
  127. package/lib/plugin/plugin.js +75 -0
  128. package/lib/service/tx-record.js +332 -0
  129. package/lib/stat/stat-error.js +116 -0
  130. package/lib/stat/stat-httpc.js +98 -0
  131. package/lib/stat/stat-remote-ip.js +46 -0
  132. package/lib/stat/stat-remote-ipurl.js +88 -0
  133. package/lib/stat/stat-sql.js +113 -0
  134. package/lib/stat/stat-tranx.js +58 -0
  135. package/lib/stat/stat-tx-caller.js +160 -0
  136. package/lib/stat/stat-tx-domain.js +111 -0
  137. package/lib/stat/stat-tx-referer.js +112 -0
  138. package/lib/stat/stat-useragent.js +48 -0
  139. package/lib/stat/timingsender.js +76 -0
  140. package/lib/step/activestack-step.js +38 -0
  141. package/lib/step/dbc-step.js +36 -0
  142. package/lib/step/http-stepx.js +67 -0
  143. package/lib/step/message-step.js +40 -0
  144. package/lib/step/method-stepx.js +45 -0
  145. package/lib/step/resultset-step.js +40 -0
  146. package/lib/step/securemsg-step.js +44 -0
  147. package/lib/step/socket-step.js +46 -0
  148. package/lib/step/sql-stepx.js +68 -0
  149. package/lib/step/sqlxtype.js +16 -0
  150. package/lib/step/step.js +66 -0
  151. package/lib/step/stepenum.js +54 -0
  152. package/lib/topology/link.js +63 -0
  153. package/lib/topology/nodeinfo.js +123 -0
  154. package/lib/topology/status-detector.js +111 -0
  155. package/lib/trace/trace-context-manager.js +113 -25
  156. package/lib/trace/trace-context.js +21 -7
  157. package/lib/trace/trace-httpc.js +17 -11
  158. package/lib/trace/trace-sql.js +29 -21
  159. package/lib/util/anylist.js +103 -0
  160. package/lib/util/cardinality/hyperloglog.js +106 -0
  161. package/lib/util/cardinality/murmurhash.js +31 -0
  162. package/lib/util/cardinality/registerset.js +75 -0
  163. package/lib/util/errordata.js +21 -0
  164. package/lib/util/escape-literal-sql.js +5 -5
  165. package/lib/util/hashutil.js +18 -18
  166. package/lib/util/iputil_x.js +527 -0
  167. package/lib/util/keygen.js +0 -3
  168. package/lib/util/kube-util.js +73 -0
  169. package/lib/util/linkedset.js +1 -2
  170. package/lib/util/nodeutil.js +2 -1
  171. package/lib/util/paramsecurity.js +80 -0
  172. package/lib/util/pre-process.js +13 -0
  173. package/lib/util/process-seq.js +166 -0
  174. package/lib/util/property-util.js +36 -0
  175. package/lib/util/request-queue.js +70 -0
  176. package/lib/util/requestdouble-queue.js +72 -0
  177. package/lib/util/resourceprofile.js +157 -0
  178. package/lib/util/stop-watch.js +30 -0
  179. package/lib/util/system-util.js +10 -0
  180. package/lib/util/userid-util.js +57 -0
  181. package/lib/value/map-value.js +3 -2
  182. package/package.json +9 -4
  183. package/whatap.conf +1 -4
  184. package/agent/darwin/arm64/whatap_nodejs +0 -0
  185. package/agent/linux/amd64/whatap_nodejs +0 -0
  186. package/agent/linux/arm64/whatap_nodejs +0 -0
  187. package/build.txt +0 -4
  188. package/lib/observers/ioredis-observer.js +0 -294
  189. package/lib/udp/async_sender.js +0 -119
  190. package/lib/udp/index.js +0 -17
  191. package/lib/udp/packet_enum.js +0 -52
  192. package/lib/udp/packet_queue.js +0 -69
  193. package/lib/udp/packet_type_enum.js +0 -33
  194. package/lib/udp/param_def.js +0 -72
  195. package/lib/udp/udp_session.js +0 -336
  196. package/lib/util/sql-util.js +0 -178
  197. package/lib/util/trace-helper.js +0 -91
  198. package/lib/util/transfer.js +0 -58
@@ -0,0 +1,43 @@
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
+
7
+ var CounterTask = require('./counter-task'),
8
+ ResourceProfile = require('./../../util/resourceprofile'),
9
+ KubeUtil = require('./../../util/kube-util'),
10
+ SecurityMaster = require('../../net/security-master');
11
+
12
+ function SystemPerf(){
13
+ CounterTask.call(this);
14
+ }
15
+
16
+ SystemPerf.prototype = new CounterTask();
17
+ SystemPerf.prototype.constructor = SystemPerf;
18
+ SystemPerf.prototype.process = function(p) {
19
+ var cpu = ResourceProfile.getCPU();
20
+ if (cpu == null) return;
21
+
22
+ p.cpu = cpu.usage;
23
+ p.cpu_sys = cpu.sys;
24
+ p.cpu_usr = cpu.user;
25
+ p.cpu_irq = cpu.irq;
26
+ p.cpu_proc = cpu.proc;
27
+
28
+ p.disk = ResourceProfile.getDisk().usage;
29
+
30
+ if(p.version <= 1) p.mem = ResourceProfile.getMemory().usage;
31
+ else p.mem = ResourceProfile.getMemoryV2().usage;
32
+
33
+ p.cpu_cores = cpu.core;
34
+ p.host_ip = SecurityMaster.IP;
35
+ p.pid=process.pid;
36
+
37
+ if (KubeUtil.container_id != null) {
38
+ p.mem = 0;
39
+ p.cpu = 0;
40
+ }
41
+ };
42
+
43
+ module.exports = SystemPerf;
@@ -0,0 +1,289 @@
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
+
7
+ var conf = require('../conf/configure'),
8
+ secuMaster = require('../net/security-master'),
9
+ TcpRequestMgr = require('../net/tcprequest-mgr'),
10
+ NetFlag = require('../net/netflag').NetFlag,
11
+ ParamDef = require('../net/paramdef'),
12
+ DateUtil = require('./../util/dateutil'),
13
+ Long = require('long');
14
+
15
+ var sendPack = function(p){
16
+ if (p == null)
17
+ return;
18
+
19
+ p.pcode = secuMaster.PCODE;
20
+ p.oid = secuMaster.OID;
21
+ p.okind=secuMaster.OKIND;
22
+ p.onode=secuMaster.ONODE;
23
+
24
+ switch (conf.encrypt_level || 2) {
25
+ case 1:
26
+ TcpRequestMgr.add(0, p);
27
+ break;
28
+ case 2:
29
+ TcpRequestMgr.add(NetFlag.SECURE_HIDE, p);
30
+ break;
31
+ case 3:
32
+ default:
33
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
34
+ break;
35
+ }
36
+ };
37
+
38
+ var sendCounterPack = function(p){
39
+ return sendPack(p);
40
+ };
41
+
42
+ var sendTagCounterPack = function(p){
43
+ if (p == null) return;
44
+
45
+ p.pcode = secuMaster.PCODE;
46
+ p.oid = secuMaster.OID;
47
+ p.putTagString("oname", secuMaster.ONAME);
48
+ // p.okind=secuMaster.OKIND;
49
+ // p.onode=secuMaster.ONODE;
50
+
51
+ if(conf.OKIND){
52
+ p.okind = conf.OKIND;
53
+ p.putTagString("okindName", conf.OKIND_NAME);
54
+ }
55
+ if(conf.ONODE){
56
+ p.okind = conf.ONODE;
57
+ p.putTagString("onodeName", conf.ONODE_NAME);
58
+ }
59
+
60
+ switch (conf.encrypt_level || 2) {
61
+ case 1:
62
+ TcpRequestMgr.add(0, p);
63
+ break;
64
+ case 2:
65
+ TcpRequestMgr.add(NetFlag.SECURE_HIDE, p);
66
+ break;
67
+ case 3:
68
+ default:
69
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
70
+ break;
71
+ }
72
+ };
73
+
74
+ var sendHitMapPack1 = function(p){
75
+ return sendPack(p);
76
+ };
77
+
78
+ var sendActiveStackPack = function(p){
79
+ p.pcode = secuMaster.PCODE;
80
+ p.oid = secuMaster.OID;
81
+ p.okind=secuMaster.OKIND;
82
+ p.onode=secuMaster.ONODE;
83
+
84
+ var enc_level = conf.encrypt_level || 2;
85
+ switch (enc_level) {
86
+ case 1:
87
+ TcpRequestMgr.addProfile(0, p);
88
+ break;
89
+ case 2:
90
+ TcpRequestMgr.addProfile(NetFlag.SECURE_HIDE, p);
91
+ break;
92
+ case 3:
93
+ default:
94
+ TcpRequestMgr.addProfile(NetFlag.SECURE_CYPHER, p);
95
+ break;
96
+ }
97
+ };
98
+
99
+ var sendTextPack = function(p){
100
+ p.pcode = secuMaster.PCODE;
101
+ p.oid = secuMaster.OID;
102
+ p.okind=secuMaster.OKIND;
103
+ p.onode=secuMaster.ONODE;
104
+
105
+ p.time = Long.fromNumber(DateUtil.currentTime());
106
+
107
+ var enc_level = conf.encrypt_level || 2;
108
+
109
+ switch (enc_level) {
110
+ case 1:
111
+ TcpRequestMgr.add(NetFlag.SECURE_HIDE, p);
112
+ break;
113
+ case 2:
114
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
115
+ break;
116
+ case 3:
117
+ default:
118
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
119
+ break;
120
+ }
121
+ };
122
+
123
+ var sendErrorSnapPack = function(p){
124
+ return sendPack(p);
125
+ };
126
+
127
+ var sendProfilePack = function(p){
128
+
129
+ p.pcode = secuMaster.PCODE ;
130
+ p.oid = secuMaster.OID;
131
+ p.okind=secuMaster.OKIND;
132
+ p.onode=secuMaster.ONODE;
133
+
134
+ var enc_level = conf.encrypt_level || 2;
135
+ switch(enc_level) {
136
+ case 1:
137
+ break;
138
+ case 2:
139
+ TcpRequestMgr.addProfile(NetFlag.SECURE_CYPHER, p);
140
+ break;
141
+ case 3:
142
+ default:
143
+ TcpRequestMgr.addProfile(NetFlag.SECURE_CYPHER, p);
144
+ break;
145
+ }
146
+ };
147
+
148
+ var sendStatServicePack = function (p) {
149
+ return sendPack(p);
150
+ };
151
+
152
+ var sendStatSqlPack = function(p){
153
+ return sendPack(p);
154
+ };
155
+
156
+ var sendStatHttpcPack = function(p){
157
+ return sendPack(p);
158
+ };
159
+
160
+ var sendStatErrorPack = function(p){
161
+ return sendPack(p);
162
+ };
163
+
164
+ var sendRealtimeUserPack = function(p){
165
+ return sendPack(p);
166
+ };
167
+
168
+ var sendStatRemoteIpPack = function(p){
169
+ return sendPack(p);
170
+ };
171
+
172
+ var sendStatRemoteIpUrlPack = function(p){
173
+ return sendPack(p);
174
+ };
175
+
176
+ var sendStatUserAgentPack = function(p){
177
+ return sendPack(p);
178
+ };
179
+
180
+ var sendLogSinkPack = function(p){
181
+ if (p == null)
182
+ return;
183
+
184
+ p.pcode = secuMaster.PCODE;
185
+ p.oid = secuMaster.OID;
186
+ p.okind=secuMaster.OKIND;
187
+ p.onode=secuMaster.ONODE;
188
+
189
+ if (conf.getProperty('logsink_high_secure_enabled', false)) {
190
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
191
+ }else{
192
+ TcpRequestMgr.add(NetFlag.SECURE_HIDE, p);
193
+ }
194
+ };
195
+
196
+ var sendEventPack = function(p){
197
+ return sendPack(p);
198
+ };
199
+
200
+ var sendBoot = function(p){
201
+ p.id = ParamDef.AGENT_BOOT_ENV;
202
+ p.pcode = secuMaster.PCODE;
203
+ p.oid = secuMaster.OID;
204
+ p.okind=secuMaster.OKIND;
205
+ p.onode=secuMaster.ONODE;
206
+ p.time = Long.fromNumber(DateUtil.currentTime());
207
+
208
+ var enc_level = conf.encrypt_level || 2;
209
+ switch (enc_level) {
210
+ case 1:
211
+ TcpRequestMgr.add(NetFlag.SECURE_HIDE, p);
212
+ break;
213
+ case 2:
214
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
215
+ break;
216
+ case 3:
217
+ default:
218
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
219
+ break;
220
+ }
221
+ };
222
+
223
+ var sendResponse = function(p){
224
+ p.pcode = secuMaster.PCODE;
225
+ p.oid = secuMaster.OID;
226
+ p.okind=secuMaster.OKIND;
227
+ p.onode=secuMaster.ONODE;
228
+
229
+ switch (conf.encrypt_level) {
230
+ case 1:
231
+ TcpRequestMgr.add(NetFlag.SECURE_HIDE, p);
232
+ break;
233
+ case 2:
234
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
235
+ break;
236
+ case 3:
237
+ default:
238
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
239
+ break;
240
+ }
241
+ };
242
+
243
+ var sendResponseHide = function(p){
244
+ p.pcode = secuMaster.PCODE;
245
+ p.oid = secuMaster.OID;
246
+ p.okind=secuMaster.OKIND;
247
+ p.onode=secuMaster.ONODE;
248
+
249
+ switch (conf.encrypt_level) {
250
+ case 1:
251
+ TcpRequestMgr.add(NetFlag.SECURE_HIDE, p);
252
+ break;
253
+ case 2:
254
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
255
+ break;
256
+ case 3:
257
+ default:
258
+ TcpRequestMgr.add(NetFlag.SECURE_CYPHER, p);
259
+ break;
260
+ }
261
+ };
262
+
263
+ var DataPackSender = {
264
+ sendPack : sendPack,
265
+ sendCounterPack : sendCounterPack,
266
+ sendHitMapPack1 : sendHitMapPack1,
267
+ sendActiveStackPack : sendActiveStackPack,
268
+ sendTextPack : sendTextPack,
269
+ sendErrorSnapPack : sendErrorSnapPack,
270
+ sendProfilePack : sendProfilePack,
271
+ sendTagCounterPack : sendTagCounterPack,
272
+
273
+ sendStatServicePack : sendStatServicePack,
274
+ sendStatSqlPack : sendStatSqlPack,
275
+ sendStatHttpcPack : sendStatHttpcPack,
276
+ sendStatErrorPack : sendStatErrorPack,
277
+ sendStatRemoteIpPack : sendStatRemoteIpPack,
278
+ sendStatRemoteIpUrlPack : sendStatRemoteIpUrlPack,
279
+ sendStatUserAgentPack : sendStatUserAgentPack,
280
+ sendLogSinkPack : sendLogSinkPack,
281
+
282
+ sendRealtimeUserPack : sendRealtimeUserPack,
283
+ sendEventPack : sendEventPack,
284
+ sendBoot : sendBoot,
285
+ sendResponse : sendResponse,
286
+ sendResponseHide : sendResponseHide
287
+ }
288
+
289
+ module.exports = DataPackSender;
@@ -0,0 +1,162 @@
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
+
7
+ var DataPackSender = require('./datapack-sender'),
8
+ StatTranX = require('../stat/stat-tranx'),
9
+ StatRemoteIp = require('../stat/stat-remote-ip'),
10
+ StatUserAgent = require('../stat/stat-useragent'),
11
+ StatTranxDomain = require('../stat/stat-tx-domain'),
12
+ StatTranxMtCaller = require('../stat/stat-tx-caller'),
13
+ StatTranxReferer = require('../stat/stat-tx-referer'),
14
+ StatRemoteIpUrl = require('../stat/stat-remote-ipurl'),
15
+ conf = require('../conf/configure'),
16
+ HashUtil = require('../util/hashutil'),
17
+ EventLevel = require('../data/event-level'),
18
+ DataTextAgent = require('../data/datatext-agent'),
19
+ Long = require('long'),
20
+ Logger = require('../logger');
21
+
22
+ var ZipProfile = require('./zipprofile');
23
+ var profile_zip_enabled = conf.getProperty('profile_zip_enabled', false);
24
+ var stat_ipurl_enabled = conf.getProperty('stat_ipurl_enabled', false);
25
+ conf.on('profile_zip_enabled', function(newProperty) {
26
+ profile_zip_enabled = newProperty;
27
+ });
28
+ conf.on('stat_ipurl_enabled', function(newProperty) {
29
+ stat_ipurl_enabled = newProperty;
30
+ });
31
+
32
+ var DataProfileAgent = {
33
+ last_reject : 0,
34
+ sendProfile : function (ctx, profile, rejected) {
35
+ try {
36
+ StatRemoteIp.incRemoteIp(ctx.remoteIp);
37
+ StatUserAgent.incUserAgent(ctx.userAgent);
38
+
39
+ var transaction = profile.service;
40
+ if(stat_ipurl_enabled && ctx.remoteIp){
41
+ var tc = StatRemoteIpUrl.getService(ctx.remoteIp, ctx.service_hash);
42
+ if (tc) {
43
+ tc.count++;
44
+ if (tc.errorLevel >= EventLevel.WARNING) {
45
+ tc.error++;
46
+ }
47
+ tc.time += transaction.elapsed;
48
+ }
49
+ }
50
+
51
+ if(conf.stat_domain_enabled && ctx.http_host_hash!=0) {
52
+ StatTranxDomain.add(ctx.http_host_hash, ctx.service_hash, transaction.elapsed, ctx.error != 0);
53
+ }
54
+
55
+ if(conf.trace_referer_enabled && ctx.referer!=0) {
56
+ StatTranxReferer.add(ctx.referer, ctx.service_hash, transaction.elapsed, ctx.error != 0);
57
+ }
58
+
59
+ if(conf.stat_mtrace_enabled && ctx.mcaller_pcode!=0) {
60
+ var key = StatTranxMtCaller.getService(ctx.mcaller_pcode, ctx.mcaller_okind, ctx.mcaller_spec, ctx.mcaller_url,ctx.service_hash);
61
+ transaction.mthis_spec = conf.mtrace_spec_hash
62
+
63
+ if (ctx.mcaller_spec && ctx.mcaller_spec!='') {
64
+ transaction.mcaller_spec = key.mcaller_spec = HashUtil.hashFromString(ctx.mcaller_spec);
65
+ DataTextAgent.MTRACE_SPEC.add(transaction.mcaller_spec, ctx.mcaller_spec);
66
+ }
67
+ if (ctx.mcaller_url && ctx.mcaller_url!='') {
68
+ transaction.mcaller_url = key.mcaller_url = HashUtil.hashFromString(ctx.mcaller_url);
69
+ DataTextAgent.MTRACE_CALLER_URL.add(transaction.mcaller_url, ctx.mcaller_url);
70
+ }
71
+
72
+ // additional multi transaction
73
+ //key.url = ctx.service_hash;
74
+ var tc = StatTranxMtCaller.getService(key);
75
+ if (tc != null) {
76
+ tc.count++;
77
+ if (transaction.errorLevel >= EventLevel.WARNING) {
78
+ tc.error++;
79
+ }
80
+ tc.time += transaction.elapsed;
81
+ }
82
+
83
+ // StatTranxMtCaller.add(ctx.mcaller_pcode,
84
+ // ctx.mcaller_okind,
85
+ // transaction.mcaller_spec,
86
+ // transaction.mcaller_url,
87
+ // ctx.service_hash,
88
+ // transaction.elapsed,
89
+ // ctx.error != 0);
90
+ }
91
+
92
+ var stat = StatTranX.getService(transaction.service);
93
+
94
+ if(stat !== null) {
95
+ stat.count++;
96
+ if(transaction.error.isZero() ==false) {
97
+ stat.error++;
98
+ }
99
+ if(transaction.elapsed < 0) {
100
+ transaction.elapsed = 0;
101
+ }
102
+
103
+ stat.actived += ctx.profileActive;
104
+ stat.time_sum += transaction.elapsed;
105
+ if (transaction.elapsed > stat.time_max) {
106
+ stat.time_max = transaction.elapsed;
107
+ }
108
+
109
+ switch (transaction.apdex) {
110
+ case 2:
111
+ stat.apdex_satisfied++;
112
+ break;
113
+ case 1:
114
+ stat.apdex_tolerated++;
115
+ break;
116
+ }
117
+ if (stat.time_min==0 || transaction.elapsed < stat.time_min) {
118
+ stat.time_min = transaction.elapsed;
119
+ }
120
+ stat.time_std += (Long.fromInt(transaction.elapsed) * Long.fromInt(transaction.elapsed));
121
+
122
+ stat.sql_count += transaction.sqlCount;
123
+ stat.sql_time +=transaction.sqlTime;
124
+ stat.sql_fetch += ctx.rs_count;
125
+ stat.sql_fetch_time +=ctx.rs_time;
126
+
127
+ stat.httpc_count += transaction.httpcCount;
128
+ stat.httpc_time +=transaction.httpcTime;
129
+
130
+ stat.malloc_sum +=transaction.malloc;
131
+ stat.cpu_sum +=transaction.cpuTime;
132
+
133
+ if (rejected) {
134
+ var now = Date.now();
135
+ if (now < this.last_reject + 1000) {
136
+ return;
137
+ }
138
+ this.last_reject = now;
139
+ } else if (stat.profiled == true // 이전(5분구간 내)에 프로파일이 수집된점이 있음
140
+ && ctx.profileActive == 0 // 액티브 스택을 추적한적이 없음
141
+ && transaction.elapsed < conf.profile_basetime
142
+ && transaction.error.isZero()) {
143
+ return;
144
+ }
145
+ stat.profiled = true;
146
+ }
147
+
148
+ var steps = ctx.profile.getSteps();
149
+ profile.setProfile(steps);
150
+ if(profile_zip_enabled){
151
+ ZipProfile.getInstance().add(profile);
152
+ } else {
153
+ DataPackSender.sendProfilePack(profile);
154
+ }
155
+
156
+ } catch(e) {
157
+ Logger.printError('WHATAP-199', 'dataprofile-agent error', e);
158
+ }
159
+ }
160
+ };
161
+
162
+ module.exports = DataProfileAgent;
@@ -0,0 +1,135 @@
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 RequestQueue = require('../util/request-queue'),
7
+ TextPack = require('../pack/text-pack').TextPack,
8
+ TextRec = require('../pack/text-pack').TextRec,
9
+ TextTypes = require('../lang/text-types'),
10
+ DataPackSender = require('../data/datapack-sender'),
11
+ DateUtil = require('../util/dateutil'),
12
+ IntSet = require('../util/intset');
13
+
14
+ const BUFFERD_MAX = 10 * 1024;
15
+ const INTERVAL = 500; // 제어 가능해야 한다.
16
+
17
+ const DBC = new HashedData(TextTypes.DB_URL, 1000);
18
+ const METHOD = new HashedData(TextTypes.METHOD, 5000);
19
+ const HTTPC_URL = new HashedData(TextTypes.HTTPC_URL, 2000);
20
+ const HTTPC_HOST = new HashedData(TextTypes.HTTPC_HOST, 2000);
21
+ const ERROR = new HashedData(TextTypes.ERROR, 1000);
22
+ const SERVICE = new HashedData(TextTypes.SERVICE, 2000);
23
+ const SQL = new HashedData(TextTypes.SQL, 2000);
24
+ const STACK = new HashedData(TextTypes.STACK_ELEMENTS, 20000);
25
+ const MESSAGE = new HashedData(TextTypes.MESSAGE, 2000);
26
+ const USERAGENT = new HashedData(TextTypes.USER_AGENT, 1000);
27
+ const USER_AGENT_OS = new HashedData(TextTypes.USER_AGENT_OS, 1000);
28
+ const USER_AGENT_BROWSER= new HashedData(TextTypes.USER_AGENT_BROWSER, 1000);
29
+ const REFERER = new HashedData(TextTypes.REFERER, 1000);
30
+ const HTTP_DOMAIN = new HashedData(TextTypes.HTTP_DOMAIN, 500);
31
+ const MTRACE_SPEC = new HashedData(TextTypes.MTRACE_SPEC, 500);
32
+ const MTRACE_CALLER_URL = new HashedData(TextTypes.MTRACE_CALLER_URL, 500);
33
+ const OKIND = new HashedData(TextTypes.OKIND_NAME, 100);
34
+ const ONODE = new HashedData(TextTypes.ONODE_NAME, 100);
35
+
36
+ var DataTextAgent = function () {
37
+
38
+ if(typeof DataTextAgent.instance == 'object') {
39
+ return DataTextAgent.instance;
40
+ }
41
+
42
+ this.date = DateUtil.yyyymmddhh();
43
+ this.queue = new RequestQueue(500);
44
+ this.bufferPack = new TextPack();
45
+ this.bufferedLength = 0;
46
+ this.run();
47
+
48
+ DataTextAgent.instance = this;
49
+ };
50
+
51
+ DataTextAgent.prototype.run = function () {
52
+ var r = this.queue.get();
53
+ if(r !== null) {
54
+ this.bufferPack.records.push(r);
55
+ this.bufferedLength += r.text.length;
56
+ if(this.bufferedLength >= BUFFERD_MAX) {
57
+ this.send();
58
+ }
59
+ } else {
60
+ if(this.bufferedLength > 0) {
61
+ this.send();
62
+ }
63
+ }
64
+
65
+ if(this.date !== DateUtil.yyyymmddhh()) {
66
+ this.reset();
67
+ this.date = DateUtil.yyyymmddhh();
68
+ }
69
+
70
+ var self = this;
71
+ setTimeout(function () {
72
+ self.run();
73
+ }, INTERVAL, 'whatap');
74
+ };
75
+ DataTextAgent.prototype.add = function (type, hash, text) {
76
+ this.queue.put(new TextRec(type, hash, text));
77
+ };
78
+ DataTextAgent.prototype.send = function () {
79
+ DataPackSender.sendTextPack(this.bufferPack);
80
+ this.bufferPack = new TextPack();
81
+ this.bufferedLength = 0;
82
+ };
83
+ DataTextAgent.prototype.reset = function () {
84
+ DBC.sent.clear();
85
+ METHOD.sent.clear();
86
+ HTTPC_URL.sent.clear();
87
+ HTTPC_HOST.sent.clear();
88
+ ERROR.sent.clear();
89
+ SERVICE.sent.clear();
90
+ SQL.sent.clear();
91
+ STACK.sent.clear();
92
+ MESSAGE.sent.clear();
93
+ USERAGENT.sent.clear();
94
+ USER_AGENT_OS.sent.clear();
95
+ USER_AGENT_BROWSER.sent.clear();
96
+ REFERER.sent.clear();
97
+ HTTP_DOMAIN.sent.clear();
98
+ MTRACE_SPEC.sent.clear();
99
+ MTRACE_CALLER_URL.sent.clear();
100
+ OKIND.sent.clear();
101
+ ONODE.sent.clear();
102
+ };
103
+
104
+ function HashedData(type, n) {
105
+ this.type = type || 0;
106
+ this.sent = new IntSet().setMax(n);
107
+ }
108
+ HashedData.prototype.add = function (hash, text) {
109
+ if(require('../trace/trace-context-manager').initialized === false) { return; }
110
+ // 보내지 않은 Hash인 경우 추가
111
+ if(this.sent.hasKey(hash) == false) {
112
+ this.sent.add(hash);
113
+ new DataTextAgent().add(this.type, hash, text);
114
+ }
115
+ };
116
+
117
+ exports.agent = new DataTextAgent();
118
+ exports.DBC = DBC;
119
+ exports.METHOD = METHOD;
120
+ exports.HTTPC_URL = HTTPC_URL;
121
+ exports.HTTPC_HOST = HTTPC_HOST;
122
+ exports.ERROR = ERROR;
123
+ exports.SERVICE = SERVICE;
124
+ exports.SQL = SQL;
125
+ exports.STACK = STACK;
126
+ exports.MESSAGE = MESSAGE;
127
+ exports.USERAGENT = USERAGENT;
128
+ exports.USER_AGENT_OS = USER_AGENT_OS;
129
+ exports.USER_AGENT_BROWSER = USER_AGENT_BROWSER;
130
+ exports.REFERER = REFERER;
131
+ exports.HTTP_DOMAIN = HTTP_DOMAIN;
132
+ exports.MTRACE_SPEC = MTRACE_SPEC;
133
+ exports.MTRACE_CALLER_URL = MTRACE_CALLER_URL;
134
+ exports.OKIND = OKIND;
135
+ exports.ONODE = ONODE;
@@ -0,0 +1,15 @@
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
+
7
+ var EventLevel = {
8
+ FATAL: Buffer.alloc(30),
9
+ WARNING: Buffer.alloc(20),
10
+ INFO: Buffer.alloc(10),
11
+ NONE: Buffer.alloc(0)
12
+ }
13
+
14
+ module.exports = EventLevel;
15
+
@@ -0,0 +1,49 @@
1
+ var IntSet = require('../util/intset') ,
2
+ TagCountPack = require('../pack/tagcount-pack');
3
+ const DataPackSender = require('./datapack-sender');
4
+
5
+ var Test = function() {
6
+ this.sent = new IntSet().setMax(10);
7
+ this.init()
8
+ }
9
+
10
+ Test.prototype.init = function() {
11
+ this.sent.add(1);
12
+ this.sent.add(2);
13
+ this.sent.add(3);
14
+ this.sent.add(4);
15
+ this.sent.add(5);
16
+ this.sent.add(6);
17
+ this.sent.add(7);
18
+ this.sent.add(8);
19
+ this.sent.add(9);
20
+ this.sent.add(10);
21
+ this.sent.add(11);
22
+ this.sent.add(12);
23
+ this.sent.add(13);
24
+ this.sent.add(14);
25
+ if(this.sent.hasKey(14) == false) {
26
+ console.log(this.sent.getLastValue())
27
+ this.sent.add(15);
28
+ }
29
+ var p = new TagCountPack()
30
+ p.category = 'aaaa'
31
+ p.pcode = 101
32
+ p.oid = 1
33
+ p.putTagString('tag1','tag1')
34
+ p.putTagString('tag2','tag2')
35
+ p.putTagString('tag3','tag3')
36
+ p.putTagString('tag4','tag4')
37
+ p.putTagString('tag5','tag5')
38
+ p.putTagString('tag6','tag6')
39
+ p.putInt('filed1' , 100)
40
+ p.putInt('filed2' , 200)
41
+ p.putInt('filed3' , 300)
42
+ p.putInt('filed4' , 400)
43
+ p.putInt('filed5' , 500)
44
+ p.putInt('filed6' , 600)
45
+
46
+ DataPackSender.sendTagCounterPack(p);
47
+ }
48
+
49
+ exports.Test = new Test();