From ef07a13961ec539bfdd66721722ef4e8c97b0308 Mon Sep 17 00:00:00 2001 From: Martin Sonnberger Date: Tue, 27 Oct 2026 15:53:26 +0100 Subject: [PATCH] refactor(nuxt): Use convention constants for attribute keys Co-Authored-By: GPT-6 --- .../src/runtime/hooks/wrapMiddlewareHandler.ts | 12 +++++++++--- .../src/runtime/utils/database-span-data.ts | 11 ++++++----- .../src/runtime/utils/instrumentDatabase.ts | 2 +- .../nuxt/src/runtime/utils/instrumentStorage.ts | 17 +++++++++++++---- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/packages/nuxt/src/runtime/hooks/wrapMiddlewareHandler.ts b/packages/nuxt/src/runtime/hooks/wrapMiddlewareHandler.ts index 270654bb9ff8..1786be5d69c1 100644 --- a/packages/nuxt/src/runtime/hooks/wrapMiddlewareHandler.ts +++ b/packages/nuxt/src/runtime/hooks/wrapMiddlewareHandler.ts @@ -1,4 +1,10 @@ -import { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_OP, SENTRY_ORIGIN } from '@sentry/conventions/attributes'; +import { + SENTRY_SEGMENT_NAME_SOURCE, + SENTRY_OP, + SENTRY_ORIGIN, + HTTP_REQUEST_METHOD, + HTTP_ROUTE, +} from '@sentry/conventions/attributes'; import { MIDDLEWARE } from '@sentry/conventions/op'; import { captureException, @@ -183,11 +189,11 @@ function getSpanAttributes( const path = event.path ?? eventH3v2?.url?.pathname; if (method) { - attributes['http.request.method'] = method; + attributes[HTTP_REQUEST_METHOD] = method; } if (path) { - attributes['http.route'] = path; + attributes[HTTP_ROUTE] = path; } // h3 v1 (Nuxt 4): headers are on event.node.req.headers diff --git a/packages/nuxt/src/runtime/utils/database-span-data.ts b/packages/nuxt/src/runtime/utils/database-span-data.ts index d69368c92e1e..ed3a4804a656 100644 --- a/packages/nuxt/src/runtime/utils/database-span-data.ts +++ b/packages/nuxt/src/runtime/utils/database-span-data.ts @@ -1,3 +1,4 @@ +import { DB_NAMESPACE, SERVER_ADDRESS, SERVER_PORT } from '@sentry/conventions/attributes'; import type { ConnectorName } from 'db0'; export interface DatabaseSpanData { @@ -27,27 +28,27 @@ export function getDatabaseSpanData(config?: DatabaseConnectionConfig): Partial< if (!config?.connector) { // Default to SQLite if no connector is configured return { - 'db.namespace': 'db.sqlite', + [DB_NAMESPACE]: 'db.sqlite', }; } if (config.connector === 'postgresql' || config.connector === 'mysql2') { return { - 'server.address': config.options?.host, - 'server.port': config.options?.port, + [SERVER_ADDRESS]: config.options?.host, + [SERVER_PORT]: config.options?.port, }; } if (config.connector === 'pglite') { return { - 'db.namespace': config.options?.dataDir, + [DB_NAMESPACE]: config.options?.dataDir, }; } if ((['better-sqlite3', 'bun', 'sqlite', 'sqlite3'] as ConnectorName[]).includes(config.connector)) { return { // DB is the default file name in nitro for sqlite-like connectors - 'db.namespace': `${config.options?.name ?? 'db'}.sqlite`, + [DB_NAMESPACE]: `${config.options?.name ?? 'db'}.sqlite`, }; } diff --git a/packages/nuxt/src/runtime/utils/instrumentDatabase.ts b/packages/nuxt/src/runtime/utils/instrumentDatabase.ts index 71149f91ff19..4c525e005869 100644 --- a/packages/nuxt/src/runtime/utils/instrumentDatabase.ts +++ b/packages/nuxt/src/runtime/utils/instrumentDatabase.ts @@ -248,7 +248,7 @@ function createBreadcrumb(query: string, dialect: SqlDialect | undefined): void category: 'query', message: queryText, data: { - 'db.query.text': queryText, + [DB_QUERY_TEXT]: queryText, }, }); } diff --git a/packages/nuxt/src/runtime/utils/instrumentStorage.ts b/packages/nuxt/src/runtime/utils/instrumentStorage.ts index 1480c1b7b32d..f0dd1fb1b399 100644 --- a/packages/nuxt/src/runtime/utils/instrumentStorage.ts +++ b/packages/nuxt/src/runtime/utils/instrumentStorage.ts @@ -1,4 +1,13 @@ -import { CACHE_HIT, CACHE_KEY, CACHE_OPERATION, SENTRY_OP, SENTRY_ORIGIN } from '@sentry/conventions/attributes'; +import { + CACHE_HIT, + CACHE_KEY, + CACHE_OPERATION, + SENTRY_OP, + SENTRY_ORIGIN, + DB_COLLECTION_NAME, + DB_OPERATION_NAME, + DB_SYSTEM_NAME, +} from '@sentry/conventions/attributes'; import { CACHE_GET, CACHE_PUT, CACHE_REMOVE } from '@sentry/conventions/op'; import { CACHE_OPERATION_NAMES, @@ -240,9 +249,9 @@ function createSpanStartOptions( [CACHE_OPERATION]: cacheOperationName, [SENTRY_ORIGIN]: 'auto.cache.nuxt', [CACHE_KEY]: keys.length > 1 ? keys : keys[0], - 'db.operation.name': methodName, - 'db.collection.name': mountBase.replace(/:$/, ''), - 'db.system.name': driver.name ?? 'unknown', + [DB_OPERATION_NAME]: methodName, + [DB_COLLECTION_NAME]: mountBase.replace(/:$/, ''), + [DB_SYSTEM_NAME]: driver.name ?? 'unknown', }; const client = getClient();