From 16f9a8b9ced92a39c4fcff9af50e50ee7315aa1c Mon Sep 17 00:00:00 2001 From: Dan Jarvis Date: Wed, 12 Apr 2023 09:34:53 -0500 Subject: [PATCH] fix: SC-799 Added capture warning when spans are not closed (#631) --- node/packages/sdk/index.js | 8 +++++++- node/packages/sdk/lib/trace-span.js | 8 +++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/node/packages/sdk/index.js b/node/packages/sdk/index.js index 20cec2286..9235438b1 100644 --- a/node/packages/sdk/index.js +++ b/node/packages/sdk/index.js @@ -110,7 +110,13 @@ serverlessSdk._initialize = (options = {}) => { return serverlessSdk; }; -serverlessSdk._createTraceSpan = (name, options = {}) => new TraceSpan(name, options); +serverlessSdk._createTraceSpan = (name, options = {}) => + new TraceSpan( + name, + Object.assign(options, { + _reportWarning: reportWarning, + }) + ); serverlessSdk._reportError = reportError; serverlessSdk._reportWarning = reportWarning; serverlessSdk._reportNotice = reportNotice; diff --git a/node/packages/sdk/lib/trace-span.js b/node/packages/sdk/lib/trace-span.js index 53ecf21fa..967636fcb 100644 --- a/node/packages/sdk/lib/trace-span.js +++ b/node/packages/sdk/lib/trace-span.js @@ -43,6 +43,7 @@ class TraceSpan { ); } } + this._reportWarning = options._reportWarning; this.startTime = startTime || defaultStartTime; this.name = ensureSpanName(name); @@ -85,6 +86,7 @@ class TraceSpan { new TraceSpan(immediateDescendants.shift(), { startTime: this.startTime, immediateDescendants, + _reportWarning: this._reportWarning, }); } } @@ -132,10 +134,10 @@ class TraceSpan { leftoverSpans.push(subSpan.close({ endTime: this.endTime })); } if (leftoverSpans.length) { - process.stderr.write( + const message = "Serverless SDK Warning: Following trace spans didn't end before end of " + - `lambda invocation: ${leftoverSpans.map(({ name }) => name).join(', ')}\n` - ); + `lambda invocation: ${leftoverSpans.map(({ name }) => name).join(', ')}\n`; + this._reportWarning(message, 'SDK_SPAN_NOT_CLOSED'); } asyncLocalStorage.enterWith(this); } else {