diff --git a/packages/opentelemetry/CHANGELOG.md b/packages/opentelemetry/CHANGELOG.md index eeaa7f3f..a396aed1 100644 --- a/packages/opentelemetry/CHANGELOG.md +++ b/packages/opentelemetry/CHANGELOG.md @@ -2,7 +2,9 @@ ## [Unreleased] -No notable changes. +### Changed + +- Migrate away from [deprecated semantic attributes](https://github.com/open-telemetry/opentelemetry-js/pull/4690) ([#1018](https://github.com/cerbos/cerbos-sdk-javascript/pull/1018)) ## [0.5.3] - 2024-09-23 diff --git a/packages/opentelemetry/changelog.yaml b/packages/opentelemetry/changelog.yaml index 706a7f70..61962be6 100644 --- a/packages/opentelemetry/changelog.yaml +++ b/packages/opentelemetry/changelog.yaml @@ -1,3 +1,10 @@ +unreleased: + type: patch + + changed: + - summary: Migrate away from [deprecated semantic attributes](https://github.com/open-telemetry/opentelemetry-js/pull/4690) + pull: 1018 + releases: - version: 0.5.3 date: 2024-09-23 diff --git a/packages/opentelemetry/src/transport.ts b/packages/opentelemetry/src/transport.ts index 98ba76a2..7f037491 100644 --- a/packages/opentelemetry/src/transport.ts +++ b/packages/opentelemetry/src/transport.ts @@ -7,11 +7,11 @@ import { trace, } from "@opentelemetry/api"; import { - SEMATTRS_RPC_GRPC_STATUS_CODE, - SEMATTRS_RPC_METHOD, - SEMATTRS_RPC_SERVICE, - SEMATTRS_RPC_SYSTEM, -} from "@opentelemetry/semantic-conventions"; + ATTR_RPC_GRPC_STATUS_CODE, + ATTR_RPC_METHOD, + ATTR_RPC_SERVICE, + ATTR_RPC_SYSTEM, +} from "@opentelemetry/semantic-conventions/incubating"; import type { _AbortHandler, @@ -162,9 +162,9 @@ export class Transport implements _Transport { const status: SpanStatus = { code: SpanStatusCode.UNSET }; const attributes: Attributes = { - [SEMATTRS_RPC_SYSTEM]: "grpc", - [SEMATTRS_RPC_SERVICE]: serviceName, - [SEMATTRS_RPC_METHOD]: methodName, + [ATTR_RPC_SYSTEM]: "grpc", + [ATTR_RPC_SERVICE]: serviceName, + [ATTR_RPC_METHOD]: methodName, }; const span = this.tracer.startSpan(`${serviceName}/${methodName}`, { @@ -189,7 +189,7 @@ export class Transport implements _Transport { const call = { succeeded: (): void => { - attributes[SEMATTRS_RPC_GRPC_STATUS_CODE] = Status.OK; + attributes[ATTR_RPC_GRPC_STATUS_CODE] = Status.OK; finish(); }, failed: (error: unknown): void => { @@ -200,7 +200,7 @@ export class Transport implements _Transport { attributes["cerbos.error"] = error.message; if (error instanceof NotOK) { - attributes[SEMATTRS_RPC_GRPC_STATUS_CODE] = error.code; + attributes[ATTR_RPC_GRPC_STATUS_CODE] = error.code; } } diff --git a/private/test/src/matrix-cerbos/instrumentation.test.ts b/private/test/src/matrix-cerbos/instrumentation.test.ts index d3cc99b0..f5cac70b 100644 --- a/private/test/src/matrix-cerbos/instrumentation.test.ts +++ b/private/test/src/matrix-cerbos/instrumentation.test.ts @@ -12,11 +12,11 @@ import { } from "@opentelemetry/sdk-trace-base"; import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node"; import { - SEMATTRS_RPC_GRPC_STATUS_CODE, - SEMATTRS_RPC_METHOD, - SEMATTRS_RPC_SERVICE, - SEMATTRS_RPC_SYSTEM, -} from "@opentelemetry/semantic-conventions"; + ATTR_RPC_GRPC_STATUS_CODE, + ATTR_RPC_METHOD, + ATTR_RPC_SERVICE, + ATTR_RPC_SYSTEM, +} from "@opentelemetry/semantic-conventions/incubating"; import { UnsecuredJWT } from "jose"; import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -51,10 +51,10 @@ import { } from "../servers"; interface ExpectedAttributes extends Attributes { - [SEMATTRS_RPC_SYSTEM]: string; - [SEMATTRS_RPC_SERVICE]: string; - [SEMATTRS_RPC_METHOD]: string; - [SEMATTRS_RPC_GRPC_STATUS_CODE]: Status; + [ATTR_RPC_SYSTEM]: string; + [ATTR_RPC_SERVICE]: string; + [ATTR_RPC_METHOD]: string; + [ATTR_RPC_GRPC_STATUS_CODE]: Status; "cerbos.error"?: string; } @@ -149,10 +149,10 @@ describe("CerbosInstrumentation", () => { ); const attributes: ExpectedAttributes = { - [SEMATTRS_RPC_SYSTEM]: "grpc", - [SEMATTRS_RPC_SERVICE]: "cerbos.svc.v1.CerbosService", - [SEMATTRS_RPC_METHOD]: "CheckResources", - [SEMATTRS_RPC_GRPC_STATUS_CODE]: 0, + [ATTR_RPC_SYSTEM]: "grpc", + [ATTR_RPC_SERVICE]: "cerbos.svc.v1.CerbosService", + [ATTR_RPC_METHOD]: "CheckResources", + [ATTR_RPC_GRPC_STATUS_CODE]: 0, }; expect(result).toEqual({ value: false }); @@ -191,10 +191,10 @@ describe("CerbosInstrumentation", () => { ); const attributes: ExpectedAttributes = { - [SEMATTRS_RPC_SYSTEM]: "grpc", - [SEMATTRS_RPC_SERVICE]: "cerbos.svc.v1.CerbosService", - [SEMATTRS_RPC_METHOD]: "CheckResources", - [SEMATTRS_RPC_GRPC_STATUS_CODE]: Status.INVALID_ARGUMENT, + [ATTR_RPC_SYSTEM]: "grpc", + [ATTR_RPC_SERVICE]: "cerbos.svc.v1.CerbosService", + [ATTR_RPC_METHOD]: "CheckResources", + [ATTR_RPC_GRPC_STATUS_CODE]: Status.INVALID_ARGUMENT, "cerbos.error": invalidArgumentDetails, }; @@ -268,10 +268,10 @@ describe("CerbosInstrumentation", () => { }); const attributes: ExpectedAttributes = { - [SEMATTRS_RPC_SYSTEM]: "grpc", - [SEMATTRS_RPC_SERVICE]: "cerbos.svc.v1.CerbosAdminService", - [SEMATTRS_RPC_METHOD]: "ListAuditLogEntries", - [SEMATTRS_RPC_GRPC_STATUS_CODE]: 0, + [ATTR_RPC_SYSTEM]: "grpc", + [ATTR_RPC_SERVICE]: "cerbos.svc.v1.CerbosAdminService", + [ATTR_RPC_METHOD]: "ListAuditLogEntries", + [ATTR_RPC_GRPC_STATUS_CODE]: 0, }; expect(result).toEqual({ value: entry }); @@ -297,10 +297,10 @@ describe("CerbosInstrumentation", () => { ); const attributes: ExpectedAttributes = { - [SEMATTRS_RPC_SYSTEM]: "grpc", - [SEMATTRS_RPC_SERVICE]: "cerbos.svc.v1.CerbosAdminService", - [SEMATTRS_RPC_METHOD]: "ListAuditLogEntries", - [SEMATTRS_RPC_GRPC_STATUS_CODE]: Status.INVALID_ARGUMENT, + [ATTR_RPC_SYSTEM]: "grpc", + [ATTR_RPC_SERVICE]: "cerbos.svc.v1.CerbosAdminService", + [ATTR_RPC_METHOD]: "ListAuditLogEntries", + [ATTR_RPC_GRPC_STATUS_CODE]: Status.INVALID_ARGUMENT, "cerbos.error": invalidArgumentDetails, }; @@ -353,10 +353,10 @@ describe("CerbosInstrumentation", () => { ); const attributes = { - [SEMATTRS_RPC_SYSTEM]: "grpc", - [SEMATTRS_RPC_SERVICE]: "cerbos.svc.v1.CerbosAdminService", - [SEMATTRS_RPC_METHOD]: "ListAuditLogEntries", - [SEMATTRS_RPC_GRPC_STATUS_CODE]: Status.CANCELLED, + [ATTR_RPC_SYSTEM]: "grpc", + [ATTR_RPC_SERVICE]: "cerbos.svc.v1.CerbosAdminService", + [ATTR_RPC_METHOD]: "ListAuditLogEntries", + [ATTR_RPC_GRPC_STATUS_CODE]: Status.CANCELLED, "cerbos.error": expect.stringContaining("Aborted"), } satisfies Attributes; @@ -375,7 +375,7 @@ describe("CerbosInstrumentation", () => { await expectServerSpan(span, { ...attributes, - [SEMATTRS_RPC_GRPC_STATUS_CODE]: Status.OK, // Although the call is aborted after returning early from for-await on the client, it completes successfully on the server + [ATTR_RPC_GRPC_STATUS_CODE]: Status.OK, // Although the call is aborted after returning early from for-await on the client, it completes successfully on the server }); }); }); @@ -405,39 +405,39 @@ describe("CerbosInstrumentation", () => { kind: SpanKindProto.SPAN_KIND_SERVER, attributes: expect.arrayContaining([ { - key: SEMATTRS_RPC_SYSTEM, + key: ATTR_RPC_SYSTEM, value: { value: { $case: "stringValue", - stringValue: attributes[SEMATTRS_RPC_SYSTEM], + stringValue: attributes[ATTR_RPC_SYSTEM], }, }, }, { - key: SEMATTRS_RPC_SERVICE, + key: ATTR_RPC_SERVICE, value: { value: { $case: "stringValue", - stringValue: attributes[SEMATTRS_RPC_SERVICE], + stringValue: attributes[ATTR_RPC_SERVICE], }, }, }, { - key: SEMATTRS_RPC_METHOD, + key: ATTR_RPC_METHOD, value: { value: { $case: "stringValue", - stringValue: attributes[SEMATTRS_RPC_METHOD], + stringValue: attributes[ATTR_RPC_METHOD], }, }, }, { - key: SEMATTRS_RPC_GRPC_STATUS_CODE, + key: ATTR_RPC_GRPC_STATUS_CODE, value: { value: { $case: "intValue", intValue: - attributes[SEMATTRS_RPC_GRPC_STATUS_CODE].toString(), + attributes[ATTR_RPC_GRPC_STATUS_CODE].toString(), }, }, },