net.js 6.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const core_1 = require("@opencensus/core");
  4. const shimmer = require("shimmer");
  5. class NetPlugin extends core_1.BasePlugin {
  6. constructor(moduleName) {
  7. super(moduleName);
  8. }
  9. applyPatch() {
  10. this.logger.debug('applying patch to %s@%s', this.moduleName, this.version);
  11. if (this.moduleExports && this.moduleExports.Server &&
  12. this.moduleExports.Server.prototype) {
  13. shimmer.wrap(this.moduleExports.Server.prototype, 'emit', this.getPatchIncomingRequestFunction());
  14. }
  15. else {
  16. this.logger.error('Could not apply patch to %s.emit. Interface is not as expected.', this.moduleName);
  17. }
  18. return this.moduleExports;
  19. }
  20. applyUnpatch() {
  21. if (this.moduleExports && this.moduleExports.Server &&
  22. this.moduleExports.Server.prototype) {
  23. shimmer.unwrap(this.moduleExports.Server.prototype, 'emit');
  24. }
  25. else {
  26. this.logger.error('Could not unapply patch to %s.emit. Interface is not as expected.', this.moduleName);
  27. }
  28. }
  29. getPatchIncomingRequestFunction() {
  30. return (original) => {
  31. const plugin = this;
  32. return function incomingRequest(event, ...args) {
  33. if (event !== 'connection') {
  34. return original.apply(this, arguments);
  35. }
  36. const socket = args[0];
  37. plugin.logger.debug('%s plugin incomingRequest', plugin.moduleName);
  38. const traceOptions = {
  39. name: 'socket',
  40. kind: core_1.SpanKind.SERVER,
  41. spanContext: undefined
  42. };
  43. return plugin.tracer.startRootSpan(traceOptions, rootSpan => {
  44. if (!rootSpan)
  45. return original.apply(this, arguments);
  46. plugin.tracer.wrapEmitter(socket);
  47. const address = socket.address();
  48. if (typeof address === 'string') {
  49. rootSpan.addAttribute('net.address', address);
  50. }
  51. else {
  52. rootSpan.addAttribute('net.host', address.address);
  53. rootSpan.addAttribute('net.port', address.port);
  54. rootSpan.addAttribute('net.family', address.family);
  55. }
  56. socket.on('error', (err) => {
  57. rootSpan.addAttribute('net.error', err.message);
  58. });
  59. const originalEnd = socket.end;
  60. socket.end = function () {
  61. if (rootSpan.ended === false) {
  62. rootSpan.end();
  63. }
  64. return originalEnd.apply(this, arguments);
  65. };
  66. socket.on('close', () => {
  67. if (rootSpan.ended === false) {
  68. rootSpan.end();
  69. }
  70. });
  71. return original.apply(this, arguments);
  72. });
  73. };
  74. };
  75. }
  76. }
  77. exports.NetPlugin = NetPlugin;
  78. exports.plugin = new NetPlugin('net');
  79. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NlbnN1cy9wbHVnaW5zL25ldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdCQSwyQ0FBcUU7QUFFckUsbUNBQWtDO0FBR2xDLE1BQWEsU0FBVSxTQUFRLGlCQUFVO0lBR3ZDLFlBQWEsVUFBa0I7UUFDN0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ25CLENBQUM7SUFLUyxVQUFVO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTNFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFDM0MsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUMsQ0FBQTtTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2IsaUVBQWlFLEVBQ2pFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtTQUNyQjtRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQTtJQUMzQixDQUFDO0lBR0QsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQzVEO2FBQU07WUFDTCxJQUFJLENBQUMsTUFB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