Skip to content

Commit de4a10d

Browse files
committed
feat(cloudflare): Add db.summary to attributes an span name
1 parent 626e74b commit de4a10d

5 files changed

Lines changed: 25 additions & 9 deletions

File tree

dev-packages/cloudflare-integration-tests/suites/tracing/durableobject-sql/test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ it('instruments SQL exec operations on Durable Object storage', async ({ signal
3232
expect(sqlSpans).toEqual(
3333
expect.arrayContaining([
3434
expect.objectContaining({
35-
description: 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)',
35+
description: 'CREATE TABLE users',
3636
op: 'db.query',
3737
origin: 'auto.db.cloudflare.durable_object.sql',
3838
data: expect.objectContaining({
@@ -41,28 +41,31 @@ it('instruments SQL exec operations on Durable Object storage', async ({ signal
4141
'db.system.name': 'cloudflare-durable-object-sql',
4242
'db.operation.name': 'exec',
4343
'db.query.text': 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)',
44+
'db.query.summary': 'CREATE TABLE users',
4445
'cloudflare.durable_object.query.bindings': 0,
4546
}),
4647
}),
4748
expect.objectContaining({
48-
description: 'INSERT INTO users (name) VALUES (?)',
49+
description: 'INSERT users',
4950
op: 'db.query',
5051
origin: 'auto.db.cloudflare.durable_object.sql',
5152
data: expect.objectContaining({
5253
'db.system.name': 'cloudflare-durable-object-sql',
5354
'db.operation.name': 'exec',
5455
'db.query.text': 'INSERT INTO users (name) VALUES (?)',
56+
'db.query.summary': 'INSERT users',
5557
'cloudflare.durable_object.query.bindings': 1,
5658
}),
5759
}),
5860
expect.objectContaining({
59-
description: 'SELECT * FROM users',
61+
description: 'SELECT users',
6062
op: 'db.query',
6163
origin: 'auto.db.cloudflare.durable_object.sql',
6264
data: expect.objectContaining({
6365
'db.system.name': 'cloudflare-durable-object-sql',
6466
'db.operation.name': 'exec',
6567
'db.query.text': 'SELECT * FROM users',
68+
'db.query.summary': 'SELECT users',
6669
'cloudflare.durable_object.query.bindings': 0,
6770
}),
6871
}),

packages/cloudflare/src/instrumentations/instrumentSqlStorage.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import type { SqlStorage, SqlStorageCursor, SqlStorageValue } from '@cloudflare/workers-types';
2-
import { _INTERNAL_sanitizeSqlQuery, addBreadcrumb, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';
2+
import {
3+
_INTERNAL_getSqlQuerySummary,
4+
_INTERNAL_sanitizeSqlQuery,
5+
addBreadcrumb,
6+
SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,
7+
startSpan,
8+
} from '@sentry/core';
39

410
/**
511
* Instruments the Durable Object SqlStorage `exec` method with Sentry spans.
@@ -19,16 +25,18 @@ export function instrumentSqlStorage(sql: SqlStorage): SqlStorage {
1925
return function (this: unknown, ...args: unknown[]) {
2026
const [query, ...bindings] = args as [string, ...unknown[]];
2127
const sanitizedQuery = _INTERNAL_sanitizeSqlQuery(query);
28+
const querySummary = _INTERNAL_getSqlQuerySummary(sanitizedQuery);
2229

2330
return startSpan(
2431
{
2532
op: 'db.query',
26-
name: sanitizedQuery,
33+
name: querySummary || sanitizedQuery,
2734
attributes: {
2835
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object.sql',
2936
'db.system.name': 'cloudflare-durable-object-sql',
3037
'db.operation.name': 'exec',
3138
'db.query.text': sanitizedQuery,
39+
'db.query.summary': querySummary,
3240
'cloudflare.durable_object.query.bindings': bindings.length,
3341
},
3442
},

packages/cloudflare/test/instrumentDurableObjectStorage.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,13 +309,14 @@ describe('instrumentDurableObjectStorage', () => {
309309

310310
expect(startSpanSpy).toHaveBeenCalledWith(
311311
{
312-
name: 'SELECT ?',
312+
name: 'SELECT',
313313
op: 'db.query',
314314
attributes: {
315315
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object.sql',
316316
'db.system.name': 'cloudflare-durable-object-sql',
317317
'db.operation.name': 'exec',
318318
'db.query.text': 'SELECT ?',
319+
'db.query.summary': 'SELECT',
319320
'cloudflare.durable_object.query.bindings': 0,
320321
},
321322
},

packages/cloudflare/test/instrumentSqlStorage.test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ describe('instrumentSqlStorage', () => {
1818
expect(startSpanSpy).toHaveBeenCalledWith(
1919
{
2020
op: 'db.query',
21-
name: 'SELECT * FROM users WHERE id = ?',
21+
name: 'SELECT users',
2222
attributes: {
2323
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object.sql',
2424
'db.system.name': 'cloudflare-durable-object-sql',
2525
'db.operation.name': 'exec',
2626
'db.query.text': 'SELECT * FROM users WHERE id = ?',
27+
'db.query.summary': 'SELECT users',
2728
'cloudflare.durable_object.query.bindings': 1,
2829
},
2930
},
@@ -41,12 +42,13 @@ describe('instrumentSqlStorage', () => {
4142
expect(startSpanSpy).toHaveBeenCalledWith(
4243
{
4344
op: 'db.query',
44-
name: 'SELECT * FROM users WHERE name = ? AND age > ?',
45+
name: 'SELECT users',
4546
attributes: {
4647
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object.sql',
4748
'db.system.name': 'cloudflare-durable-object-sql',
4849
'db.operation.name': 'exec',
4950
'db.query.text': 'SELECT * FROM users WHERE name = ? AND age > ?',
51+
'db.query.summary': 'SELECT users',
5052
'cloudflare.durable_object.query.bindings': 0,
5153
},
5254
},
@@ -73,12 +75,13 @@ describe('instrumentSqlStorage', () => {
7375
expect(startSpanSpy).toHaveBeenCalledWith(
7476
{
7577
op: 'db.query',
76-
name: 'INSERT INTO users (name, email) VALUES (?, ?)',
78+
name: 'INSERT users',
7779
attributes: {
7880
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object.sql',
7981
'db.system.name': 'cloudflare-durable-object-sql',
8082
'db.operation.name': 'exec',
8183
'db.query.text': 'INSERT INTO users (name, email) VALUES (?, ?)',
84+
'db.query.summary': 'INSERT users',
8285
'cloudflare.durable_object.query.bindings': 2,
8386
},
8487
},

packages/core/src/server-exports.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export type {
2424
ExpressErrorMiddleware,
2525
} from './integrations/express/types';
2626
export { instrumentPostgresJsSql, _sanitizeSqlQuery as _INTERNAL_sanitizeSqlQuery } from './integrations/postgresjs';
27+
export { getSqlQuerySummary as _INTERNAL_getSqlQuerySummary } from './utils/sql';
2728

2829
export { patchHttpModuleClient } from './integrations/http/client-patch';
2930
export { getHttpClientSubscriptions } from './integrations/http/client-subscriptions';

0 commit comments

Comments
 (0)