@@ -434,6 +434,8 @@ def __init__(self, filter_=None):
434
434
else :
435
435
filter_ = any_of (filter_ , excluded_service_filter )
436
436
self ._filter = filter_
437
+ self ._request_hook = None
438
+ self ._response_hook = None
437
439
438
440
# Figures out which channel type we need to wrap
439
441
def _which_channel (self , kwargs ):
@@ -455,6 +457,8 @@ def instrumentation_dependencies(self) -> Collection[str]:
455
457
return _instruments
456
458
457
459
def _instrument (self , ** kwargs ):
460
+ self ._request_hook = kwargs .get ("request_hook" )
461
+ self ._response_hook = kwargs .get ("response_hook" )
458
462
for ctype in self ._which_channel (kwargs ):
459
463
_wrap (
460
464
"grpc" ,
@@ -469,11 +473,15 @@ def _uninstrument(self, **kwargs):
469
473
def wrapper_fn (self , original_func , instance , args , kwargs ):
470
474
channel = original_func (* args , ** kwargs )
471
475
tracer_provider = kwargs .get ("tracer_provider" )
476
+ request_hook = self ._request_hook
477
+ response_hook = self ._response_hook
472
478
return intercept_channel (
473
479
channel ,
474
480
client_interceptor (
475
481
tracer_provider = tracer_provider ,
476
482
filter_ = self ._filter ,
483
+ request_hook = request_hook ,
484
+ response_hook = response_hook ,
477
485
),
478
486
)
479
487
@@ -499,6 +507,8 @@ def __init__(self, filter_=None):
499
507
else :
500
508
filter_ = any_of (filter_ , excluded_service_filter )
501
509
self ._filter = filter_
510
+ self ._request_hook = None
511
+ self ._response_hook = None
502
512
503
513
def instrumentation_dependencies (self ) -> Collection [str ]:
504
514
return _instruments
@@ -507,20 +517,28 @@ def _add_interceptors(self, tracer_provider, kwargs):
507
517
if "interceptors" in kwargs and kwargs ["interceptors" ]:
508
518
kwargs ["interceptors" ] = (
509
519
aio_client_interceptors (
510
- tracer_provider = tracer_provider , filter_ = self ._filter
520
+ tracer_provider = tracer_provider ,
521
+ filter_ = self ._filter ,
522
+ request_hook = self ._request_hook ,
523
+ response_hook = self ._response_hook ,
511
524
)
512
525
+ kwargs ["interceptors" ]
513
526
)
514
527
else :
515
528
kwargs ["interceptors" ] = aio_client_interceptors (
516
- tracer_provider = tracer_provider , filter_ = self ._filter
529
+ tracer_provider = tracer_provider ,
530
+ filter_ = self ._filter ,
531
+ request_hook = self ._request_hook ,
532
+ response_hook = self ._response_hook ,
517
533
)
518
534
519
535
return kwargs
520
536
521
537
def _instrument (self , ** kwargs ):
522
538
self ._original_insecure = grpc .aio .insecure_channel
523
539
self ._original_secure = grpc .aio .secure_channel
540
+ self ._request_hook = kwargs .get ("request_hook" )
541
+ self ._response_hook = kwargs .get ("response_hook" )
524
542
tracer_provider = kwargs .get ("tracer_provider" )
525
543
526
544
def insecure (* args , ** kwargs ):
@@ -541,7 +559,9 @@ def _uninstrument(self, **kwargs):
541
559
grpc .aio .secure_channel = self ._original_secure
542
560
543
561
544
- def client_interceptor (tracer_provider = None , filter_ = None ):
562
+ def client_interceptor (
563
+ tracer_provider = None , filter_ = None , request_hook = None , response_hook = None
564
+ ):
545
565
"""Create a gRPC client channel interceptor.
546
566
547
567
Args:
@@ -558,7 +578,12 @@ def client_interceptor(tracer_provider=None, filter_=None):
558
578
559
579
tracer = trace .get_tracer (__name__ , __version__ , tracer_provider )
560
580
561
- return _client .OpenTelemetryClientInterceptor (tracer , filter_ = filter_ )
581
+ return _client .OpenTelemetryClientInterceptor (
582
+ tracer ,
583
+ filter_ = filter_ ,
584
+ request_hook = request_hook ,
585
+ response_hook = response_hook ,
586
+ )
562
587
563
588
564
589
def server_interceptor (tracer_provider = None , filter_ = None ):
@@ -581,7 +606,9 @@ def server_interceptor(tracer_provider=None, filter_=None):
581
606
return _server .OpenTelemetryServerInterceptor (tracer , filter_ = filter_ )
582
607
583
608
584
- def aio_client_interceptors (tracer_provider = None , filter_ = None ):
609
+ def aio_client_interceptors (
610
+ tracer_provider = None , filter_ = None , request_hook = None , response_hook = None
611
+ ):
585
612
"""Create a gRPC client channel interceptor.
586
613
587
614
Args:
@@ -595,10 +622,30 @@ def aio_client_interceptors(tracer_provider=None, filter_=None):
595
622
tracer = trace .get_tracer (__name__ , __version__ , tracer_provider )
596
623
597
624
return [
598
- _aio_client .UnaryUnaryAioClientInterceptor (tracer , filter_ = filter_ ),
599
- _aio_client .UnaryStreamAioClientInterceptor (tracer , filter_ = filter_ ),
600
- _aio_client .StreamUnaryAioClientInterceptor (tracer , filter_ = filter_ ),
601
- _aio_client .StreamStreamAioClientInterceptor (tracer , filter_ = filter_ ),
625
+ _aio_client .UnaryUnaryAioClientInterceptor (
626
+ tracer ,
627
+ filter_ = filter_ ,
628
+ request_hook = request_hook ,
629
+ response_hook = response_hook ,
630
+ ),
631
+ _aio_client .UnaryStreamAioClientInterceptor (
632
+ tracer ,
633
+ filter_ = filter_ ,
634
+ request_hook = request_hook ,
635
+ response_hook = response_hook ,
636
+ ),
637
+ _aio_client .StreamUnaryAioClientInterceptor (
638
+ tracer ,
639
+ filter_ = filter_ ,
640
+ request_hook = request_hook ,
641
+ response_hook = response_hook ,
642
+ ),
643
+ _aio_client .StreamStreamAioClientInterceptor (
644
+ tracer ,
645
+ filter_ = filter_ ,
646
+ request_hook = request_hook ,
647
+ response_hook = response_hook ,
648
+ ),
602
649
]
603
650
604
651
0 commit comments