Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const shimmer=require("shimmer"),requireHook=require("../../../util/requireHook"),tracingUtil=require("../../tracingUtil"),constants=require("../../constants"),cls=require("../../cls");let isActive=!1,clientHasBeenInstrumented=!1;function instrumentNatsStreaming(natsStreamingModule){shimmer.wrap(natsStreamingModule,"connect",shimConnect)}function shimConnect(originalFunction){return function(){var client=originalFunction.apply(this,arguments);return clientHasBeenInstrumented||(shimmer.wrap(client.constructor.prototype,"publish",shimPublish.bind(null,client.options.url)),shimmer.wrap(client.constructor.prototype,"subscribe",shimSubscribe.bind(null,client.options.url)),clientHasBeenInstrumented=!0),client}}function shimPublish(natsUrl,originalFunction){return function(){var originalArgs=new Array(arguments.length);for(let i=0;i<arguments.length;i++)originalArgs[i]=arguments[i];return instrumentedPublish(this,originalFunction,originalArgs,natsUrl)}}function instrumentedPublish(ctx,originalPublish,originalArgs,natsUrl){if(cls.skipExitTracing({isActive:isActive}))return originalPublish.apply(ctx,originalArgs);const subject=originalArgs[0],originalCallback="function"==typeof originalArgs[2]?originalArgs[2]:null;return cls.ns.runAndReturn(()=>{const span=cls.startSpan("nats.streaming",constants.EXIT);span.ts=Date.now(),span.stack=tracingUtil.getStackTrace(instrumentedPublish),span.data.nats={sort:"publish",address:natsUrl,subject:subject},originalCallback&&(originalArgs[2]=cls.ns.bind(function(err){addErrorToSpan(err,span),finishSpan(span),originalCallback.apply(this,arguments)}));try{return originalPublish.apply(ctx,originalArgs)}catch(e){throw addErrorToSpan(e,span),e}finally{originalCallback||finishSpan(span)}})}function shimSubscribe(natsUrl,originalFunction){return function(){var subscription=originalFunction.apply(this,arguments);return subscription&&shimmer.wrap(subscription,"emit",shimSubscriptionEmit.bind(null,natsUrl,arguments[0])),subscription}}function shimSubscriptionEmit(natsUrl,subject,originalFunction){return function(type){if(!isActive||"message"!==type&&"error"!==type)return originalFunction.apply(this,arguments);var originalArgs=new Array(arguments.length);for(let i=0;i<arguments.length;i++)originalArgs[i]=arguments[i];return instrumentedEmit(this,originalFunction,originalArgs,natsUrl,subject)}}function instrumentedEmit(ctx,originalEmit,originalArgs,natsUrl,subject){return"message"===originalArgs[0]?captureMessageSpan(ctx,originalEmit,originalArgs,natsUrl,subject):"error"===originalArgs[0]?captureErrorInCurrentSpan(ctx,originalEmit,originalArgs):void 0}function captureMessageSpan(ctx,originalEmit,originalArgs,natsUrl,subject){let span;var activeSpan=cls.getCurrentSpan();if(activeSpan&&"nats"===activeSpan.n&&constants.isEntrySpan(activeSpan))(span=activeSpan).n="nats.streaming";else if(activeSpan)return originalEmit.apply(ctx,originalArgs);return cls.ns.runAndReturn(()=>{(span=span||cls.startSpan("nats.streaming",constants.ENTRY)).ts=Date.now(),span.stack=tracingUtil.getStackTrace(instrumentedEmit),span.data.nats={sort:"consume",address:natsUrl,subject:subject};try{return originalEmit.apply(ctx,originalArgs)}finally{setImmediate(()=>{finishSpan(span)})}})}function captureErrorInCurrentSpan(ctx,originalEmit,originalArgs){var activeSpan=cls.getCurrentSpan();return activeSpan&&"nats.streaming"===activeSpan.n&&addErrorToSpan(originalArgs[1],activeSpan),originalEmit.apply(ctx,originalArgs)}function addErrorToSpan(err,span){if(err){span.ec=1;let errMsg=null;err.message?errMsg=err.message:"string"==typeof err&&(errMsg=err),errMsg&&span.data.nats.error?span.data.nats.error+=", "+errMsg:errMsg&&(span.data.nats.error=errMsg)}}function finishSpan(span){span.d=Date.now()-span.ts,span.transmit()}exports.init=function(){requireHook.onModuleLoad("node-nats-streaming",instrumentNatsStreaming)},exports.activate=function(){isActive=!0},exports.deactivate=function(){isActive=!1};