UNPKG

apminsight

Version:

monitor nodejs applications

99 lines (92 loc) 3.07 kB
var wrapper = require("./wrapper"); var utils = require("./../util/utils"); var logger = require("./../util/logger"); var http2Info = { stream: [ { functionName: ["close", "setTimeout"] } ], session: [ { functionName: ["close", "ping", "setTimeout"] } ] }; function handleHttp2Request(req, res) { try { if (req && req.stream && req.stream.session) { if (!req.stream.apminsightTxn) { var listenerName = "emit - request"; var txn = apmInsightAgentInstance.createTxn( req, res, listenerName ); req.stream.apminsightTxn = txn; req.stream.session.apminsightTxn = txn; instrumentHttp2Stream(req.stream); instrumentHttp2Session(req.session); apmInsightAgentInstance.endRootTracker(); apmInsightAgentInstance.clearCurContext(); } else { req.stream.apminsightTxn.endRootTracker(); } } } catch (e) { logger.error("Error occured in http2 : " + listenerName); } } /* eslint-disable no-unused-vars */ function handleHttp2StreamOrSession(actualHandler, event) { return function (streamOrSession, header) { try { var tracker; var curTxn = streamOrSession.apminsightTxn; if (curTxn && !curTxn.isCompleted()) { apmInsightAgentInstance.setCurContext( streamOrSession.apminsightTxn ); var listenerName = utils.isEmpty(actualHandler.name) ? "Anonymous" : actualHandler.name; var trackerName = "emit - " + event + " - " + listenerName; var trackerInfo = { trackerName: trackerName, sync: true }; tracker = apmInsightAgentInstance.createTracker(trackerInfo); } var result = actualHandler.apply(this, arguments); apmInsightAgentInstance.endTracker(tracker); return result; } catch (e) { apmInsightAgentInstance.handleErrorTracker(tracker, e); throw e; } finally { apmInsightAgentInstance.clearCurContext(); } }; } /* eslint-enable no-unused-vars */ function instrumentHttp2Stream(stream) { http2Info.stream.forEach(function (eachFunction) { wrapper.checkAndWrapFunction( stream, eachFunction, "Http2Stream", eachFunction.functionName ); }); } function instrumentHttp2Session(session) { http2Info.session.forEach(function (eachFunction) { wrapper.checkAndWrapFunction( session, eachFunction, "Http2Session", eachFunction.functionName ); }); } module.exports = { handleHttp2Request: handleHttp2Request, handleHttp2StreamOrSession: handleHttp2StreamOrSession };