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.
@@ -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 (mod, moduleName) {
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
- aop.before(mod.Server?.prototype, 'on', function (obj, args, ret, lctx) {
43
- args[args.length-1] = self.__createTransactionObserver(args[args.length-1]);
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
- profile.oid = SecurityMaster.OID;
109
- profile.service = wtx;
21
+ aop.after(mod.prototype, ['listen','attach'], function(obj, args, ret) {
22
+ if (!ret.sockets) return;
110
23
 
111
- TraceContextManager.end(ctx._id);
112
- setTimeout(function () {
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
- } catch (e) {
118
- Logger.printError('WHATAP-607', 'End transaction error..', e, false);
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
- function initCtx() {
126
- const ctx = TraceContextManager.start();
127
- if (!ctx) {
128
- return;
129
- }
32
+ MeterSocketio.connected(1);
130
33
 
131
- ctx.start_malloc = ResourceProfile.getUsedHeapSize();
132
- ctx.start_cpu = ResourceProfile.getCPUTime();
34
+ socket.on('disconnect', function() {
35
+ MeterSocketio.disconnected();
36
+ });
133
37
 
134
- var remote_addr = IPUtil.checkIp4("0.0.0.0");
135
- ctx.remoteIp = IPUtil.stringToInt(remote_addr);
38
+ aop.before(socket, ['emit', 'send'], function(obj, args) {
39
+ if (args[0] === 'newListener') return;
40
+ MeterSocketio.send(null, args);
41
+ });
136
42
 
137
- return ctx;
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
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "whatap",
3
3
  "homepage": "http://www.whatap.io",
4
- "version": "0.4.91",
5
- "releaseDate": "20240205",
4
+ "version": "0.4.92",
5
+ "releaseDate": "20240206",
6
6
  "description": "Monitoring and Profiling Service",
7
7
  "main": "index.js",
8
8
  "scripts": {},