Comparing version 0.4.91 to 0.4.92
@@ -7,18 +7,3 @@ /** | ||
var MeterSocketio = require('../counter/meter/meter-socket.io'), | ||
TraceContextManager = require('../trace/trace-context-manager'), | ||
SocketStep = require('../step/socket-step'), | ||
conf = require('../conf/configure'), | ||
IPUtil = require('../util/iputil'), | ||
Logger = require('../logger'); | ||
const {Detector: URLPatternDetector} = require("whatap/lib/trace/serviceurl-pattern-detector"); | ||
const HashUtil = require("whatap/lib/util/hashutil"); | ||
const DataTextAgent = require("whatap/lib/data/datatext-agent"); | ||
const ResourceProfile = require("whatap/lib/util/resourceprofile"); | ||
const ProfilePack = require('../pack/profile-pack'); | ||
const TxRecord = require('../service/tx-record'); | ||
const DateUtil = require('../util/dateutil'); | ||
const SecurityMaster = require('../net/security-master'); | ||
const DataProfileAgent = require('../data/dataprofile-agent'); | ||
const MeterService = require('../counter/meter/meter-service').MeterService; | ||
var MeterSocketio = require('../counter/meter/meter-socket.io'); | ||
@@ -30,113 +15,42 @@ var SocketIOObserver = function(agent){ | ||
SocketIOObserver.prototype.inject = function (mod, moduleName) { | ||
if (mod.__whatap_observe__) { | ||
return; | ||
} | ||
mod.__whatap_observe__ = true; | ||
Logger.initPrint("SocketIOObserver"); | ||
if (conf.trace_background_socket_enabled === false) { | ||
return; | ||
} | ||
SocketIOObserver.prototype.inject = function( mod ){ | ||
var self = this; | ||
var aop = self.agent.aop; | ||
aop.before(mod.Server?.prototype, 'on', function (obj, args, ret, lctx) { | ||
args[args.length-1] = self.__createTransactionObserver(args[args.length-1]); | ||
}) | ||
}; | ||
if(mod.__whatap_observe__) { return; } | ||
mod.__whatap_observe__ = true; | ||
SocketIOObserver.prototype.__createTransactionObserver = function (callback) { | ||
var self = this; | ||
aop.after(mod.prototype, ['listen','attach'], function(obj, args, ret) { | ||
if (!ret.sockets) return; | ||
return function (){ | ||
TraceContextManager._asyncLocalStorage.run(initCtx(), () => { | ||
var ctx = TraceContextManager._asyncLocalStorage.getStore(); | ||
if(!ctx) { | ||
return; | ||
} | ||
aop.before(ret.sockets, ['on', 'addListener'], function(obj, args) { | ||
if (args[0] !== 'connection') return; | ||
MeterSocketio.connected(1); | ||
aop.functionHook(args, -1, function(obj, args) { | ||
if (!args[0]) return; //no client socket | ||
var host; | ||
const socket = arguments[0]; | ||
const address = socket.handshake.address; | ||
if(address && address.includes(':')){ | ||
host = address.substring(address.lastIndexOf(':')+1); | ||
} | ||
var socket = args[0]; | ||
ctx.socket_connecting = true; | ||
MeterSocketio.connected(1); | ||
ctx.footprint('Socket Connecting: ' + host); | ||
socket.on('disconnect', function() { | ||
MeterSocketio.disconnected(); | ||
}); | ||
var step = new SocketStep(); | ||
step.start_time = ctx.getElapsedTime(); | ||
step.ipaddr = Buffer.from(IPUtil.stringToBytes(host)); | ||
// step.port = port; | ||
aop.before(socket, ['emit', 'send'], function(obj, args) { | ||
if (args[0] === 'newListener') return; | ||
MeterSocketio.send(null, args); | ||
}); | ||
ctx.socket_connecting = false; | ||
step.elapsed = ctx.getElapsedTime() - step.start_time; | ||
ctx.profile.push(step); | ||
ctx.footprint('Socket Connecting Done'); | ||
self.__endTransaction(null, ctx); | ||
return; | ||
}) | ||
} | ||
aop.before(socket, ['on', 'addListener'], function(obj, args) { | ||
if (args[0] === 'disconnect') return; | ||
aop.functionHook(args, -1, function (obj, args) { | ||
MeterSocketio.receive(null, args[0]); | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); | ||
} | ||
SocketIOObserver.prototype.__endTransaction = function(error, ctx) { | ||
try { | ||
var profile = new ProfilePack(); | ||
var wtx = new TxRecord(); | ||
wtx.endTime = DateUtil.currentTime(); | ||
profile.time = wtx.endTime; | ||
wtx.elapsed = ctx.getElapsedTime(); | ||
ctx.service_hash = HashUtil.hashFromString(ctx.service_name); | ||
DataTextAgent.SERVICE.add(ctx.service_hash, ctx.service_name); | ||
wtx.service = ctx.service_hash; | ||
wtx.cpuTime = ResourceProfile.getCPUTime() - ctx.start_cpu; | ||
wtx.malloc = ResourceProfile.getUsedHeapSize()-ctx.start_malloc; | ||
if(wtx.malloc < 0) { wtx.malloc = 0; } | ||
wtx.status = 2; | ||
MeterService.add(wtx.service, wtx.elapsed, | ||
wtx.errorLevel, ctx.mcaller_pcode, ctx.mcaller_okind, ctx.mcaller_oid); | ||
profile.oid = SecurityMaster.OID; | ||
profile.service = wtx; | ||
TraceContextManager.end(ctx._id); | ||
setTimeout(function () { | ||
DataProfileAgent.sendProfile(ctx, profile, false); | ||
ctx = null; | ||
}, 100); | ||
} catch (e) { | ||
Logger.printError('WHATAP-607', 'End transaction error..', e, false); | ||
TraceContextManager.end(ctx._id); | ||
ctx = null; | ||
} | ||
}; | ||
function initCtx() { | ||
const ctx = TraceContextManager.start(); | ||
if (!ctx) { | ||
return; | ||
} | ||
ctx.start_malloc = ResourceProfile.getUsedHeapSize(); | ||
ctx.start_cpu = ResourceProfile.getCPUTime(); | ||
var remote_addr = IPUtil.checkIp4("0.0.0.0"); | ||
ctx.remoteIp = IPUtil.stringToInt(remote_addr); | ||
return ctx; | ||
} | ||
exports.SocketIOObserver = SocketIOObserver; |
{ | ||
"name": "whatap", | ||
"homepage": "http://www.whatap.io", | ||
"version": "0.4.91", | ||
"releaseDate": "20240205", | ||
"version": "0.4.92", | ||
"releaseDate": "20240206", | ||
"description": "Monitoring and Profiling Service", | ||
@@ -7,0 +7,0 @@ "main": "index.js", |
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
958005
20547