whatap 0.4.91 → 0.4.92
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.
- package/lib/observers/socket.io-observer.js +28 -114
- package/package.json +2 -2
|
@@ -4,137 +4,51 @@
|
|
|
4
4
|
* can be found in the LICENSE file.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
var MeterSocketio = require('../counter/meter/meter-socket.io')
|
|
8
|
-
TraceContextManager = require('../trace/trace-context-manager'),
|
|
9
|
-
SocketStep = require('../step/socket-step'),
|
|
10
|
-
conf = require('../conf/configure'),
|
|
11
|
-
IPUtil = require('../util/iputil'),
|
|
12
|
-
Logger = require('../logger');
|
|
13
|
-
const {Detector: URLPatternDetector} = require("whatap/lib/trace/serviceurl-pattern-detector");
|
|
14
|
-
const HashUtil = require("whatap/lib/util/hashutil");
|
|
15
|
-
const DataTextAgent = require("whatap/lib/data/datatext-agent");
|
|
16
|
-
const ResourceProfile = require("whatap/lib/util/resourceprofile");
|
|
17
|
-
const ProfilePack = require('../pack/profile-pack');
|
|
18
|
-
const TxRecord = require('../service/tx-record');
|
|
19
|
-
const DateUtil = require('../util/dateutil');
|
|
20
|
-
const SecurityMaster = require('../net/security-master');
|
|
21
|
-
const DataProfileAgent = require('../data/dataprofile-agent');
|
|
22
|
-
const MeterService = require('../counter/meter/meter-service').MeterService;
|
|
7
|
+
var MeterSocketio = require('../counter/meter/meter-socket.io');
|
|
23
8
|
|
|
24
9
|
var SocketIOObserver = function(agent){
|
|
25
10
|
this.agent = agent;
|
|
26
11
|
this.packages = ['socket.io'];
|
|
27
12
|
};
|
|
28
13
|
|
|
29
|
-
SocketIOObserver.prototype.inject = function
|
|
30
|
-
if (mod.__whatap_observe__) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
mod.__whatap_observe__ = true;
|
|
34
|
-
Logger.initPrint("SocketIOObserver");
|
|
35
|
-
if (conf.trace_background_socket_enabled === false) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
|
|
14
|
+
SocketIOObserver.prototype.inject = function( mod ){
|
|
39
15
|
var self = this;
|
|
40
16
|
var aop = self.agent.aop;
|
|
41
17
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
})
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
SocketIOObserver.prototype.__createTransactionObserver = function (callback) {
|
|
48
|
-
var self = this;
|
|
49
|
-
|
|
50
|
-
return function (){
|
|
51
|
-
TraceContextManager._asyncLocalStorage.run(initCtx(), () => {
|
|
52
|
-
var ctx = TraceContextManager._asyncLocalStorage.getStore();
|
|
53
|
-
if(!ctx) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
MeterSocketio.connected(1);
|
|
58
|
-
|
|
59
|
-
var host;
|
|
60
|
-
const socket = arguments[0];
|
|
61
|
-
const address = socket.handshake.address;
|
|
62
|
-
if(address && address.includes(':')){
|
|
63
|
-
host = address.substring(address.lastIndexOf(':')+1);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
ctx.socket_connecting = true;
|
|
67
|
-
|
|
68
|
-
ctx.footprint('Socket Connecting: ' + host);
|
|
69
|
-
|
|
70
|
-
var step = new SocketStep();
|
|
71
|
-
step.start_time = ctx.getElapsedTime();
|
|
72
|
-
step.ipaddr = Buffer.from(IPUtil.stringToBytes(host));
|
|
73
|
-
// step.port = port;
|
|
74
|
-
|
|
75
|
-
ctx.socket_connecting = false;
|
|
76
|
-
step.elapsed = ctx.getElapsedTime() - step.start_time;
|
|
77
|
-
ctx.profile.push(step);
|
|
78
|
-
|
|
79
|
-
ctx.footprint('Socket Connecting Done');
|
|
80
|
-
|
|
81
|
-
self.__endTransaction(null, ctx);
|
|
82
|
-
|
|
83
|
-
return;
|
|
84
|
-
})
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
SocketIOObserver.prototype.__endTransaction = function(error, ctx) {
|
|
89
|
-
try {
|
|
90
|
-
var profile = new ProfilePack();
|
|
91
|
-
var wtx = new TxRecord();
|
|
92
|
-
wtx.endTime = DateUtil.currentTime();
|
|
93
|
-
profile.time = wtx.endTime;
|
|
94
|
-
wtx.elapsed = ctx.getElapsedTime();
|
|
95
|
-
|
|
96
|
-
ctx.service_hash = HashUtil.hashFromString(ctx.service_name);
|
|
97
|
-
DataTextAgent.SERVICE.add(ctx.service_hash, ctx.service_name);
|
|
98
|
-
|
|
99
|
-
wtx.service = ctx.service_hash;
|
|
100
|
-
wtx.cpuTime = ResourceProfile.getCPUTime() - ctx.start_cpu;
|
|
101
|
-
wtx.malloc = ResourceProfile.getUsedHeapSize()-ctx.start_malloc;
|
|
102
|
-
if(wtx.malloc < 0) { wtx.malloc = 0; }
|
|
103
|
-
wtx.status = 2;
|
|
104
|
-
|
|
105
|
-
MeterService.add(wtx.service, wtx.elapsed,
|
|
106
|
-
wtx.errorLevel, ctx.mcaller_pcode, ctx.mcaller_okind, ctx.mcaller_oid);
|
|
18
|
+
if(mod.__whatap_observe__) { return; }
|
|
19
|
+
mod.__whatap_observe__ = true;
|
|
107
20
|
|
|
108
|
-
|
|
109
|
-
|
|
21
|
+
aop.after(mod.prototype, ['listen','attach'], function(obj, args, ret) {
|
|
22
|
+
if (!ret.sockets) return;
|
|
110
23
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
DataProfileAgent.sendProfile(ctx, profile, false);
|
|
114
|
-
ctx = null;
|
|
115
|
-
}, 100);
|
|
24
|
+
aop.before(ret.sockets, ['on', 'addListener'], function(obj, args) {
|
|
25
|
+
if (args[0] !== 'connection') return;
|
|
116
26
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
TraceContextManager.end(ctx._id);
|
|
120
|
-
ctx = null;
|
|
121
|
-
}
|
|
27
|
+
aop.functionHook(args, -1, function(obj, args) {
|
|
28
|
+
if (!args[0]) return; //no client socket
|
|
122
29
|
|
|
123
|
-
|
|
30
|
+
var socket = args[0];
|
|
124
31
|
|
|
125
|
-
|
|
126
|
-
const ctx = TraceContextManager.start();
|
|
127
|
-
if (!ctx) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
32
|
+
MeterSocketio.connected(1);
|
|
130
33
|
|
|
131
|
-
|
|
132
|
-
|
|
34
|
+
socket.on('disconnect', function() {
|
|
35
|
+
MeterSocketio.disconnected();
|
|
36
|
+
});
|
|
133
37
|
|
|
134
|
-
|
|
135
|
-
|
|
38
|
+
aop.before(socket, ['emit', 'send'], function(obj, args) {
|
|
39
|
+
if (args[0] === 'newListener') return;
|
|
40
|
+
MeterSocketio.send(null, args);
|
|
41
|
+
});
|
|
136
42
|
|
|
137
|
-
|
|
43
|
+
aop.before(socket, ['on', 'addListener'], function(obj, args) {
|
|
44
|
+
if (args[0] === 'disconnect') return;
|
|
45
|
+
aop.functionHook(args, -1, function (obj, args) {
|
|
46
|
+
MeterSocketio.receive(null, args[0]);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
138
52
|
}
|
|
139
53
|
|
|
140
54
|
exports.SocketIOObserver = SocketIOObserver;
|
package/package.json
CHANGED