From 31ed6ee4453bfcebb084fd7f06718f8a947bfc72 Mon Sep 17 00:00:00 2001 From: Michi Hoffmann Date: Mon, 22 Jun 2026 14:38:56 +0200 Subject: [PATCH 1/3] feat(description): Add cache and resource description models Add description models for cache and resource spans that define how span descriptions are inferred from attributes. The cache description uses cache.key for cache, cache.get, cache.put, and cache.remove operations. The resource description uses url.full for all resource operations including script, css, link, img, audio, video, iframe, and other. Also registers cache.get, cache.put, and cache.remove as new ops in the database op model. Co-Authored-By: Claude Opus 4.6 --- model/description/cache.json | 17 +++++++++++++++++ model/description/resource.json | 22 ++++++++++++++++++++++ model/op/database.json | 9 +++++++++ 3 files changed, 48 insertions(+) create mode 100644 model/description/cache.json create mode 100644 model/description/resource.json diff --git a/model/description/cache.json b/model/description/cache.json new file mode 100644 index 00000000..6924ec14 --- /dev/null +++ b/model/description/cache.json @@ -0,0 +1,17 @@ +{ + "brief": "Cache", + "operations": [ + { + "name": "Operations", + "brief": "Operations that interact with a cache, such as reading or writing cached values.", + "ops": [ + "cache", + "cache.get", + "cache.put", + "cache.remove" + ], + "templates": ["{{cache.key}}"], + "examples": ["my-cache-key"] + } + ] +} diff --git a/model/description/resource.json b/model/description/resource.json new file mode 100644 index 00000000..337edab5 --- /dev/null +++ b/model/description/resource.json @@ -0,0 +1,22 @@ +{ + "brief": "Resource", + "operations": [ + { + "name": "Resources", + "brief": "Loading of resources in the browser.", + "ops": [ + "resource", + "resource.script", + "resource.css", + "resource.link", + "resource.img", + "resource.audio", + "resource.video", + "resource.iframe", + "resource.other" + ], + "templates": ["{{url.full}}"], + "examples": ["https://example.com/static/app.js"] + } + ] +} diff --git a/model/op/database.json b/model/op/database.json index 79fb2965..74c587b0 100644 --- a/model/op/database.json +++ b/model/op/database.json @@ -10,6 +10,15 @@ }, { "name": "cache" + }, + { + "name": "cache.get" + }, + { + "name": "cache.put" + }, + { + "name": "cache.remove" } ] } From 4e855f269fdf4efe72cea98e674460a783bc4367 Mon Sep 17 00:00:00 2001 From: Michi Hoffmann Date: Mon, 22 Jun 2026 14:42:15 +0200 Subject: [PATCH 2/3] build: Run generate script Co-Authored-By: Claude Opus 4.6 --- javascript/sentry-conventions/src/op.ts | 6 ++++++ model/description/cache.json | 7 +------ rust/src/op.rs | 6 ++++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/javascript/sentry-conventions/src/op.ts b/javascript/sentry-conventions/src/op.ts index 52ee4e58..04eebbfd 100644 --- a/javascript/sentry-conventions/src/op.ts +++ b/javascript/sentry-conventions/src/op.ts @@ -80,6 +80,12 @@ export const DATABASE_DB_QUERY_SPAN_OP = 'db.query'; export const DATABASE_CACHE_SPAN_OP = 'cache'; +export const DATABASE_CACHE_GET_SPAN_OP = 'cache.get'; + +export const DATABASE_CACHE_PUT_SPAN_OP = 'cache.put'; + +export const DATABASE_CACHE_REMOVE_SPAN_OP = 'cache.remove'; + // Path: model/op/faas.json // Name: faas diff --git a/model/description/cache.json b/model/description/cache.json index 6924ec14..d83557c1 100644 --- a/model/description/cache.json +++ b/model/description/cache.json @@ -4,12 +4,7 @@ { "name": "Operations", "brief": "Operations that interact with a cache, such as reading or writing cached values.", - "ops": [ - "cache", - "cache.get", - "cache.put", - "cache.remove" - ], + "ops": ["cache", "cache.get", "cache.put", "cache.remove"], "templates": ["{{cache.key}}"], "examples": ["my-cache-key"] } diff --git a/rust/src/op.rs b/rust/src/op.rs index 24850c73..dddcc2ef 100644 --- a/rust/src/op.rs +++ b/rust/src/op.rs @@ -67,6 +67,12 @@ pub const DATABASE_DB_QUERY_SPAN_OP: &str = "db.query"; pub const DATABASE_CACHE_SPAN_OP: &str = "cache"; +pub const DATABASE_CACHE_GET_SPAN_OP: &str = "cache.get"; + +pub const DATABASE_CACHE_PUT_SPAN_OP: &str = "cache.put"; + +pub const DATABASE_CACHE_REMOVE_SPAN_OP: &str = "cache.remove"; + // Path: model/op/faas.json // Name: faas From 2c2dacda2e99569e538f3bdb5d6c5955e3912cff Mon Sep 17 00:00:00 2001 From: Michi Hoffmann Date: Mon, 22 Jun 2026 14:51:54 +0200 Subject: [PATCH 3/3] fix(op): Register resource.audio, video, iframe in browser ops These ops were referenced in the name model but missing from the op registry, so no SDK constants would be generated for them. Co-Authored-By: Claude Opus 4.6 --- javascript/sentry-conventions/src/op.ts | 6 ++++++ model/op/browser.json | 9 +++++++++ rust/src/op.rs | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/javascript/sentry-conventions/src/op.ts b/javascript/sentry-conventions/src/op.ts index 04eebbfd..a8c63f72 100644 --- a/javascript/sentry-conventions/src/op.ts +++ b/javascript/sentry-conventions/src/op.ts @@ -26,6 +26,12 @@ export const BROWSER_RESOURCE_IMG_SPAN_OP = 'resource.img'; export const BROWSER_RESOURCE_CSS_SPAN_OP = 'resource.css'; +export const BROWSER_RESOURCE_AUDIO_SPAN_OP = 'resource.audio'; + +export const BROWSER_RESOURCE_VIDEO_SPAN_OP = 'resource.video'; + +export const BROWSER_RESOURCE_IFRAME_SPAN_OP = 'resource.iframe'; + export const BROWSER_RESOURCE_OTHER_SPAN_OP = 'resource.other'; /** diff --git a/model/op/browser.json b/model/op/browser.json index 4d694fe8..5d47a678 100644 --- a/model/op/browser.json +++ b/model/op/browser.json @@ -26,6 +26,15 @@ { "name": "resource.css" }, + { + "name": "resource.audio" + }, + { + "name": "resource.video" + }, + { + "name": "resource.iframe" + }, { "name": "resource.other" }, diff --git a/rust/src/op.rs b/rust/src/op.rs index dddcc2ef..89db85e1 100644 --- a/rust/src/op.rs +++ b/rust/src/op.rs @@ -20,6 +20,12 @@ pub const BROWSER_RESOURCE_IMG_SPAN_OP: &str = "resource.img"; pub const BROWSER_RESOURCE_CSS_SPAN_OP: &str = "resource.css"; +pub const BROWSER_RESOURCE_AUDIO_SPAN_OP: &str = "resource.audio"; + +pub const BROWSER_RESOURCE_VIDEO_SPAN_OP: &str = "resource.video"; + +pub const BROWSER_RESOURCE_IFRAME_SPAN_OP: &str = "resource.iframe"; + pub const BROWSER_RESOURCE_OTHER_SPAN_OP: &str = "resource.other"; /// Usage of browser APIs or functionality