From 70dda66147a2b1ccc64cfa3f763f0dc2c610fb93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Th=C3=A9riault?= Date: Wed, 14 Feb 2024 16:05:58 -0800 Subject: [PATCH 1/2] don't send empty http.* attributes in metrics --- .yarn/versions/cfc065c7.yml | 3 +++ packages/sdk/src/metrics/serverless.ts | 16 +++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 .yarn/versions/cfc065c7.yml diff --git a/.yarn/versions/cfc065c7.yml b/.yarn/versions/cfc065c7.yml new file mode 100644 index 00000000..4d012b84 --- /dev/null +++ b/.yarn/versions/cfc065c7.yml @@ -0,0 +1,3 @@ +releases: + "@solarwinds-apm/sdk": patch + solarwinds-apm: patch diff --git a/packages/sdk/src/metrics/serverless.ts b/packages/sdk/src/metrics/serverless.ts index b118b5c5..b5821983 100644 --- a/packages/sdk/src/metrics/serverless.ts +++ b/packages/sdk/src/metrics/serverless.ts @@ -83,12 +83,18 @@ export function recordServerlessResponseTime( const time = hrTimeToMilliseconds(span.duration) - responseTime.record(time, { - [SemanticAttributes.HTTP_METHOD]: method, - [SemanticAttributes.HTTP_STATUS_CODE]: statusCode, - "sw.is_error": isError, + const attrs = { "sw.transaction": transaction ?? "unknown", - }) + "sw.is_error": isError, + } + if (method) { + attrs[SemanticAttributes.HTTP_METHOD] = method + } + if (statusCode) { + attrs[SemanticAttributes.HTTP_STATUS_CODE] = statusCode + } + + responseTime.record(time, attrs) } export const serverlessViews = [ From 23039344abdfabf65c957e1008ee88ecfda7ff4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Th=C3=A9riault?= Date: Wed, 14 Feb 2024 16:09:24 -0800 Subject: [PATCH 2/2] fix type error --- packages/sdk/src/metrics/serverless.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/sdk/src/metrics/serverless.ts b/packages/sdk/src/metrics/serverless.ts index b5821983..9b0772b4 100644 --- a/packages/sdk/src/metrics/serverless.ts +++ b/packages/sdk/src/metrics/serverless.ts @@ -14,7 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { metrics, SpanStatusCode, ValueType } from "@opentelemetry/api" +import { + type Attributes, + metrics, + SpanStatusCode, + ValueType, +} from "@opentelemetry/api" import { hrTimeToMilliseconds } from "@opentelemetry/core" import { Aggregation, View } from "@opentelemetry/sdk-metrics" import { type ReadableSpan } from "@opentelemetry/sdk-trace-base" @@ -83,7 +88,7 @@ export function recordServerlessResponseTime( const time = hrTimeToMilliseconds(span.duration) - const attrs = { + const attrs: Attributes = { "sw.transaction": transaction ?? "unknown", "sw.is_error": isError, }