From bd268cde0ea0312ed32821443123503f4609f4dc Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 12:12:36 +0530 Subject: [PATCH 1/9] refactor: update the span.data.x.error assignement to readability and future reassignement --- .../tracing/instrumentation/protocols/httpClient.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/core/src/tracing/instrumentation/protocols/httpClient.js b/packages/core/src/tracing/instrumentation/protocols/httpClient.js index d3d3ba9ea4..e1e0af8d73 100644 --- a/packages/core/src/tracing/instrumentation/protocols/httpClient.js +++ b/packages/core/src/tracing/instrumentation/protocols/httpClient.js @@ -262,10 +262,9 @@ function instrument(coreModule, forceHttps) { } catch (e) { // A synchronous exception indicates a failure that is not covered by the listeners. Using a malformed URL for // example is a case that triggers a synchronous exception. - span.data.http = { - url: completeCallUrl, - error: e ? e.message : '' - }; + span.data.http.url = completeCallUrl; + + span.data.http.error = e ? e.message : ''; span.d = Date.now() - span.ts; span.ec = 1; span.transmit(); @@ -311,9 +310,9 @@ function instrument(coreModule, forceHttps) { } span.data.http = { method: clientRequest.method, - url: completeCallUrl, - error: errorMessage + url: completeCallUrl }; + span.data.http.error = errorMessage; span.d = Date.now() - span.ts; span.ec = 1; span.transmit(); From beb4a6772a0bb62ad4249c1fb7f4208af64f07ac Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:04:54 +0530 Subject: [PATCH 2/9] chore: refactored protocols --- .../tracing/instrumentation/protocols/grpcJs.js | 16 ++++++++++++---- .../instrumentation/protocols/httpClient.js | 10 ++++++++-- .../instrumentation/protocols/nativeFetch.js | 4 +++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/core/src/tracing/instrumentation/protocols/grpcJs.js b/packages/core/src/tracing/instrumentation/protocols/grpcJs.js index 63c720a821..7f9f3855b6 100644 --- a/packages/core/src/tracing/instrumentation/protocols/grpcJs.js +++ b/packages/core/src/tracing/instrumentation/protocols/grpcJs.js @@ -116,7 +116,9 @@ function modifyArgs(name, originalArgs, span) { } else { span.ec = 1; if (errorMessage) { - span.data.rpc.error = errorMessage; + const errorValue = errorMessage; + const key = 'rpc'; + span.data[key].error = errorValue; } } } @@ -345,7 +347,9 @@ function createInstrumentedServerHandler(name, type, originalHandler) { if (err) { span.ec = 1; if (err.message || err.details) { - span.data.rpc.error = err.message || err.details; + const errorValue = err.message || err.details; + const key = 'rpc'; + span.data[key].error = errorValue; } } span.d = Date.now() - span.ts; @@ -370,7 +374,9 @@ function createInstrumentedServerHandler(name, type, originalHandler) { call.on('error', err => { span.ec = 1; if (err.message || err.details) { - span.data.rpc.error = err.message || err.details; + const errorValue = err.message || err.details; + const key = 'rpc'; + span.data[key].error = errorValue; } }); @@ -432,7 +438,9 @@ function instrumentedClientMethod( } else { span.ec = 1; if (errorMessage) { - span.data.rpc.error = errorMessage; + const errorValue = errorMessage; + const key = 'rpc'; + span.data[key].error = errorValue; } } span.transmit(); diff --git a/packages/core/src/tracing/instrumentation/protocols/httpClient.js b/packages/core/src/tracing/instrumentation/protocols/httpClient.js index e1e0af8d73..ae5a2a8127 100644 --- a/packages/core/src/tracing/instrumentation/protocols/httpClient.js +++ b/packages/core/src/tracing/instrumentation/protocols/httpClient.js @@ -264,7 +264,10 @@ function instrument(coreModule, forceHttps) { // example is a case that triggers a synchronous exception. span.data.http.url = completeCallUrl; - span.data.http.error = e ? e.message : ''; + const errorValue = e ? e.message : ''; + const key = 'http'; + + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.ec = 1; span.transmit(); @@ -312,7 +315,10 @@ function instrument(coreModule, forceHttps) { method: clientRequest.method, url: completeCallUrl }; - span.data.http.error = errorMessage; + const errorValue = errorMessage; + const key = 'http'; + + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.ec = 1; span.transmit(); diff --git a/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js b/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js index 342c217921..7d63a8b964 100644 --- a/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js +++ b/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js @@ -184,7 +184,9 @@ function instrument() { }) .catch(err => { span.ec = 1; - span.data.http.error = err.message; + const errorValue = err.message; + const key = 'http'; + span.data[key].error = errorValue; }) .finally(() => { span.d = Date.now() - span.ts; From 6eb11391a294505ffffdea0881392ba2d1fdefd5 Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:05:27 +0530 Subject: [PATCH 3/9] chore: refactored messaging --- .../src/tracing/instrumentation/messaging/bull.js | 8 ++++++-- .../src/tracing/instrumentation/messaging/kafkaJs.js | 8 ++++++-- .../tracing/instrumentation/messaging/kafkaNode.js | 4 +++- .../src/tracing/instrumentation/messaging/nats.js | 8 ++++++-- .../instrumentation/messaging/natsStreaming.js | 8 ++++++-- .../src/tracing/instrumentation/messaging/rdkafka.js | 12 +++++++++--- 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/packages/core/src/tracing/instrumentation/messaging/bull.js b/packages/core/src/tracing/instrumentation/messaging/bull.js index 21115672a6..fc9c4de46e 100644 --- a/packages/core/src/tracing/instrumentation/messaging/bull.js +++ b/packages/core/src/tracing/instrumentation/messaging/bull.js @@ -326,9 +326,13 @@ function addErrorToSpan(err, span) { if (err) { span.ec = 1; if (err.code) { - span.data.bull.error = err.code; + const errorValue = err.code; + const key = 'bull'; + span.data[key].error = errorValue; } else if (typeof err === 'string') { - span.data.bull.error = err; + const errorValue = err; + const key = 'bull'; + span.data[key].error = errorValue; } } } diff --git a/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js b/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js index 16f44c27e3..c3c1c88276 100644 --- a/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js +++ b/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js @@ -105,7 +105,9 @@ function instrumentedSend(ctx, originalSend, originalArgs, topic, messages) { }) .catch(error => { span.ec = 1; - span.data.kafka.error = error.message; + const errorValue = error.message; + const key = 'kafka'; + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.transmit(); throw error; @@ -184,7 +186,9 @@ function instrumentedSendBatch(ctx, originalSendBatch, originalArgs, topicMessag }) .catch(error => { span.ec = 1; - span.data.kafka.error = error.message; + const errorValue = error.message; + const key = 'kafka'; + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.transmit(); throw error; diff --git a/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js b/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js index a243cc3806..080b87a436 100644 --- a/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js +++ b/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js @@ -81,7 +81,9 @@ function instrumentedSend(ctx, originalSend, produceRequests, cb) { cls.ns.bind(function onSendCompleted(err) { if (err) { span.ec = 1; - span.data.kafka.error = err.message; + const errorValue = err.message; + const key = 'kafka'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/messaging/nats.js b/packages/core/src/tracing/instrumentation/messaging/nats.js index 2f9a3e0465..dbd997fd67 100644 --- a/packages/core/src/tracing/instrumentation/messaging/nats.js +++ b/packages/core/src/tracing/instrumentation/messaging/nats.js @@ -404,9 +404,13 @@ function addErrorToSpan(err, span) { errMsg = err; } if (errMsg && span.data.nats.error) { - span.data.nats.error += `, ${errMsg}`; + const errorValue = `${span.data.nats.error}, ${errMsg}`; + const key = 'nats'; + span.data[key].error = errorValue; } else if (errMsg) { - span.data.nats.error = errMsg; + const errorValue = errMsg; + const key = 'nats'; + span.data[key].error = errorValue; } } } diff --git a/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js b/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js index cc72ff8777..cdd2c5864b 100644 --- a/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js +++ b/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js @@ -201,9 +201,13 @@ function addErrorToSpan(err, span) { errMsg = err; } if (errMsg && span.data.nats.error) { - span.data.nats.error += `, ${errMsg}`; + const errorValue = `${span.data.nats.error}, ${errMsg}`; + const key = 'nats'; + span.data[key].error = errorValue; } else if (errMsg) { - span.data.nats.error = errMsg; + const errorValue = errMsg; + const key = 'nats'; + span.data[key].error = errorValue; } } } diff --git a/packages/core/src/tracing/instrumentation/messaging/rdkafka.js b/packages/core/src/tracing/instrumentation/messaging/rdkafka.js index d756c6f4f1..b7447da795 100644 --- a/packages/core/src/tracing/instrumentation/messaging/rdkafka.js +++ b/packages/core/src/tracing/instrumentation/messaging/rdkafka.js @@ -167,7 +167,9 @@ function instrumentedProduce(ctx, originalProduce, originalArgs) { if (err) { span.ec = 1; - span.data.kafka.error = err.message; + const errorValue = err.message; + const key = 'kafka'; + span.data[key].error = errorValue; } span.transmit(); @@ -187,7 +189,9 @@ function instrumentedProduce(ctx, originalProduce, originalArgs) { // e.g. cannot send message because format is byte // "Message must be a buffer or null" span.ec = 1; - span.data.kafka.error = error.message; + const errorValue = error.message; + const key = 'kafka'; + span.data[key].error = errorValue; if (!deliveryCb) { span.d = Date.now() - span.ts; @@ -305,7 +309,9 @@ function instrumentedConsumerEmit(ctx, originalEmit, originalArgs) { delete messageData.headers; span.ec = 1; - span.data.kafka.error = messageData.message; + const errorValue = messageData.message; + const key = 'kafka'; + span.data[key].error = errorValue; } setImmediate(() => { From 21e9a7f62e263ea36dbd81e3056de4352761af1e Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:05:47 +0530 Subject: [PATCH 4/9] chore: refactored frameworks --- .../core/src/tracing/instrumentation/frameworks/express.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/src/tracing/instrumentation/frameworks/express.js b/packages/core/src/tracing/instrumentation/frameworks/express.js index 208daa0885..aaefdaa8b6 100644 --- a/packages/core/src/tracing/instrumentation/frameworks/express.js +++ b/packages/core/src/tracing/instrumentation/frameworks/express.js @@ -116,7 +116,9 @@ function annotateHttpEntrySpanWithError(err) { return; } - span.data.http.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'http'; + span.data[key].error = errorValue; } function shimHandlerRegistration(original) { From 6f261cc0b1f30c682115bbb6ff71197afcc83efb Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:06:15 +0530 Subject: [PATCH 5/9] chore: refactored databases --- .../instrumentation/databases/couchbase.js | 12 +++- .../tracing/instrumentation/databases/db2.js | 60 ++++++++++++++----- .../databases/elasticsearch.js | 4 +- .../instrumentation/databases/ioredis.js | 16 +++-- .../instrumentation/databases/mongodb.js | 8 ++- .../instrumentation/databases/mssql.js | 4 +- .../instrumentation/databases/mysql.js | 8 ++- .../tracing/instrumentation/databases/pg.js | 4 +- .../instrumentation/databases/pgNative.js | 4 +- .../instrumentation/databases/prisma.js | 4 +- .../instrumentation/databases/redis.js | 21 +++++-- 11 files changed, 108 insertions(+), 37 deletions(-) diff --git a/packages/core/src/tracing/instrumentation/databases/couchbase.js b/packages/core/src/tracing/instrumentation/databases/couchbase.js index cb10cd29ff..1a54555dd1 100644 --- a/packages/core/src/tracing/instrumentation/databases/couchbase.js +++ b/packages/core/src/tracing/instrumentation/databases/couchbase.js @@ -430,7 +430,9 @@ function instrumentTransactions(cluster, connectionStr) { result .catch(err => { span.ec = 1; - span.data.couchbase.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'couchbase'; + span.data[key].error = errorValue; }) .finally(() => { span.d = Date.now() - span.ts; @@ -497,7 +499,9 @@ function instrumentOperation({ connectionStr, bucketName, getBucketTypeFn, sql, }) .catch(err => { span.ec = 1; - span.data.couchbase.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'couchbase'; + span.data[key].error = errorValue; }) .finally(() => { span.d = Date.now() - span.ts; @@ -510,7 +514,9 @@ function instrumentOperation({ connectionStr, bucketName, getBucketTypeFn, sql, originalArgs[callbackIndex] = cls.ns.bind(function instanaCallback(err, result) { if (err) { span.ec = 1; - span.data.couchbase.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'couchbase'; + span.data[key].error = errorValue; } if (resultHandler) { diff --git a/packages/core/src/tracing/instrumentation/databases/db2.js b/packages/core/src/tracing/instrumentation/databases/db2.js index 2b163095bc..2d625a7c37 100644 --- a/packages/core/src/tracing/instrumentation/databases/db2.js +++ b/packages/core/src/tracing/instrumentation/databases/db2.js @@ -222,7 +222,9 @@ function captureFetchError(result, span) { argsFetch[fetchIndex] = function instanaFetchCb(fetchCbErr) { if (fetchCbErr) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(fetchCbErr); + const errorValue = tracingUtil.getErrorDetails(fetchCbErr); + const key = 'db2'; + span.data[key].error = errorValue; } return fetchCb.apply(this, arguments); @@ -232,7 +234,9 @@ function captureFetchError(result, span) { return originalFn.apply(this, arguments); } catch (caughtErr) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(caughtErr); + const errorValue = tracingUtil.getErrorDetails(caughtErr); + const key = 'db2'; + span.data[key].error = errorValue; throw caughtErr; } }; @@ -249,12 +253,16 @@ function captureFetchError(result, span) { if (res instanceof Error) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(res); + const errorValue = tracingUtil.getErrorDetails(res); + const key = 'db2'; + span.data[key].error = errorValue; } return res; } catch (err) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'db2'; + span.data[key].error = errorValue; return err; } @@ -278,14 +286,18 @@ function instrumentQueryHelper(ctx, originalArgs, originalFunction, stmt, isAsyn if (result instanceof Error) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(result); + const errorValue = tracingUtil.getErrorDetails(result); + const key = 'db2'; + span.data[key].error = errorValue; } finishSpan(ctx, result, span); return result; } catch (e) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(e); + const errorValue = tracingUtil.getErrorDetails(e); + const key = 'db2'; + span.data[key].error = errorValue; finishSpan(ctx, null, span); throw e; } @@ -304,7 +316,9 @@ function instrumentQueryHelper(ctx, originalArgs, originalFunction, stmt, isAsyn originalArgs[customerCallbackIndex] = function instanaCallback(err) { if (err) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'db2'; + span.data[key].error = errorValue; } finishSpan(ctx, null, span); @@ -324,7 +338,9 @@ function instrumentQueryHelper(ctx, originalArgs, originalFunction, stmt, isAsyn }) .catch(err => { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'db2'; + span.data[key].error = errorValue; finishSpan(ctx, null, span); return err; }); @@ -394,7 +410,9 @@ function instrumentExecuteHelper(ctx, originalArgs, stmtObject, prepareCallParen return result; } catch (err) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'db2'; + span.data[key].error = errorValue; finishSpan(ctx, null, span); return err; } @@ -441,7 +459,9 @@ function instrumentExecuteHelper(ctx, originalArgs, stmtObject, prepareCallParen args[origCallbackIndex] = function instanaExecuteCallback(executeErr, result) { if (executeErr) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(executeErr); + const errorValue = tracingUtil.getErrorDetails(executeErr); + const key = 'db2'; + span.data[key].error = errorValue; finishSpan(ctx, null, span); return origCallback.apply(this, arguments); } @@ -470,7 +490,9 @@ function instrumentQueryResultHelper(ctx, originalArgs, originalFunction, stmt, return result; } catch (err) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'db2'; + span.data[key].error = errorValue; finishSpan(ctx, null, span); return err; } @@ -489,7 +511,9 @@ function instrumentQueryResultHelper(ctx, originalArgs, originalFunction, stmt, originalArgs[customerCallbackIndex] = function instanaCallback(err) { if (err) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'db2'; + span.data[key].error = errorValue; } const result = customerCallback.apply(this, arguments); @@ -550,7 +574,9 @@ function finishSpan(ctx, result, span) { if (!closeSyncCalled) { closeSyncCalled = true; span.ec = 1; - span.data.db2.error = `'result.closeSync' was not called within ${CLOSE_TIMEOUT_IN_MS}ms.`; + const errorValue = `'result.closeSync' was not called within ${CLOSE_TIMEOUT_IN_MS}ms.`; + const key = 'db2'; + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.transmit(); } @@ -578,7 +604,9 @@ function handleTransaction(ctx, span) { arguments[1] = function instanaOnEndOverride(onEndErr) { if (onEndErr) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(onEndErr) || 'Error not available.'; + const errorValue = tracingUtil.getErrorDetails(onEndErr) || 'Error not available.'; + const key = 'db2'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; @@ -597,7 +625,9 @@ function handleTransaction(ctx, span) { return result; } catch (err) { span.ec = 1; - span.data.db2.error = tracingUtil.getErrorDetails(err) || 'Error not available.'; + const errorValue = tracingUtil.getErrorDetails(err) || 'Error not available.'; + const key = 'db2'; + span.data[key].error = errorValue; span.transmit(); throw err; } diff --git a/packages/core/src/tracing/instrumentation/databases/elasticsearch.js b/packages/core/src/tracing/instrumentation/databases/elasticsearch.js index 5e04f941fd..f7f17356b1 100644 --- a/packages/core/src/tracing/instrumentation/databases/elasticsearch.js +++ b/packages/core/src/tracing/instrumentation/databases/elasticsearch.js @@ -200,7 +200,9 @@ function onError(span, error) { span.d = Date.now() - span.ts; span.ec = 1; if (error) { - span.data.elasticsearch.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'elasticsearch'; + span.data[key].error = errorValue; } if (error.meta && error.meta.meta) { getConnectionDetailsFromResultMeta(span, error.meta); diff --git a/packages/core/src/tracing/instrumentation/databases/ioredis.js b/packages/core/src/tracing/instrumentation/databases/ioredis.js index 8bbb02dea8..1f83665632 100644 --- a/packages/core/src/tracing/instrumentation/databases/ioredis.js +++ b/packages/core/src/tracing/instrumentation/databases/ioredis.js @@ -115,7 +115,9 @@ function instrumentSendCommand(original) { if (error) { span.ec = 1; - span.data.redis.error = error.message; + const errorValue = error.message; + const key = 'redis'; + span.data[key].error = errorValue; } span.transmit(); @@ -221,7 +223,9 @@ function multiCommandEndCallback(clsContextForMultiOrPipeline, span, error) { if (error) { span.ec = commandCount; - span.data.redis.error = error.message; + const errorValue = error.message; + const key = 'redis'; + span.data[key].error = errorValue; } span.transmit(); @@ -241,7 +245,9 @@ function pipelineCommandEndCallback(clsContextForMultiOrPipeline, span, error, r if (error) { // ioredis docs mention that this should never be possible, but better be safe than sorry span.ec = commandCount; - span.data.redis.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'redis'; + span.data[key].error = errorValue; } else { let numberOfErrors = 0; let sampledError; @@ -257,7 +263,9 @@ function pipelineCommandEndCallback(clsContextForMultiOrPipeline, span, error, r if (numberOfErrors > 0) { span.ec = numberOfErrors; - span.data.redis.error = tracingUtil.getErrorDetails(sampledError); + const errorValue = tracingUtil.getErrorDetails(sampledError); + const key = 'redis'; + span.data[key].error = errorValue; } } diff --git a/packages/core/src/tracing/instrumentation/databases/mongodb.js b/packages/core/src/tracing/instrumentation/databases/mongodb.js index 15ca92270c..cc34b99000 100644 --- a/packages/core/src/tracing/instrumentation/databases/mongodb.js +++ b/packages/core/src/tracing/instrumentation/databases/mongodb.js @@ -438,7 +438,9 @@ function createWrappedCallback(span, originalCallback) { return cls.ns.bind(function (error) { if (error) { span.ec = 1; - span.data.mongo.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'mongo'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; @@ -466,7 +468,9 @@ function handleCallbackOrPromise(ctx, originalArgs, originalFunction, span) { }) .catch(err => { span.ec = 1; - span.data.mongo.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'mongo'; + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.transmit(); return err; diff --git a/packages/core/src/tracing/instrumentation/databases/mssql.js b/packages/core/src/tracing/instrumentation/databases/mssql.js index 9fca976a40..0914ac443e 100644 --- a/packages/core/src/tracing/instrumentation/databases/mssql.js +++ b/packages/core/src/tracing/instrumentation/databases/mssql.js @@ -161,7 +161,9 @@ function shimBeginTransaction(originalFunction) { function finishSpan(error, span) { if (error) { span.ec = 1; - span.data.mssql.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'mssql'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/mysql.js b/packages/core/src/tracing/instrumentation/databases/mysql.js index afee7877bc..ece71fd761 100644 --- a/packages/core/src/tracing/instrumentation/databases/mysql.js +++ b/packages/core/src/tracing/instrumentation/databases/mysql.js @@ -190,7 +190,9 @@ function instrumentedAccessFunction( }) .catch(error => { span.ec = 1; - span.data.mysql.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'mysql'; + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.transmit(); @@ -205,7 +207,9 @@ function instrumentedAccessFunction( function onResult(error) { if (error) { span.ec = 1; - span.data.mysql.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'mysql'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/pg.js b/packages/core/src/tracing/instrumentation/databases/pg.js index d0979c58da..aafe497dfb 100644 --- a/packages/core/src/tracing/instrumentation/databases/pg.js +++ b/packages/core/src/tracing/instrumentation/databases/pg.js @@ -103,7 +103,9 @@ function instrumentedQuery(ctx, originalQuery, argsForOriginalQuery) { function finishSpan(error, span) { if (error) { span.ec = 1; - span.data.pg.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'pg'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/pgNative.js b/packages/core/src/tracing/instrumentation/databases/pgNative.js index ec75bde81e..e55a474348 100644 --- a/packages/core/src/tracing/instrumentation/databases/pgNative.js +++ b/packages/core/src/tracing/instrumentation/databases/pgNative.js @@ -197,7 +197,9 @@ function startSpanBeforeSync(ctx, originalFn, originalArgs, statement, stackTrac function finishSpan(error, span) { if (error) { span.ec = 1; - span.data.pg.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'pg'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/prisma.js b/packages/core/src/tracing/instrumentation/databases/prisma.js index 781ba7f30d..0aa81f195b 100644 --- a/packages/core/src/tracing/instrumentation/databases/prisma.js +++ b/packages/core/src/tracing/instrumentation/databases/prisma.js @@ -221,7 +221,9 @@ function redactPasswordFromMsSQLUrl(url) { function finishSpan(error, span) { if (error) { span.ec = 1; - span.data.prisma.error = getErrorDetails(error); + const errorValue = getErrorDetails(error); + const key = 'prisma'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/redis.js b/packages/core/src/tracing/instrumentation/databases/redis.js index ddacf5ad57..3bac76fe90 100644 --- a/packages/core/src/tracing/instrumentation/databases/redis.js +++ b/packages/core/src/tracing/instrumentation/databases/redis.js @@ -365,7 +365,9 @@ function instrumentCommand(original, command, address, cbStyle) { if (error) { span.ec = 1; - span.data.redis.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'redis'; + span.data[key].error = errorValue; } span.transmit(); @@ -502,18 +504,23 @@ function instrumentMultiExec(origCtx, origArgs, original, address, isAtomic, cbS if (err) { span.ec = 1; + const key = 'redis'; + let errorValue; + if (err.message) { - span.data.redis.error = err.message; + errorValue = err.message; } else if (Array.isArray(err) && err.length) { - span.data.redis.error = err[0].message; + errorValue = err[0].message; } else { - span.data.redis.error = 'Unknown error'; + errorValue = 'Unknown error'; } // v3 = provides sub errors if (err.errors && err.errors.length) { - span.data.redis.error = err.errors.map(subErr => subErr.message).join('\n'); + errorValue = err.errors.map(subErr => subErr.message).join('\n'); } + + span.data[key].error = errorValue; } span.transmit(); @@ -533,7 +540,9 @@ function buildSubCommandCallback(span, userProvidedCallback) { span.ec++; if (!span.data.redis.error) { - span.data.redis.error = tracingUtil.getErrorDetails(err); + const errorValue = tracingUtil.getErrorDetails(err); + const key = 'redis'; + span.data[key].error = errorValue; } } From 85932d4bed68cf9aadf2021840bbf3009c213cfd Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:06:51 +0530 Subject: [PATCH 6/9] chore: refactored cloud aws --- .../src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js | 4 +++- .../instrumentation/cloud/aws-sdk/v3/sqs-consumer.js | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js index 0590f65c54..143fe7dafd 100644 --- a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js +++ b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js @@ -392,7 +392,9 @@ function finishSpan(err, data, span) { function addErrorToSpan(err, span) { if (err) { span.ec = 1; - span.data.sqs.error = err.message || err.code || JSON.stringify(err); + const errorValue = err.message || err.code || JSON.stringify(err); + const key = 'sqs'; + span.data[key].error = errorValue; } } diff --git a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js index 28c3ce826d..7a69829dbc 100644 --- a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js +++ b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js @@ -30,7 +30,9 @@ function instrument(SQSConsumer) { }) .catch(err => { span.ec = 1; - span.data.sqs.error = err.message || err.code || JSON.stringify(err); + const errorValue = err.message || err.code || JSON.stringify(err); + const key = 'sqs'; + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.transmitManual(); }); @@ -62,7 +64,9 @@ function instrument(SQSConsumer) { }) .catch(err => { span.ec = 1; - span.data.sqs.error = err.message || err.code || JSON.stringify(err); + const errorValue = err.message || err.code || JSON.stringify(err); + const key = 'sqs'; + span.data[key].error = errorValue; span.d = Date.now() - span.ts; span.transmitManual(); }); From 202193725de49d96c1d47715cca6cdeee252265b Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:07:09 +0530 Subject: [PATCH 7/9] chore: refactored cloud azure --- packages/core/src/tracing/instrumentation/cloud/azure/blob.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/src/tracing/instrumentation/cloud/azure/blob.js b/packages/core/src/tracing/instrumentation/cloud/azure/blob.js index 2ecd9f97ab..55d8881035 100644 --- a/packages/core/src/tracing/instrumentation/cloud/azure/blob.js +++ b/packages/core/src/tracing/instrumentation/cloud/azure/blob.js @@ -105,7 +105,9 @@ function instrumentingOperation({ function finishSpan(error, span) { if (error) { span.ec = 1; - span.data.azstorage.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'azstorage'; + span.data[key].error = errorValue; } span.d = Date.now() - span.ts; span.transmit(); From f17e25013c0418a8f161563dc0d50d9d7a1f1715 Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:07:18 +0530 Subject: [PATCH 8/9] chore: refactored cloud gcp --- .../core/src/tracing/instrumentation/cloud/gcp/pubsub.js | 8 ++++++-- .../core/src/tracing/instrumentation/cloud/gcp/storage.js | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js b/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js index 1e4a4f030f..255a19013a 100644 --- a/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js +++ b/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js @@ -255,9 +255,13 @@ function addErrorToSpan(err, span) { if (err) { span.ec = 1; if (err.message) { - span.data.gcps.error = err.message; + const errorValue = err.message; + const key = 'gcps'; + span.data[key].error = errorValue; } else if (typeof err === 'string') { - span.data.gcps.error = err; + const errorValue = err; + const key = 'gcps'; + span.data[key].error = errorValue; } } } diff --git a/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js b/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js index 733f15b2c5..3ca2d01b3f 100644 --- a/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js +++ b/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js @@ -458,7 +458,9 @@ function instrumentedCreateStream(operation, bindEvent, finalEvent, ctx, origina function finishSpan(error, result, span, extractorPost) { if (error) { span.ec = 1; - span.data.gcs.error = tracingUtil.getErrorDetails(error); + const errorValue = tracingUtil.getErrorDetails(error); + const key = 'gcs'; + span.data[key].error = errorValue; } if (extractorPost) { From 0c39804688b768c45f49b3f7e13dc50a4edd99f2 Mon Sep 17 00:00:00 2001 From: Abhilash Date: Tue, 25 Nov 2025 13:34:59 +0530 Subject: [PATCH 9/9] chore: cleanup --- .../instrumentation/cloud/aws-sdk/v2/sqs.js | 7 +- .../cloud/aws-sdk/v3/sqs-consumer.js | 12 +-- .../instrumentation/cloud/azure/blob.js | 7 +- .../instrumentation/cloud/gcp/pubsub.js | 12 +-- .../instrumentation/cloud/gcp/storage.js | 6 +- .../instrumentation/databases/couchbase.js | 16 ++-- .../tracing/instrumentation/databases/db2.js | 78 ++++++++----------- .../databases/elasticsearch.js | 6 +- .../instrumentation/databases/ioredis.js | 21 +++-- .../instrumentation/databases/mongodb.js | 12 +-- .../instrumentation/databases/mssql.js | 7 +- .../instrumentation/databases/mysql.js | 12 +-- .../tracing/instrumentation/databases/pg.js | 6 +- .../instrumentation/databases/pgNative.js | 7 +- .../instrumentation/databases/prisma.js | 6 +- .../instrumentation/databases/redis.js | 25 +++--- .../instrumentation/frameworks/express.js | 7 +- .../tracing/instrumentation/messaging/bull.js | 12 +-- .../instrumentation/messaging/kafkaJs.js | 11 ++- .../instrumentation/messaging/kafkaNode.js | 6 +- .../tracing/instrumentation/messaging/nats.js | 11 ++- .../messaging/natsStreaming.js | 11 ++- .../instrumentation/messaging/rdkafka.js | 16 ++-- .../instrumentation/protocols/grpcJs.js | 21 +++-- .../instrumentation/protocols/nativeFetch.js | 6 +- 25 files changed, 160 insertions(+), 181 deletions(-) diff --git a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js index 143fe7dafd..fc457ce284 100644 --- a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js +++ b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v2/sqs.js @@ -37,6 +37,8 @@ let logger; let isActive = false; +const technology = 'sqs'; + exports.init = function init(config) { logger = config.logger; @@ -392,9 +394,8 @@ function finishSpan(err, data, span) { function addErrorToSpan(err, span) { if (err) { span.ec = 1; - const errorValue = err.message || err.code || JSON.stringify(err); - const key = 'sqs'; - span.data[key].error = errorValue; + const errorDetails = err.message || err.code || JSON.stringify(err); + span.data[technology].error = errorDetails; } } diff --git a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js index 7a69829dbc..3021f125c1 100644 --- a/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js +++ b/packages/core/src/tracing/instrumentation/cloud/aws-sdk/v3/sqs-consumer.js @@ -8,6 +8,8 @@ const shimmer = require('../../../../shimmer'); const hook = require('../../../../../util/hook'); const cls = require('../../../../cls'); +const technology = 'sqs'; + function init() { hook.onModuleLoad('sqs-consumer', instrument); } @@ -30,9 +32,8 @@ function instrument(SQSConsumer) { }) .catch(err => { span.ec = 1; - const errorValue = err.message || err.code || JSON.stringify(err); - const key = 'sqs'; - span.data[key].error = errorValue; + const errorDetails = err.message || err.code || JSON.stringify(err); + span.data[technology].error = errorDetails; span.d = Date.now() - span.ts; span.transmitManual(); }); @@ -64,9 +65,8 @@ function instrument(SQSConsumer) { }) .catch(err => { span.ec = 1; - const errorValue = err.message || err.code || JSON.stringify(err); - const key = 'sqs'; - span.data[key].error = errorValue; + const errorDetails = err.message || err.code || JSON.stringify(err); + span.data[technology].error = errorDetails; span.d = Date.now() - span.ts; span.transmitManual(); }); diff --git a/packages/core/src/tracing/instrumentation/cloud/azure/blob.js b/packages/core/src/tracing/instrumentation/cloud/azure/blob.js index 55d8881035..ec1a3980a0 100644 --- a/packages/core/src/tracing/instrumentation/cloud/azure/blob.js +++ b/packages/core/src/tracing/instrumentation/cloud/azure/blob.js @@ -15,6 +15,8 @@ let isActive = false; exports.spanName = 'azstorage'; +const technology = exports.spanName; + exports.init = function init() { // Starting from v12.28.0, the package has been migrated to ESM. // To support ESM-based applications, we now utilize the IITM hook. @@ -105,9 +107,8 @@ function instrumentingOperation({ function finishSpan(error, span) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'azstorage'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; span.transmit(); diff --git a/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js b/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js index 255a19013a..9f7d569217 100644 --- a/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js +++ b/packages/core/src/tracing/instrumentation/cloud/gcp/pubsub.js @@ -22,6 +22,8 @@ const subscriptionRegex = /^projects\/([^/]+)\/subscriptions\/(.+)$/; let logger; let isActive = false; +const technology = 'gcps'; + exports.init = function init(config) { logger = config.logger; @@ -255,13 +257,11 @@ function addErrorToSpan(err, span) { if (err) { span.ec = 1; if (err.message) { - const errorValue = err.message; - const key = 'gcps'; - span.data[key].error = errorValue; + const errorDetails = err.message; + span.data[technology].error = errorDetails; } else if (typeof err === 'string') { - const errorValue = err; - const key = 'gcps'; - span.data[key].error = errorValue; + const errorDetails = err; + span.data[technology].error = errorDetails; } } } diff --git a/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js b/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js index 3ca2d01b3f..633148f03d 100644 --- a/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js +++ b/packages/core/src/tracing/instrumentation/cloud/gcp/storage.js @@ -14,6 +14,7 @@ const hook = require('../../../../util/hook'); const tracingUtil = require('../../../tracingUtil'); let isActive = false; +const technology = 'gcs'; exports.init = function init() { hook.onModuleLoad('@google-cloud/storage', instrument); @@ -458,9 +459,8 @@ function instrumentedCreateStream(operation, bindEvent, finalEvent, ctx, origina function finishSpan(error, result, span, extractorPost) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'gcs'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } if (extractorPost) { diff --git a/packages/core/src/tracing/instrumentation/databases/couchbase.js b/packages/core/src/tracing/instrumentation/databases/couchbase.js index 1a54555dd1..78eaade4c8 100644 --- a/packages/core/src/tracing/instrumentation/databases/couchbase.js +++ b/packages/core/src/tracing/instrumentation/databases/couchbase.js @@ -14,6 +14,7 @@ let isActive = false; const bucketLookup = {}; exports.spanName = 'couchbase'; +const technology = exports.spanName; exports.activate = function activate() { isActive = true; @@ -430,9 +431,8 @@ function instrumentTransactions(cluster, connectionStr) { result .catch(err => { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'couchbase'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; }) .finally(() => { span.d = Date.now() - span.ts; @@ -499,9 +499,8 @@ function instrumentOperation({ connectionStr, bucketName, getBucketTypeFn, sql, }) .catch(err => { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'couchbase'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; }) .finally(() => { span.d = Date.now() - span.ts; @@ -514,9 +513,8 @@ function instrumentOperation({ connectionStr, bucketName, getBucketTypeFn, sql, originalArgs[callbackIndex] = cls.ns.bind(function instanaCallback(err, result) { if (err) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'couchbase'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; } if (resultHandler) { diff --git a/packages/core/src/tracing/instrumentation/databases/db2.js b/packages/core/src/tracing/instrumentation/databases/db2.js index 2d625a7c37..706c3c81a4 100644 --- a/packages/core/src/tracing/instrumentation/databases/db2.js +++ b/packages/core/src/tracing/instrumentation/databases/db2.js @@ -13,6 +13,8 @@ const cls = require('../../cls'); let isActive = false; +const technology = 'db2'; + const CLOSE_TIMEOUT_IN_MS = process.env.DB2_CLOSE_TIMEOUT_IN_MS || 1000 * 30; exports.spanName = 'ibmdb2'; @@ -222,9 +224,8 @@ function captureFetchError(result, span) { argsFetch[fetchIndex] = function instanaFetchCb(fetchCbErr) { if (fetchCbErr) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(fetchCbErr); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(fetchCbErr); + span.data[technology].error = errorDetails; } return fetchCb.apply(this, arguments); @@ -234,9 +235,9 @@ function captureFetchError(result, span) { return originalFn.apply(this, arguments); } catch (caughtErr) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(caughtErr); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(caughtErr); + + span.data[technology].error = errorDetails; throw caughtErr; } }; @@ -253,16 +254,14 @@ function captureFetchError(result, span) { if (res instanceof Error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(res); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(res); + span.data[technology].error = errorDetails; } return res; } catch (err) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; return err; } @@ -286,18 +285,16 @@ function instrumentQueryHelper(ctx, originalArgs, originalFunction, stmt, isAsyn if (result instanceof Error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(result); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(result); + span.data[technology].error = errorDetails; } finishSpan(ctx, result, span); return result; } catch (e) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(e); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(e); + span.data[technology].error = errorDetails; finishSpan(ctx, null, span); throw e; } @@ -316,9 +313,8 @@ function instrumentQueryHelper(ctx, originalArgs, originalFunction, stmt, isAsyn originalArgs[customerCallbackIndex] = function instanaCallback(err) { if (err) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; } finishSpan(ctx, null, span); @@ -338,9 +334,8 @@ function instrumentQueryHelper(ctx, originalArgs, originalFunction, stmt, isAsyn }) .catch(err => { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; finishSpan(ctx, null, span); return err; }); @@ -410,9 +405,8 @@ function instrumentExecuteHelper(ctx, originalArgs, stmtObject, prepareCallParen return result; } catch (err) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; finishSpan(ctx, null, span); return err; } @@ -459,9 +453,8 @@ function instrumentExecuteHelper(ctx, originalArgs, stmtObject, prepareCallParen args[origCallbackIndex] = function instanaExecuteCallback(executeErr, result) { if (executeErr) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(executeErr); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(executeErr); + span.data[technology].error = errorDetails; finishSpan(ctx, null, span); return origCallback.apply(this, arguments); } @@ -490,9 +483,8 @@ function instrumentQueryResultHelper(ctx, originalArgs, originalFunction, stmt, return result; } catch (err) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; finishSpan(ctx, null, span); return err; } @@ -511,9 +503,8 @@ function instrumentQueryResultHelper(ctx, originalArgs, originalFunction, stmt, originalArgs[customerCallbackIndex] = function instanaCallback(err) { if (err) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; } const result = customerCallback.apply(this, arguments); @@ -574,9 +565,8 @@ function finishSpan(ctx, result, span) { if (!closeSyncCalled) { closeSyncCalled = true; span.ec = 1; - const errorValue = `'result.closeSync' was not called within ${CLOSE_TIMEOUT_IN_MS}ms.`; - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = `'result.closeSync' was not called within ${CLOSE_TIMEOUT_IN_MS}ms.`; + span.data[technology].error = errorDetails; span.d = Date.now() - span.ts; span.transmit(); } @@ -604,9 +594,8 @@ function handleTransaction(ctx, span) { arguments[1] = function instanaOnEndOverride(onEndErr) { if (onEndErr) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(onEndErr) || 'Error not available.'; - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(onEndErr) || 'Error not available.'; + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; @@ -625,9 +614,8 @@ function handleTransaction(ctx, span) { return result; } catch (err) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err) || 'Error not available.'; - const key = 'db2'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err) || 'Error not available.'; + span.data[technology].error = errorDetails; span.transmit(); throw err; } diff --git a/packages/core/src/tracing/instrumentation/databases/elasticsearch.js b/packages/core/src/tracing/instrumentation/databases/elasticsearch.js index f7f17356b1..739dd6f12c 100644 --- a/packages/core/src/tracing/instrumentation/databases/elasticsearch.js +++ b/packages/core/src/tracing/instrumentation/databases/elasticsearch.js @@ -20,6 +20,7 @@ let isActive = false; exports.spanName = 'elasticsearch'; exports.batchable = true; +const technology = exports.spanName; exports.init = function init(config) { logger = config.logger; @@ -200,9 +201,8 @@ function onError(span, error) { span.d = Date.now() - span.ts; span.ec = 1; if (error) { - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'elasticsearch'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } if (error.meta && error.meta.meta) { getConnectionDetailsFromResultMeta(span, error.meta); diff --git a/packages/core/src/tracing/instrumentation/databases/ioredis.js b/packages/core/src/tracing/instrumentation/databases/ioredis.js index 1f83665632..6080e15cba 100644 --- a/packages/core/src/tracing/instrumentation/databases/ioredis.js +++ b/packages/core/src/tracing/instrumentation/databases/ioredis.js @@ -16,6 +16,7 @@ let isActive = false; exports.spanName = 'redis'; exports.batchable = true; +const technology = exports.spanName; exports.activate = function activate() { isActive = true; @@ -115,9 +116,8 @@ function instrumentSendCommand(original) { if (error) { span.ec = 1; - const errorValue = error.message; - const key = 'redis'; - span.data[key].error = errorValue; + const errorDetails = error.message; + span.data[technology].error = errorDetails; } span.transmit(); @@ -223,9 +223,8 @@ function multiCommandEndCallback(clsContextForMultiOrPipeline, span, error) { if (error) { span.ec = commandCount; - const errorValue = error.message; - const key = 'redis'; - span.data[key].error = errorValue; + const errorDetails = error.message; + span.data[technology].error = errorDetails; } span.transmit(); @@ -245,9 +244,8 @@ function pipelineCommandEndCallback(clsContextForMultiOrPipeline, span, error, r if (error) { // ioredis docs mention that this should never be possible, but better be safe than sorry span.ec = commandCount; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'redis'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } else { let numberOfErrors = 0; let sampledError; @@ -263,9 +261,8 @@ function pipelineCommandEndCallback(clsContextForMultiOrPipeline, span, error, r if (numberOfErrors > 0) { span.ec = numberOfErrors; - const errorValue = tracingUtil.getErrorDetails(sampledError); - const key = 'redis'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(sampledError); + span.data[technology].error = errorDetails; } } diff --git a/packages/core/src/tracing/instrumentation/databases/mongodb.js b/packages/core/src/tracing/instrumentation/databases/mongodb.js index cc34b99000..1c72ea9b2e 100644 --- a/packages/core/src/tracing/instrumentation/databases/mongodb.js +++ b/packages/core/src/tracing/instrumentation/databases/mongodb.js @@ -32,6 +32,8 @@ const commands = [ exports.spanName = 'mongo'; exports.batchable = true; +const technology = exports.spanName; + exports.init = function init() { // unified topology layer hook.onFileLoad(/\/mongodb\/lib\/cmap\/connection\.js/, instrumentCmapConnection); @@ -438,9 +440,8 @@ function createWrappedCallback(span, originalCallback) { return cls.ns.bind(function (error) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'mongo'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; @@ -468,9 +469,8 @@ function handleCallbackOrPromise(ctx, originalArgs, originalFunction, span) { }) .catch(err => { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'mongo'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; span.d = Date.now() - span.ts; span.transmit(); return err; diff --git a/packages/core/src/tracing/instrumentation/databases/mssql.js b/packages/core/src/tracing/instrumentation/databases/mssql.js index 0914ac443e..678ec15b10 100644 --- a/packages/core/src/tracing/instrumentation/databases/mssql.js +++ b/packages/core/src/tracing/instrumentation/databases/mssql.js @@ -16,6 +16,8 @@ let isActive = false; exports.spanName = 'mssql'; exports.batchable = true; +const technology = exports.spanName; + exports.init = function init() { hook.onModuleLoad('mssql', instrumentMssql); }; @@ -161,9 +163,8 @@ function shimBeginTransaction(originalFunction) { function finishSpan(error, span) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'mssql'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/mysql.js b/packages/core/src/tracing/instrumentation/databases/mysql.js index ece71fd761..204787c96f 100644 --- a/packages/core/src/tracing/instrumentation/databases/mysql.js +++ b/packages/core/src/tracing/instrumentation/databases/mysql.js @@ -17,6 +17,8 @@ let isActive = false; exports.spanName = 'mysql'; exports.batchable = true; +const technology = exports.spanName; + exports.init = function init() { hook.onModuleLoad('mysql', instrumentMysql); hook.onModuleLoad('mysql2', instrumentMysql2); @@ -190,9 +192,8 @@ function instrumentedAccessFunction( }) .catch(error => { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'mysql'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; span.d = Date.now() - span.ts; span.transmit(); @@ -207,9 +208,8 @@ function instrumentedAccessFunction( function onResult(error) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'mysql'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/pg.js b/packages/core/src/tracing/instrumentation/databases/pg.js index aafe497dfb..17372d08ba 100644 --- a/packages/core/src/tracing/instrumentation/databases/pg.js +++ b/packages/core/src/tracing/instrumentation/databases/pg.js @@ -16,6 +16,7 @@ let isActive = false; exports.spanName = 'postgres'; exports.batchable = true; +const technology = 'pg'; exports.init = function init() { hook.onModuleLoad('pg', instrumentPg); @@ -103,9 +104,8 @@ function instrumentedQuery(ctx, originalQuery, argsForOriginalQuery) { function finishSpan(error, span) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'pg'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/pgNative.js b/packages/core/src/tracing/instrumentation/databases/pgNative.js index e55a474348..761e304d7f 100644 --- a/packages/core/src/tracing/instrumentation/databases/pgNative.js +++ b/packages/core/src/tracing/instrumentation/databases/pgNative.js @@ -27,6 +27,8 @@ const connectionUriRegex = exports.spanName = 'postgres'; exports.batchable = true; +const technology = 'pg'; + exports.init = function init() { hook.onModuleLoad('pg-native', instrumentPgNative); }; @@ -197,9 +199,8 @@ function startSpanBeforeSync(ctx, originalFn, originalArgs, statement, stackTrac function finishSpan(error, span) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'pg'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/prisma.js b/packages/core/src/tracing/instrumentation/databases/prisma.js index 0aa81f195b..169d6f52d4 100644 --- a/packages/core/src/tracing/instrumentation/databases/prisma.js +++ b/packages/core/src/tracing/instrumentation/databases/prisma.js @@ -14,6 +14,7 @@ let logger; let isActive = false; const providerAndDataSourceUriMap = new WeakMap(); +const technology = 'prisma'; exports.init = function init(config) { logger = config.logger; @@ -221,9 +222,8 @@ function redactPasswordFromMsSQLUrl(url) { function finishSpan(error, span) { if (error) { span.ec = 1; - const errorValue = getErrorDetails(error); - const key = 'prisma'; - span.data[key].error = errorValue; + const errorDetails = getErrorDetails(error); + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/databases/redis.js b/packages/core/src/tracing/instrumentation/databases/redis.js index 3bac76fe90..a3af24690b 100644 --- a/packages/core/src/tracing/instrumentation/databases/redis.js +++ b/packages/core/src/tracing/instrumentation/databases/redis.js @@ -17,6 +17,8 @@ let isActive = false; exports.spanName = 'redis'; exports.batchable = true; +const technology = exports.spanName; + let isRedisClientInstrumented = false; exports.activate = function activate() { @@ -365,9 +367,8 @@ function instrumentCommand(original, command, address, cbStyle) { if (error) { span.ec = 1; - const errorValue = tracingUtil.getErrorDetails(error); - const key = 'redis'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(error); + span.data[technology].error = errorDetails; } span.transmit(); @@ -504,23 +505,22 @@ function instrumentMultiExec(origCtx, origArgs, original, address, isAtomic, cbS if (err) { span.ec = 1; - const key = 'redis'; - let errorValue; + let errorDetails; if (err.message) { - errorValue = err.message; + errorDetails = err.message; } else if (Array.isArray(err) && err.length) { - errorValue = err[0].message; + errorDetails = err[0].message; } else { - errorValue = 'Unknown error'; + errorDetails = 'Unknown error'; } // v3 = provides sub errors if (err.errors && err.errors.length) { - errorValue = err.errors.map(subErr => subErr.message).join('\n'); + errorDetails = err.errors.map(subErr => subErr.message).join('\n'); } - span.data[key].error = errorValue; + span.data[technology].error = errorDetails; } span.transmit(); @@ -540,9 +540,8 @@ function buildSubCommandCallback(span, userProvidedCallback) { span.ec++; if (!span.data.redis.error) { - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'redis'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; } } diff --git a/packages/core/src/tracing/instrumentation/frameworks/express.js b/packages/core/src/tracing/instrumentation/frameworks/express.js index aaefdaa8b6..c87f044dff 100644 --- a/packages/core/src/tracing/instrumentation/frameworks/express.js +++ b/packages/core/src/tracing/instrumentation/frameworks/express.js @@ -15,6 +15,8 @@ const cls = require('../../cls'); let active = false; +const technology = 'http'; + exports.activate = function activate() { active = true; }; @@ -116,9 +118,8 @@ function annotateHttpEntrySpanWithError(err) { return; } - const errorValue = tracingUtil.getErrorDetails(err); - const key = 'http'; - span.data[key].error = errorValue; + const errorDetails = tracingUtil.getErrorDetails(err); + span.data[technology].error = errorDetails; } function shimHandlerRegistration(original) { diff --git a/packages/core/src/tracing/instrumentation/messaging/bull.js b/packages/core/src/tracing/instrumentation/messaging/bull.js index fc9c4de46e..51fdfc314d 100644 --- a/packages/core/src/tracing/instrumentation/messaging/bull.js +++ b/packages/core/src/tracing/instrumentation/messaging/bull.js @@ -17,6 +17,8 @@ let isActive = false; exports.spanName = 'bull'; +const technology = exports.spanName; + exports.init = function init(config) { logger = config.logger; hook.onModuleLoad('bull', instrumentBull); @@ -326,13 +328,11 @@ function addErrorToSpan(err, span) { if (err) { span.ec = 1; if (err.code) { - const errorValue = err.code; - const key = 'bull'; - span.data[key].error = errorValue; + const errorDetails = err.code; + span.data[technology].error = errorDetails; } else if (typeof err === 'string') { - const errorValue = err; - const key = 'bull'; - span.data[key].error = errorValue; + const errorDetails = err; + span.data[technology].error = errorDetails; } } } diff --git a/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js b/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js index c3c1c88276..701f0f264d 100644 --- a/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js +++ b/packages/core/src/tracing/instrumentation/messaging/kafkaJs.js @@ -15,6 +15,7 @@ const cls = require('../../cls'); let traceCorrelationEnabled = constants.kafkaTraceCorrelationDefault; let logger; let isActive = false; +const technology = 'kafka'; exports.init = function init(config) { logger = config.logger; @@ -105,9 +106,8 @@ function instrumentedSend(ctx, originalSend, originalArgs, topic, messages) { }) .catch(error => { span.ec = 1; - const errorValue = error.message; - const key = 'kafka'; - span.data[key].error = errorValue; + const errorDetails = error.message; + span.data[technology].error = errorDetails; span.d = Date.now() - span.ts; span.transmit(); throw error; @@ -186,9 +186,8 @@ function instrumentedSendBatch(ctx, originalSendBatch, originalArgs, topicMessag }) .catch(error => { span.ec = 1; - const errorValue = error.message; - const key = 'kafka'; - span.data[key].error = errorValue; + const errorDetails = error.message; + span.data[technology].error = errorDetails; span.d = Date.now() - span.ts; span.transmit(); throw error; diff --git a/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js b/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js index 080b87a436..069da90688 100644 --- a/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js +++ b/packages/core/src/tracing/instrumentation/messaging/kafkaNode.js @@ -14,6 +14,7 @@ const cls = require('../../cls'); let logger; let isActive = false; +const technology = 'kafka'; // FYI: officially deprecated. No release since 4 years. But still very // high usage on npm trends. We will drop it in any upcoming major release. @@ -81,9 +82,8 @@ function instrumentedSend(ctx, originalSend, produceRequests, cb) { cls.ns.bind(function onSendCompleted(err) { if (err) { span.ec = 1; - const errorValue = err.message; - const key = 'kafka'; - span.data[key].error = errorValue; + const errorDetails = err.message; + span.data[technology].error = errorDetails; } span.d = Date.now() - span.ts; diff --git a/packages/core/src/tracing/instrumentation/messaging/nats.js b/packages/core/src/tracing/instrumentation/messaging/nats.js index dbd997fd67..de54402b96 100644 --- a/packages/core/src/tracing/instrumentation/messaging/nats.js +++ b/packages/core/src/tracing/instrumentation/messaging/nats.js @@ -15,6 +15,7 @@ const cls = require('../../cls'); let isActive = false; let clientHasBeenInstrumentedV1 = false; let clientHasBeenInstrumentedV2 = false; +const technology = 'nats'; exports.init = function init() { hook.onModuleLoad('nats', instrumentNats); @@ -404,13 +405,11 @@ function addErrorToSpan(err, span) { errMsg = err; } if (errMsg && span.data.nats.error) { - const errorValue = `${span.data.nats.error}, ${errMsg}`; - const key = 'nats'; - span.data[key].error = errorValue; + const errorDetails = `${span.data.nats.error}, ${errMsg}`; + span.data[technology].error = errorDetails; } else if (errMsg) { - const errorValue = errMsg; - const key = 'nats'; - span.data[key].error = errorValue; + const errorDetails = errMsg; + span.data[technology].error = errorDetails; } } } diff --git a/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js b/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js index cdd2c5864b..ad0aa97b1d 100644 --- a/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js +++ b/packages/core/src/tracing/instrumentation/messaging/natsStreaming.js @@ -17,6 +17,7 @@ const cls = require('../../cls'); let isActive = false; let clientHasBeenInstrumented = false; let logger; +const technology = 'nats'; exports.init = function init(config) { logger = config.logger; @@ -201,13 +202,11 @@ function addErrorToSpan(err, span) { errMsg = err; } if (errMsg && span.data.nats.error) { - const errorValue = `${span.data.nats.error}, ${errMsg}`; - const key = 'nats'; - span.data[key].error = errorValue; + const errorDetails = `${span.data.nats.error}, ${errMsg}`; + span.data[technology].error = errorDetails; } else if (errMsg) { - const errorValue = errMsg; - const key = 'nats'; - span.data[key].error = errorValue; + const errorDetails = errMsg; + span.data[technology].error = errorDetails; } } } diff --git a/packages/core/src/tracing/instrumentation/messaging/rdkafka.js b/packages/core/src/tracing/instrumentation/messaging/rdkafka.js index b7447da795..12d53d281d 100644 --- a/packages/core/src/tracing/instrumentation/messaging/rdkafka.js +++ b/packages/core/src/tracing/instrumentation/messaging/rdkafka.js @@ -16,6 +16,7 @@ let traceCorrelationEnabled = constants.kafkaTraceCorrelationDefault; let logger; let isActive = false; +const technology = 'kafka'; exports.init = function init(config) { logger = config.logger; @@ -167,9 +168,8 @@ function instrumentedProduce(ctx, originalProduce, originalArgs) { if (err) { span.ec = 1; - const errorValue = err.message; - const key = 'kafka'; - span.data[key].error = errorValue; + const errorDetails = err.message; + span.data[technology].error = errorDetails; } span.transmit(); @@ -189,9 +189,8 @@ function instrumentedProduce(ctx, originalProduce, originalArgs) { // e.g. cannot send message because format is byte // "Message must be a buffer or null" span.ec = 1; - const errorValue = error.message; - const key = 'kafka'; - span.data[key].error = errorValue; + const errorDetails = error.message; + span.data[technology].error = errorDetails; if (!deliveryCb) { span.d = Date.now() - span.ts; @@ -309,9 +308,8 @@ function instrumentedConsumerEmit(ctx, originalEmit, originalArgs) { delete messageData.headers; span.ec = 1; - const errorValue = messageData.message; - const key = 'kafka'; - span.data[key].error = errorValue; + const errorDetails = messageData.message; + span.data[technology].error = errorDetails; } setImmediate(() => { diff --git a/packages/core/src/tracing/instrumentation/protocols/grpcJs.js b/packages/core/src/tracing/instrumentation/protocols/grpcJs.js index 7f9f3855b6..55c37ae59c 100644 --- a/packages/core/src/tracing/instrumentation/protocols/grpcJs.js +++ b/packages/core/src/tracing/instrumentation/protocols/grpcJs.js @@ -13,6 +13,7 @@ const cls = require('../../cls'); let logger; let Metadata; let isActive = false; +const technology = 'rpc'; const TYPES = { UNARY: 'unary', @@ -116,9 +117,8 @@ function modifyArgs(name, originalArgs, span) { } else { span.ec = 1; if (errorMessage) { - const errorValue = errorMessage; - const key = 'rpc'; - span.data[key].error = errorValue; + const errorDetails = errorMessage; + span.data[technology].error = errorDetails; } } } @@ -347,9 +347,8 @@ function createInstrumentedServerHandler(name, type, originalHandler) { if (err) { span.ec = 1; if (err.message || err.details) { - const errorValue = err.message || err.details; - const key = 'rpc'; - span.data[key].error = errorValue; + const errorDetails = err.message || err.details; + span.data[technology].error = errorDetails; } } span.d = Date.now() - span.ts; @@ -374,9 +373,8 @@ function createInstrumentedServerHandler(name, type, originalHandler) { call.on('error', err => { span.ec = 1; if (err.message || err.details) { - const errorValue = err.message || err.details; - const key = 'rpc'; - span.data[key].error = errorValue; + const errorDetails = err.message || err.details; + span.data[technology].error = errorDetails; } }); @@ -438,9 +436,8 @@ function instrumentedClientMethod( } else { span.ec = 1; if (errorMessage) { - const errorValue = errorMessage; - const key = 'rpc'; - span.data[key].error = errorValue; + const errorDetails = errorMessage; + span.data[technology].error = errorDetails; } } span.transmit(); diff --git a/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js b/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js index 7d63a8b964..06155b311f 100644 --- a/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js +++ b/packages/core/src/tracing/instrumentation/protocols/nativeFetch.js @@ -21,6 +21,7 @@ const originalFetch = global.fetch; let extraHttpHeadersToCapture; let isActive = false; +const technology = 'http'; // This determines whether we need to apply a workaround for a bug in Node.js fetch implementation (or rather, the // underlying dependency undici). @@ -184,9 +185,8 @@ function instrument() { }) .catch(err => { span.ec = 1; - const errorValue = err.message; - const key = 'http'; - span.data[key].error = errorValue; + const errorDetails = err.message; + span.data[technology].error = errorDetails; }) .finally(() => { span.d = Date.now() - span.ts;