@@ -640,6 +640,7 @@ def __init__(self, *args, **kwargs):
640
640
super ().__init__ (* args , ** kwargs )
641
641
642
642
self ._original_transport = self ._transport
643
+ self ._original_mounts = self ._mounts .copy ()
643
644
self ._is_instrumented_by_opentelemetry = True
644
645
645
646
self ._transport = SyncOpenTelemetryTransport (
@@ -648,6 +649,21 @@ def __init__(self, *args, **kwargs):
648
649
request_hook = _InstrumentedClient ._request_hook ,
649
650
response_hook = _InstrumentedClient ._response_hook ,
650
651
)
652
+ self ._mounts .update (
653
+ {
654
+ url_pattern : (
655
+ SyncOpenTelemetryTransport (
656
+ transport ,
657
+ tracer_provider = _InstrumentedClient ._tracer_provider ,
658
+ request_hook = _InstrumentedClient ._request_hook ,
659
+ response_hook = _InstrumentedClient ._response_hook ,
660
+ )
661
+ if transport is not None
662
+ else transport
663
+ )
664
+ for url_pattern , transport in self ._original_mounts .items ()
665
+ }
666
+ )
651
667
652
668
653
669
class _InstrumentedAsyncClient (httpx .AsyncClient ):
@@ -659,6 +675,7 @@ def __init__(self, *args, **kwargs):
659
675
super ().__init__ (* args , ** kwargs )
660
676
661
677
self ._original_transport = self ._transport
678
+ self ._original_mounts = self ._mounts .copy ()
662
679
self ._is_instrumented_by_opentelemetry = True
663
680
664
681
self ._transport = AsyncOpenTelemetryTransport (
@@ -668,6 +685,22 @@ def __init__(self, *args, **kwargs):
668
685
response_hook = _InstrumentedAsyncClient ._response_hook ,
669
686
)
670
687
688
+ self ._mounts .update (
689
+ {
690
+ url_pattern : (
691
+ AsyncOpenTelemetryTransport (
692
+ transport ,
693
+ tracer_provider = _InstrumentedAsyncClient ._tracer_provider ,
694
+ request_hook = _InstrumentedAsyncClient ._request_hook ,
695
+ response_hook = _InstrumentedAsyncClient ._response_hook ,
696
+ )
697
+ if transport is not None
698
+ else transport
699
+ )
700
+ for url_pattern , transport in self ._original_mounts .items ()
701
+ }
702
+ )
703
+
671
704
672
705
class HTTPXClientInstrumentor (BaseInstrumentor ):
673
706
# pylint: disable=protected-access,attribute-defined-outside-init
@@ -752,6 +785,7 @@ def instrument_client(
752
785
if not client ._is_instrumented_by_opentelemetry :
753
786
if isinstance (client , httpx .Client ):
754
787
client ._original_transport = client ._transport
788
+ client ._original_mounts = client ._mounts .copy ()
755
789
transport = client ._transport or httpx .HTTPTransport ()
756
790
client ._transport = SyncOpenTelemetryTransport (
757
791
transport ,
@@ -760,15 +794,47 @@ def instrument_client(
760
794
response_hook = response_hook ,
761
795
)
762
796
client ._is_instrumented_by_opentelemetry = True
797
+ client ._mounts .update (
798
+ {
799
+ url_pattern : (
800
+ SyncOpenTelemetryTransport (
801
+ transport ,
802
+ tracer_provider = tracer_provider ,
803
+ request_hook = request_hook ,
804
+ response_hook = response_hook ,
805
+ )
806
+ if transport is not None
807
+ else transport
808
+ )
809
+ for url_pattern , transport in client ._original_mounts .items ()
810
+ }
811
+ )
812
+
763
813
if isinstance (client , httpx .AsyncClient ):
764
814
transport = client ._transport or httpx .AsyncHTTPTransport ()
815
+ client ._original_mounts = client ._mounts .copy ()
765
816
client ._transport = AsyncOpenTelemetryTransport (
766
817
transport ,
767
818
tracer_provider = tracer_provider ,
768
819
request_hook = request_hook ,
769
820
response_hook = response_hook ,
770
821
)
771
822
client ._is_instrumented_by_opentelemetry = True
823
+ client ._mounts .update (
824
+ {
825
+ url_pattern : (
826
+ AsyncOpenTelemetryTransport (
827
+ transport ,
828
+ tracer_provider = tracer_provider ,
829
+ request_hook = request_hook ,
830
+ response_hook = response_hook ,
831
+ )
832
+ if transport is not None
833
+ else transport
834
+ )
835
+ for url_pattern , transport in client ._original_mounts .items ()
836
+ }
837
+ )
772
838
else :
773
839
_logger .warning (
774
840
"Attempting to instrument Httpx client while already instrumented"
@@ -787,6 +853,9 @@ def uninstrument_client(
787
853
client ._transport = client ._original_transport
788
854
del client ._original_transport
789
855
client ._is_instrumented_by_opentelemetry = False
856
+ if hasattr (client , "_original_mounts" ):
857
+ client ._mounts = client ._original_mounts .copy ()
858
+ del client ._original_mounts
790
859
else :
791
860
_logger .warning (
792
861
"Attempting to uninstrument Httpx "
0 commit comments