Repository URL to install this package:
|
Version:
0.7.0 ▾
|
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const process=require("process"),ENTRY=require("../../constants")["ENTRY"],shimmer=require("shimmer"),cls=require("../../cls"),spanBuffer=require("../../spanBuffer"),bullSpanName=require("../messaging/bull").spanName;let isActive=!1;const bullKeepAlive=1e4;let currentlyActiveBullEntrySpan;function shimProcessEmitForBullChildWorker(originalProcessEmit){return function(event){if(!isActive||"message"!==event)return originalProcessEmit.apply(this,arguments);event=arguments[1];if(!event||"start"!==event.cmd||!event.job||!event.job.opts)return originalProcessEmit.apply(this,arguments);const traceContext=event.job.opts.instanaTracingContext;return delete event.job.opts.instanaTracingContext,traceContext&&traceContext.X_SUPERTENANT_T&&traceContext.X_SUPERTENANT_S?cls.ns.runAndReturn(()=>(currentlyActiveBullEntrySpan=cls.putPseudoSpan(bullSpanName,ENTRY,traceContext.X_SUPERTENANT_T,traceContext.X_SUPERTENANT_S),originalProcessEmit.apply(this,arguments))):originalProcessEmit.apply(this,arguments)}}function shimProcessSendForBullChildWorker(originalProcessSend){return function(message){if(message&¤tlyActiveBullEntrySpan&&("completed"===message.cmd||"failed"===message.cmd)){currentlyActiveBullEntrySpan.d=Date.now()-currentlyActiveBullEntrySpan.ts,currentlyActiveBullEntrySpan.transmit();const spanReferenceForKeepAlive=currentlyActiveBullEntrySpan,keepAliveStartedAt=(currentlyActiveBullEntrySpan=null,Date.now()),keepAliveHandle=setInterval(()=>{(spanReferenceForKeepAlive.transmitted&&spanBuffer.isEmpty()||Date.now()-bullKeepAlive>keepAliveStartedAt)&&clearInterval(keepAliveHandle)},100)}return originalProcessSend.apply(this,arguments)}}exports.init=function(config){config.tracing.activateBullProcessInstrumentation&&(shimmer.wrap(process,"emit",shimProcessEmitForBullChildWorker),shimmer.wrap(process,"send",shimProcessSendForBullChildWorker))},exports.activate=function(){isActive=!0},exports.deactivate=function(){isActive=!1};