@@ -223,8 +223,8 @@ def test_cache_spans_middleware(
223223 assert second_event ["spans" ][0 ]["data" ]["cache.key" ][0 ].startswith (
224224 "views.decorators.cache.cache_header."
225225 )
226- assert not second_event ["spans" ][0 ]["data" ]["cache.hit" ]
227- assert "cache.item_size" not in second_event ["spans" ][0 ]["data" ]
226+ assert second_event ["spans" ][0 ]["data" ]["cache.hit" ]
227+ assert second_event ["spans" ][0 ]["data" ][ "cache.item_size" ] == 2
228228 # second_event - cache.get 2
229229 assert second_event ["spans" ][1 ]["op" ] == "cache.get"
230230 assert second_event ["spans" ][1 ]["description" ].startswith (
@@ -501,14 +501,76 @@ def test_cache_spans_item_size(sentry_init, client, capture_events, use_django_c
501501
502502 assert len (second_event ["spans" ]) == 2
503503 assert second_event ["spans" ][0 ]["op" ] == "cache.get"
504- assert not second_event ["spans" ][0 ]["data" ]["cache.hit" ]
505- assert "cache.item_size" not in second_event ["spans" ][0 ]["data" ]
504+ assert second_event ["spans" ][0 ]["data" ]["cache.hit" ]
505+ assert second_event ["spans" ][0 ]["data" ][ "cache.item_size" ] == 2
506506
507507 assert second_event ["spans" ][1 ]["op" ] == "cache.get"
508508 assert second_event ["spans" ][1 ]["data" ]["cache.hit" ]
509509 assert second_event ["spans" ][1 ]["data" ]["cache.item_size" ] == 58
510510
511511
512+ @pytest .mark .forked
513+ @pytest_mark_django_db_decorator ()
514+ def test_cache_spans_get_custom_default (
515+ sentry_init , capture_events , use_django_caching
516+ ):
517+ sentry_init (
518+ integrations = [
519+ DjangoIntegration (
520+ cache_spans = True ,
521+ middleware_spans = False ,
522+ signals_spans = False ,
523+ )
524+ ],
525+ traces_sample_rate = 1.0 ,
526+ )
527+ events = capture_events ()
528+
529+ id = os .getpid ()
530+
531+ from django .core .cache import cache
532+
533+ with sentry_sdk .start_transaction ():
534+ cache .set (f"S{ id } " , "Sensitive1" )
535+ cache .set (f"S{ id + 1 } " , "" )
536+
537+ cache .get (f"S{ id } " , "null" )
538+ cache .get (f"S{ id } " , default = "null" )
539+
540+ cache .get (f"S{ id + 1 } " , "null" )
541+ cache .get (f"S{ id + 1 } " , default = "null" )
542+
543+ cache .get (f"S{ id + 2 } " , "null" )
544+ cache .get (f"S{ id + 2 } " , default = "null" )
545+
546+ (transaction ,) = events
547+ assert len (transaction ["spans" ]) == 8
548+
549+ assert transaction ["spans" ][0 ]["op" ] == "cache.put"
550+ assert transaction ["spans" ][0 ]["description" ] == f"S{ id } "
551+
552+ assert transaction ["spans" ][1 ]["op" ] == "cache.put"
553+ assert transaction ["spans" ][1 ]["description" ] == f"S{ id + 1 } "
554+
555+ for span in (transaction ["spans" ][2 ], transaction ["spans" ][3 ]):
556+ assert span ["op" ] == "cache.get"
557+ assert span ["description" ] == f"S{ id } "
558+ assert span ["data" ]["cache.hit" ]
559+ assert span ["data" ]["cache.item_size" ] == 10
560+
561+ for span in (transaction ["spans" ][4 ], transaction ["spans" ][5 ]):
562+ assert span ["op" ] == "cache.get"
563+ assert span ["description" ] == f"S{ id + 1 } "
564+ assert span ["data" ]["cache.hit" ]
565+ assert span ["data" ]["cache.item_size" ] == 0
566+
567+ for span in (transaction ["spans" ][6 ], transaction ["spans" ][7 ]):
568+ assert span ["op" ] == "cache.get"
569+ assert span ["description" ] == f"S{ id + 2 } "
570+ assert not span ["data" ]["cache.hit" ]
571+ assert "cache.item_size" not in span ["data" ]
572+
573+
512574@pytest .mark .forked
513575@pytest_mark_django_db_decorator ()
514576def test_cache_spans_get_many (sentry_init , capture_events , use_django_caching ):
@@ -538,24 +600,30 @@ def test_cache_spans_get_many(sentry_init, capture_events, use_django_caching):
538600
539601 assert transaction ["spans" ][0 ]["op" ] == "cache.get"
540602 assert transaction ["spans" ][0 ]["description" ] == f"S{ id } , S{ id + 1 } "
603+ assert not transaction ["spans" ][0 ]["data" ]["cache.hit" ]
541604
542605 assert transaction ["spans" ][1 ]["op" ] == "cache.get"
543606 assert transaction ["spans" ][1 ]["description" ] == f"S{ id } "
607+ assert not transaction ["spans" ][1 ]["data" ]["cache.hit" ]
544608
545609 assert transaction ["spans" ][2 ]["op" ] == "cache.get"
546610 assert transaction ["spans" ][2 ]["description" ] == f"S{ id + 1 } "
611+ assert not transaction ["spans" ][2 ]["data" ]["cache.hit" ]
547612
548613 assert transaction ["spans" ][3 ]["op" ] == "cache.put"
549614 assert transaction ["spans" ][3 ]["description" ] == f"S{ id } "
550615
551616 assert transaction ["spans" ][4 ]["op" ] == "cache.get"
552617 assert transaction ["spans" ][4 ]["description" ] == f"S{ id } , S{ id + 1 } "
618+ assert transaction ["spans" ][4 ]["data" ]["cache.hit" ]
553619
554620 assert transaction ["spans" ][5 ]["op" ] == "cache.get"
555621 assert transaction ["spans" ][5 ]["description" ] == f"S{ id } "
622+ assert transaction ["spans" ][5 ]["data" ]["cache.hit" ]
556623
557624 assert transaction ["spans" ][6 ]["op" ] == "cache.get"
558625 assert transaction ["spans" ][6 ]["description" ] == f"S{ id + 1 } "
626+ assert not transaction ["spans" ][6 ]["data" ]["cache.hit" ]
559627
560628
561629@pytest .mark .forked
0 commit comments