1+ import {
2+ CACHE_HIT ,
3+ CACHE_KEY ,
4+ CACHE_OPERATION ,
5+ DB_COLLECTION_NAME ,
6+ DB_OPERATION_NAME ,
7+ DB_SYSTEM_NAME ,
8+ SENTRY_OP ,
9+ SENTRY_ORIGIN ,
10+ } from '@sentry/conventions/attributes' ;
11+ import { CACHE_GET , CACHE_PUT , CACHE_REMOVE } from '@sentry/conventions/op' ;
12+ import { CACHE_OPERATION_NAMES } from '@sentry/core' ;
113import { expect , it } from 'vitest' ;
214import { createRunner } from '../../runner' ;
315import { getSpansFromEnvelope } from '../../spanUtils' ;
416
517it ( 'emits cache.get for a KV read with key and hit attributes' , async ( { signal } ) => {
618 const runner = createRunner ( __dirname )
719 . expect ( envelope => {
8- const spans = getSpansFromEnvelope ( envelope ) . filter ( span => span . name === 'cache.get' ) ;
20+ const spans = getSpansFromEnvelope ( envelope ) . filter ( span => span . name === CACHE_GET ) ;
921 expect ( spans ) . toEqual (
1022 expect . arrayContaining ( [
1123 expect . objectContaining ( {
1224 attributes : expect . objectContaining ( {
13- 'sentry.op' : { type : 'string' , value : 'cache.get' } ,
14- 'sentry.origin' : { type : 'string' , value : 'auto.cache.cloudflare.kv' } ,
15- 'cache.operation' : { type : 'string' , value : 'get' } ,
16- 'cache.key' : { type : 'string' , value : 'get-key' } ,
17- 'cache.hit' : { type : 'boolean' , value : true } ,
18- 'db.operation.name' : { type : 'string' , value : 'get' } ,
19- 'db.collection.name' : { type : 'string' , value : 'MY_KV' } ,
20- 'db.system.name' : { type : 'string' , value : 'cloudflare-kv' } ,
25+ [ SENTRY_OP ] : { type : 'string' , value : CACHE_GET } ,
26+ [ SENTRY_ORIGIN ] : { type : 'string' , value : 'auto.cache.cloudflare.kv' } ,
27+ [ CACHE_OPERATION ] : { type : 'string' , value : CACHE_OPERATION_NAMES [ CACHE_GET ] } ,
28+ [ CACHE_KEY ] : { type : 'string' , value : 'get-key' } ,
29+ [ CACHE_HIT ] : { type : 'boolean' , value : true } ,
30+ [ DB_OPERATION_NAME ] : { type : 'string' , value : 'get' } ,
31+ [ DB_COLLECTION_NAME ] : { type : 'string' , value : 'MY_KV' } ,
32+ [ DB_SYSTEM_NAME ] : { type : 'string' , value : 'cloudflare-kv' } ,
2133 } ) ,
2234 } ) ,
2335 ] ) ,
@@ -33,15 +45,15 @@ it('emits cache.get for a bulk KV read with all keys in cache.key', async ({ sig
3345 const runner = createRunner ( __dirname )
3446 . expect ( envelope => {
3547 const spans = getSpansFromEnvelope ( envelope ) . filter (
36- span => span . name === 'cache.get' && span . attributes [ 'db.operation.name' ] ?. value === 'get' ,
48+ span => span . name === CACHE_GET && span . attributes [ DB_OPERATION_NAME ] ?. value === 'get' ,
3749 ) ;
3850
3951 expect ( spans ) . toEqual (
4052 expect . arrayContaining ( [
4153 expect . objectContaining ( {
4254 attributes : expect . objectContaining ( {
43- 'cache.key' : expect . objectContaining ( { type : 'array' } ) ,
44- 'cache.hit' : { type : 'boolean' , value : true } ,
55+ [ CACHE_KEY ] : expect . objectContaining ( { type : 'array' , value : expect . arrayContaining ( [ 'bulk-a' , 'bulk-b' ] ) } ) ,
56+ [ CACHE_HIT ] : { type : 'boolean' , value : true } ,
4557 } ) ,
4658 } ) ,
4759 ] ) ,
@@ -57,14 +69,14 @@ it('emits cache.get for getWithMetadata', async ({ signal }) => {
5769 const runner = createRunner ( __dirname )
5870 . expect ( envelope => {
5971 const spans = getSpansFromEnvelope ( envelope ) . filter (
60- span => span . name === 'cache.get' && span . attributes [ 'db.operation.name' ] ?. value === 'getWithMetadata' ,
72+ span => span . name === CACHE_GET && span . attributes [ DB_OPERATION_NAME ] ?. value === 'getWithMetadata' ,
6173 ) ;
6274
6375 expect ( spans ) . toEqual ( [
6476 expect . objectContaining ( {
6577 attributes : expect . objectContaining ( {
66- 'cache.key' : { type : 'string' , value : 'metadata-key' } ,
67- 'cache.hit' : { type : 'boolean' , value : true } ,
78+ [ CACHE_KEY ] : { type : 'string' , value : 'metadata-key' } ,
79+ [ CACHE_HIT ] : { type : 'boolean' , value : true } ,
6880 } ) ,
6981 } ) ,
7082 ] ) ;
@@ -78,15 +90,15 @@ it('emits cache.get for getWithMetadata', async ({ signal }) => {
7890it ( 'emits cache.put for KV writes' , async ( { signal } ) => {
7991 const runner = createRunner ( __dirname )
8092 . expect ( envelope => {
81- const spans = getSpansFromEnvelope ( envelope ) . filter ( span => span . name === 'cache.put' ) ;
93+ const spans = getSpansFromEnvelope ( envelope ) . filter ( span => span . name === CACHE_PUT ) ;
8294 expect ( spans ) . toEqual (
8395 expect . arrayContaining ( [
8496 expect . objectContaining ( {
8597 attributes : expect . objectContaining ( {
86- 'sentry.op' : { type : 'string' , value : 'cache.put' } ,
87- 'cache.operation' : { type : 'string' , value : 'put' } ,
88- 'cache.key' : { type : 'string' , value : 'put-key' } ,
89- 'db.operation.name' : { type : 'string' , value : 'put' } ,
98+ [ SENTRY_OP ] : { type : 'string' , value : CACHE_PUT } ,
99+ [ CACHE_OPERATION ] : { type : 'string' , value : CACHE_OPERATION_NAMES [ CACHE_PUT ] } ,
100+ [ CACHE_KEY ] : { type : 'string' , value : 'put-key' } ,
101+ [ DB_OPERATION_NAME ] : { type : 'string' , value : 'put' } ,
90102 } ) ,
91103 } ) ,
92104 ] ) ,
@@ -101,15 +113,15 @@ it('emits cache.put for KV writes', async ({ signal }) => {
101113it ( 'emits cache.remove for KV deletes' , async ( { signal } ) => {
102114 const runner = createRunner ( __dirname )
103115 . expect ( envelope => {
104- const spans = getSpansFromEnvelope ( envelope ) . filter ( span => span . name === 'cache.remove' ) ;
116+ const spans = getSpansFromEnvelope ( envelope ) . filter ( span => span . name === CACHE_REMOVE ) ;
105117 expect ( spans ) . toEqual (
106118 expect . arrayContaining ( [
107119 expect . objectContaining ( {
108120 attributes : expect . objectContaining ( {
109- 'sentry.op' : { type : 'string' , value : 'cache.remove' } ,
110- 'cache.operation' : { type : 'string' , value : 'remove' } ,
111- 'cache.key' : { type : 'string' , value : 'delete-key' } ,
112- 'db.operation.name' : { type : 'string' , value : 'delete' } ,
121+ [ SENTRY_OP ] : { type : 'string' , value : CACHE_REMOVE } ,
122+ [ CACHE_OPERATION ] : { type : 'string' , value : CACHE_OPERATION_NAMES [ CACHE_REMOVE ] } ,
123+ [ CACHE_KEY ] : { type : 'string' , value : 'delete-key' } ,
124+ [ DB_OPERATION_NAME ] : { type : 'string' , value : 'delete' } ,
113125 } ) ,
114126 } ) ,
115127 ] ) ,
@@ -125,16 +137,16 @@ it('emits cache.get for KV list operations', async ({ signal }) => {
125137 const runner = createRunner ( __dirname )
126138 . expect ( envelope => {
127139 const spans = getSpansFromEnvelope ( envelope ) . filter (
128- span => span . name === 'cache.get' && span . attributes [ 'db.operation.name' ] ?. value === 'list' ,
140+ span => span . name === CACHE_GET && span . attributes [ DB_OPERATION_NAME ] ?. value === 'list' ,
129141 ) ;
130142
131143 expect ( spans ) . toEqual (
132144 expect . arrayContaining ( [
133145 expect . objectContaining ( {
134146 attributes : expect . objectContaining ( {
135- 'sentry.op' : { type : 'string' , value : 'cache.get' } ,
136- 'cache.operation' : { type : 'string' , value : 'get' } ,
137- 'db.operation.name' : { type : 'string' , value : 'list' } ,
147+ [ SENTRY_OP ] : { type : 'string' , value : CACHE_GET } ,
148+ [ CACHE_OPERATION ] : { type : 'string' , value : CACHE_OPERATION_NAMES [ CACHE_GET ] } ,
149+ [ DB_OPERATION_NAME ] : { type : 'string' , value : 'list' } ,
138150 } ) ,
139151 } ) ,
140152 ] ) ,
0 commit comments