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
@@ -1,197 +1,197 @@
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 TraceContextManager = require('../trace/trace-context-manager'),
8
- SqlStepX = require('../step/sql-stepx'),
9
- ResultSetStep = require('../step/resultset-step'),
10
- DataTextAgent = require('../data/datatext-agent'),
11
- StatError = require('../stat/stat-error'),
12
- TextTypes = require('../lang/text-types'),
13
- hashUtil = require('../util/hashutil'),
14
- Logger = require('../logger');
15
-
16
- var MongodbObserver = function(agent){
17
- this.agent = agent;
18
- this.packages = ['mongodb'];
19
- }
20
-
21
- MongodbObserver.prototype.inject = function( mod, moduleName ) {
22
- var self = this;
23
- var aop = self.agent.aop;
24
-
25
- if('instrument' in mod == false) {
26
- return;
27
- }
28
-
29
- if(mod.__whatap_observe__) { return; }
30
- mod.__whatap_observe__ = true;
31
-
32
- Logger.initPrint("MongodbObserver");
33
-
34
- var requestTable = {},
35
- nextRequest,
36
- listener = mod.instrument({}, function(err, instrumentations) {});
37
-
38
- listener.on('started', function (event) {
39
- var requestId = event.requestId, request;
40
- var ctx = TraceContextManager.getCurrentContext();
41
- if(ctx == null) { return; }
42
-
43
- if(nextRequest) {
44
- requestTable[requestId] = { step : nextRequest.step, ctx : nextRequest.ctx };
45
- nextRequest.requestId = requestId;
46
- nextRequest = null;
47
- } else if(event.commandName === 'findandmodify') {
48
- var sql_step = new SqlStepX();
49
- sql_step.start_time = ctx.getElapsedTime();
50
- ctx.profile.add(sql_step);
51
- requestTable[requestId] = {step : sql_step, ctx : ctx};
52
- } else if( requestTable[requestId] == null ) {
53
- return;
54
- }
55
-
56
- var dbc = '',
57
- dbc_hash = 0;
58
- if(event.connectionId) {
59
- var conn = event.connectionId;
60
- dbc = 'mongodb://' + (conn.host || '') + ':' + (conn.port || '') + '/' + (event.databaseName || '');
61
- dbc_hash = hashUtil.hashFromString(dbc);
62
- DataTextAgent.DBC.add(dbc_hash, dbc);
63
- }
64
- request = requestTable[requestId];
65
- request.step.dbc = dbc_hash;
66
-
67
- var dbName = event.databaseName,
68
- collection = event.command[event.commandName],
69
- command = Object.keys(event.command).reduce(function (result, key) {
70
- if(key != event.commandName && key != 'filter' && key != 'documents') {
71
- result[key] = event.command[key];
72
- }
73
- return result;
74
- }, {});
75
- command = JSON.stringify(command).slice(0, 1000);
76
-
77
- var ctx = request.ctx;
78
- ctx.sql_count++;
79
-
80
- var command_string = '', queryKey = '', sql ='', sql_hash = '', crud ='';
81
- if(event.commandName === 'find') {
82
- queryKey = Object.keys(event.command.filter).toString().slice(0, 1000);
83
- command_string = ',key='+queryKey + ',command=' + command;
84
- crud = 'S';
85
- ctx.sql_select++;
86
- } else if(event.commandName === 'insert') {
87
- queryKey = Object.keys(event.command.documents[0]).toString().slice(0, 1000);
88
- command_string = ',documents='+queryKey + ',command=' + command;
89
- crud = 'I';
90
- ctx.sql_insert++;
91
- } else if(event.commandName === 'delete') {
92
- command_string = ',command=' + command;
93
- crud = 'D';
94
- ctx.sql_delete++;
95
- } else if(event.commandName === 'findandmodify') {
96
- command_string = ',command=' + command;
97
- crud = 'U';
98
- ctx.sql_update++;
99
- } else if(event.commandName === 'update') {
100
- command_string = ',command=' + command;
101
- crud = 'U';
102
- ctx.sql_update++;
103
- } else {
104
- ctx.sql_others++;
105
- }
106
-
107
- sql = event.commandName + ' : databaseName=' + dbName +',collection=' + collection + command_string;
108
- sql_hash = hashUtil.hashFromString(sql);
109
- DataTextAgent.SQL.add(sql_hash, sql);
110
- request.step.hash = sql_hash;
111
- request.step.crud = crud.charCodeAt(0);
112
- });
113
-
114
- listener.on('succeeded', function (event) {
115
- var requestId = event.requestId,
116
- request = requestTable[event.requestId];
117
-
118
- if(request == null) {
119
- delete requestTable[requestId];
120
- return;
121
- }
122
-
123
- TraceContextManager.resume(request.ctx._id);
124
- request.step.elapsed = event.duration;
125
- request.ctx.sql_time += request.step.elapsed;
126
-
127
- var command = event.commandName || '';
128
- if(command === 'find' && event.reply) {
129
- var cursor = event.reply.cursor;
130
- if(cursor != null) {
131
- var fetch = cursor.firstBatch.length;
132
- var rs_step = new ResultSetStep();
133
- rs_step.elapsed = 0;
134
- rs_step.dbc = request.step.dbc;
135
- rs_step.sqlhash = request.step.hash;
136
- rs_step.fetch = fetch;
137
- request.ctx.profile.add(rs_step);
138
- }
139
- }
140
-
141
- if(command === 'update' && event.reply) {
142
- request.step.updated = event.reply.nModified;
143
- }
144
-
145
- if(command === 'findandmodify' && event.reply) {
146
- var lastErrorObject = event.reply.lastErrorObject;
147
- request.step.updated = lastErrorObject.n || 0;
148
- }
149
-
150
- delete requestTable[requestId];
151
- });
152
-
153
- listener.on('failed', function (event) {
154
- var requestId = event.requestId,
155
- request = requestTable[event.requestId];
156
- if(request == null) {
157
- delete requestTable[requestId];
158
- return;
159
- }
160
- TraceContextManager.resume(request.ctx._id);
161
- request.step.elapsed = event.duration;
162
- request.ctx.sql_time += request.step.elapsed;
163
-
164
- var msgObj = { 'class': event.failure.message, 'msg': event.failure.message };
165
- request.step.error = StatError.addError("mogodb", event.failure.message,
166
- request.ctx.service_hash, TextTypes.SQL, request.step.hash);
167
- if (request.ctx.error.isZero()) {
168
- request.ctx.error = request.step.error;
169
- }
170
-
171
- delete requestTable[requestId];
172
- });
173
-
174
- ['cursor', 'insert', 'update', 'remove'].forEach( function(command) {
175
- aop.before(mod.Server.prototype, command, function (obj, args) {
176
- // Select but... DB name undefined return
177
- if(command === 'cursor' && !args[1].find) return;
178
-
179
- var ctx = TraceContextManager.getCurrentContext();
180
- if(ctx == null) { return; }
181
-
182
- var step = new SqlStepX();
183
- step.start_time = ctx.getElapsedTime();
184
- ctx.profile.add(step);
185
-
186
- var req = nextRequest = {step : step, ctx : ctx};
187
- aop.functionHook(args, -1, function (obj, args) {
188
- TraceContextManager.resume(ctx._id);
189
- var requestId = req.requestId;
190
- requestTable[requestId] = undefined;
191
- });
192
- });
193
- });
194
- };
195
-
196
- exports.MongodbObserver = MongodbObserver;
197
-
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 TraceContextManager = require('../trace/trace-context-manager'),
8
+ SqlStepX = require('../step/sql-stepx'),
9
+ ResultSetStep = require('../step/resultset-step'),
10
+ DataTextAgent = require('../data/datatext-agent'),
11
+ StatError = require('../stat/stat-error'),
12
+ TextTypes = require('../lang/text-types'),
13
+ hashUtil = require('../util/hashutil'),
14
+ Logger = require('../logger');
15
+
16
+ var MongodbObserver = function(agent){
17
+ this.agent = agent;
18
+ this.packages = ['mongodb'];
19
+ }
20
+
21
+ MongodbObserver.prototype.inject = function( mod, moduleName ) {
22
+ var self = this;
23
+ var aop = self.agent.aop;
24
+
25
+ if('instrument' in mod == false) {
26
+ return;
27
+ }
28
+
29
+ if(mod.__whatap_observe__) { return; }
30
+ mod.__whatap_observe__ = true;
31
+
32
+ Logger.initPrint("MongodbObserver");
33
+
34
+ var requestTable = {},
35
+ nextRequest,
36
+ listener = mod.instrument({}, function(err, instrumentations) {});
37
+
38
+ listener.on('started', function (event) {
39
+ var requestId = event.requestId, request;
40
+ var ctx = TraceContextManager.getCurrentContext();
41
+ if(ctx == null) { return; }
42
+
43
+ if(nextRequest) {
44
+ requestTable[requestId] = { step : nextRequest.step, ctx : nextRequest.ctx };
45
+ nextRequest.requestId = requestId;
46
+ nextRequest = null;
47
+ } else if(event.commandName === 'findandmodify') {
48
+ var sql_step = new SqlStepX();
49
+ sql_step.start_time = ctx.getElapsedTime();
50
+ ctx.profile.add(sql_step);
51
+ requestTable[requestId] = {step : sql_step, ctx : ctx};
52
+ } else if( requestTable[requestId] == null ) {
53
+ return;
54
+ }
55
+
56
+ var dbc = '',
57
+ dbc_hash = 0;
58
+ if(event.connectionId) {
59
+ var conn = event.connectionId;
60
+ dbc = 'mongodb://' + (conn.host || '') + ':' + (conn.port || '') + '/' + (event.databaseName || '');
61
+ dbc_hash = hashUtil.hashFromString(dbc);
62
+ DataTextAgent.DBC.add(dbc_hash, dbc);
63
+ }
64
+ request = requestTable[requestId];
65
+ request.step.dbc = dbc_hash;
66
+
67
+ var dbName = event.databaseName,
68
+ collection = event.command[event.commandName],
69
+ command = Object.keys(event.command).reduce(function (result, key) {
70
+ if(key != event.commandName && key != 'filter' && key != 'documents') {
71
+ result[key] = event.command[key];
72
+ }
73
+ return result;
74
+ }, {});
75
+ command = JSON.stringify(command).slice(0, 1000);
76
+
77
+ var ctx = request.ctx;
78
+ ctx.sql_count++;
79
+
80
+ var command_string = '', queryKey = '', sql ='', sql_hash = '', crud ='';
81
+ if(event.commandName === 'find') {
82
+ queryKey = Object.keys(event.command.filter).toString().slice(0, 1000);
83
+ command_string = ',key='+queryKey + ',command=' + command;
84
+ crud = 'S';
85
+ ctx.sql_select++;
86
+ } else if(event.commandName === 'insert') {
87
+ queryKey = Object.keys(event.command.documents[0]).toString().slice(0, 1000);
88
+ command_string = ',documents='+queryKey + ',command=' + command;
89
+ crud = 'I';
90
+ ctx.sql_insert++;
91
+ } else if(event.commandName === 'delete') {
92
+ command_string = ',command=' + command;
93
+ crud = 'D';
94
+ ctx.sql_delete++;
95
+ } else if(event.commandName === 'findandmodify') {
96
+ command_string = ',command=' + command;
97
+ crud = 'U';
98
+ ctx.sql_update++;
99
+ } else if(event.commandName === 'update') {
100
+ command_string = ',command=' + command;
101
+ crud = 'U';
102
+ ctx.sql_update++;
103
+ } else {
104
+ ctx.sql_others++;
105
+ }
106
+
107
+ sql = event.commandName + ' : databaseName=' + dbName +',collection=' + collection + command_string;
108
+ sql_hash = hashUtil.hashFromString(sql);
109
+ DataTextAgent.SQL.add(sql_hash, sql);
110
+ request.step.hash = sql_hash;
111
+ request.step.crud = crud.charCodeAt(0);
112
+ });
113
+
114
+ listener.on('succeeded', function (event) {
115
+ var requestId = event.requestId,
116
+ request = requestTable[event.requestId];
117
+
118
+ if(request == null) {
119
+ delete requestTable[requestId];
120
+ return;
121
+ }
122
+
123
+ TraceContextManager.resume(request.ctx._id);
124
+ request.step.elapsed = event.duration;
125
+ request.ctx.sql_time += request.step.elapsed;
126
+
127
+ var command = event.commandName || '';
128
+ if(command === 'find' && event.reply) {
129
+ var cursor = event.reply.cursor;
130
+ if(cursor != null) {
131
+ var fetch = cursor.firstBatch.length;
132
+ var rs_step = new ResultSetStep();
133
+ rs_step.elapsed = 0;
134
+ rs_step.dbc = request.step.dbc;
135
+ rs_step.sqlhash = request.step.hash;
136
+ rs_step.fetch = fetch;
137
+ request.ctx.profile.add(rs_step);
138
+ }
139
+ }
140
+
141
+ if(command === 'update' && event.reply) {
142
+ request.step.updated = event.reply.nModified;
143
+ }
144
+
145
+ if(command === 'findandmodify' && event.reply) {
146
+ var lastErrorObject = event.reply.lastErrorObject;
147
+ request.step.updated = lastErrorObject.n || 0;
148
+ }
149
+
150
+ delete requestTable[requestId];
151
+ });
152
+
153
+ listener.on('failed', function (event) {
154
+ var requestId = event.requestId,
155
+ request = requestTable[event.requestId];
156
+ if(request == null) {
157
+ delete requestTable[requestId];
158
+ return;
159
+ }
160
+ TraceContextManager.resume(request.ctx._id);
161
+ request.step.elapsed = event.duration;
162
+ request.ctx.sql_time += request.step.elapsed;
163
+
164
+ var msgObj = { 'class': event.failure.message, 'msg': event.failure.message };
165
+ request.step.error = StatError.addError("mogodb", event.failure.message,
166
+ request.ctx.service_hash, TextTypes.SQL, request.step.hash);
167
+ if (request.ctx.error.isZero()) {
168
+ request.ctx.error = request.step.error;
169
+ }
170
+
171
+ delete requestTable[requestId];
172
+ });
173
+
174
+ ['cursor', 'insert', 'update', 'remove'].forEach( function(command) {
175
+ aop.before(mod.Server.prototype, command, function (obj, args) {
176
+ // Select but... DB name undefined return
177
+ if(command === 'cursor' && !args[1].find) return;
178
+
179
+ var ctx = TraceContextManager.getCurrentContext();
180
+ if(ctx == null) { return; }
181
+
182
+ var step = new SqlStepX();
183
+ step.start_time = ctx.getElapsedTime();
184
+ ctx.profile.add(step);
185
+
186
+ var req = nextRequest = {step : step, ctx : ctx};
187
+ aop.functionHook(args, -1, function (obj, args) {
188
+ TraceContextManager.resume(ctx._id);
189
+ var requestId = req.requestId;
190
+ requestTable[requestId] = undefined;
191
+ });
192
+ });
193
+ });
194
+ };
195
+
196
+ exports.MongodbObserver = MongodbObserver;
197
+
@@ -1,84 +1,84 @@
1
-
2
- var TraceContextManager = require('../trace/trace-context-manager'),
3
- SqlStepX = require('../step/sql-stepx'),
4
- DataTextAgent = require('../data/datatext-agent'),
5
- HashUtil = require('../util/hashutil');
6
-
7
- var MongooseObserver = function (agent) {
8
- this.agent = agent;
9
- this.packages = ['mongoose'];
10
- };
11
-
12
- MongooseObserver.prototype.inject = function (mod, modName) {
13
-
14
- var self = this;
15
-
16
- var hookCommand = [
17
- 'find',
18
- 'remove',
19
- 'findById',
20
- 'findOne',
21
- 'count',
22
- 'distinct',
23
- 'findOneAndUpdate',
24
- 'findByIdAndUpdate',
25
- 'findOneAndRemove',
26
- 'findByIdAndRemove',
27
- 'create',
28
- 'insertMany',
29
- 'update',
30
- 'updateMany',
31
- 'updateOne',
32
- 'mapReduce',
33
- 'geoNear',
34
- 'geoSearch',
35
- 'populate'
36
- ];
37
-
38
- self.agent.aop.before(mod.Model, 'aggregate', function (obj, args) {
39
- var ctx = TraceContextManager.getCurrentContext();
40
- if(ctx == null) {return;}
41
-
42
- var param = "";
43
- if(Array.isArray(args[0])) {
44
- args[0].forEach(function (val, i) {
45
- if(i > 0 && param.length > 0) {
46
- param += ",";
47
- }
48
- if(val.hasOwnProperty('$match')) {
49
- var keys = Object.keys(val['$match']);
50
- param += keys;
51
- }
52
-
53
- if(val.hasOwnProperty('$group')) {
54
- var keys = Object.keys(val['$group']);
55
- param += keys;
56
- }
57
- })
58
- }
59
-
60
- var sql_step = new SqlStepX();
61
- var sql = 'mongodb aggregate (' + param + ')';
62
- sql_step.hash = HashUtil.hashFromString(sql);
63
- sql_step.start_time = ctx.getElapsedTime();
64
- sql_step.dbc = 0;
65
-
66
- DataTextAgent.SQL.add(sql_step.hash, sql);
67
- ctx.profile.push(sql_step);
68
-
69
- self.agent.aop.functionHook(args, -1, function () {
70
- TraceContextManager.resume(ctx);
71
- sql_step.elapsed = ctx.getElapsedTime() - sql_step.start_time;
72
- });
73
- });
74
-
75
- self.agent.aop.before(mod.Model, hookCommand, function (obj, args) {
76
- var ctx_id = TraceContextManager.getCurrentId();
77
- self.agent.aop.functionHook(args, -1, function () {
78
- TraceContextManager.resume(ctx_id);
79
- });
80
- });
81
-
82
- };
83
-
1
+
2
+ var TraceContextManager = require('../trace/trace-context-manager'),
3
+ SqlStepX = require('../step/sql-stepx'),
4
+ DataTextAgent = require('../data/datatext-agent'),
5
+ HashUtil = require('../util/hashutil');
6
+
7
+ var MongooseObserver = function (agent) {
8
+ this.agent = agent;
9
+ this.packages = ['mongoose'];
10
+ };
11
+
12
+ MongooseObserver.prototype.inject = function (mod, modName) {
13
+
14
+ var self = this;
15
+
16
+ var hookCommand = [
17
+ 'find',
18
+ 'remove',
19
+ 'findById',
20
+ 'findOne',
21
+ 'count',
22
+ 'distinct',
23
+ 'findOneAndUpdate',
24
+ 'findByIdAndUpdate',
25
+ 'findOneAndRemove',
26
+ 'findByIdAndRemove',
27
+ 'create',
28
+ 'insertMany',
29
+ 'update',
30
+ 'updateMany',
31
+ 'updateOne',
32
+ 'mapReduce',
33
+ 'geoNear',
34
+ 'geoSearch',
35
+ 'populate'
36
+ ];
37
+
38
+ self.agent.aop.before(mod.Model, 'aggregate', function (obj, args) {
39
+ var ctx = TraceContextManager.getCurrentContext();
40
+ if(ctx == null) {return;}
41
+
42
+ var param = "";
43
+ if(Array.isArray(args[0])) {
44
+ args[0].forEach(function (val, i) {
45
+ if(i > 0 && param.length > 0) {
46
+ param += ",";
47
+ }
48
+ if(val.hasOwnProperty('$match')) {
49
+ var keys = Object.keys(val['$match']);
50
+ param += keys;
51
+ }
52
+
53
+ if(val.hasOwnProperty('$group')) {
54
+ var keys = Object.keys(val['$group']);
55
+ param += keys;
56
+ }
57
+ })
58
+ }
59
+
60
+ var sql_step = new SqlStepX();
61
+ var sql = 'mongodb aggregate (' + param + ')';
62
+ sql_step.hash = HashUtil.hashFromString(sql);
63
+ sql_step.start_time = ctx.getElapsedTime();
64
+ sql_step.dbc = 0;
65
+
66
+ DataTextAgent.SQL.add(sql_step.hash, sql);
67
+ ctx.profile.push(sql_step);
68
+
69
+ self.agent.aop.functionHook(args, -1, function () {
70
+ TraceContextManager.resume(ctx);
71
+ sql_step.elapsed = ctx.getElapsedTime() - sql_step.start_time;
72
+ });
73
+ });
74
+
75
+ self.agent.aop.before(mod.Model, hookCommand, function (obj, args) {
76
+ var ctx_id = TraceContextManager.getCurrentId();
77
+ self.agent.aop.functionHook(args, -1, function () {
78
+ TraceContextManager.resume(ctx_id);
79
+ });
80
+ });
81
+
82
+ };
83
+
84
84
  exports.MongooseObserver = MongooseObserver;