@instana/shared-metrics
Version: 
Internal metrics plug-in package for Node.js monitoring with Instana
47 lines (37 loc) • 1.14 kB
JavaScript
/*
 * (c) Copyright IBM Corp. 2021
 * (c) Copyright Instana Inc. and contributors 2015
 */
;
exports.payloadPrefix = 'http';
/** @type {Object.<string, *>} */
exports.currentPayload = {};
exports.activate = function activate() {};
exports.deactivate = function deactivate() {};
instrumentHttpModule('http');
instrumentHttpModule('https');
/**
 * @param {string} httpModuleName
 */
function instrumentHttpModule(httpModuleName) {
  const coreHttpModule = require(httpModuleName);
  const originalCreateServer = coreHttpModule.createServer;
  coreHttpModule.createServer = function createServer() {
    const server = originalCreateServer.apply(coreHttpModule, arguments);
    /** @type {*} */
    const payloadContext = {
      type: httpModuleName
    };
    /** @type {string} */
    let key;
    server.on('listening', () => {
      payloadContext.address = server.address();
      key = payloadContext.address.address + payloadContext.address.port;
      exports.currentPayload[key] = payloadContext;
    });
    server.on('close', () => {
      delete exports.currentPayload[key];
    });
    return server;
  };
}