@@ -99,15 +99,14 @@ def response_hook(span, request_obj, response)
9999 _set_http_network_protocol_version ,
100100 _set_http_peer_port_client ,
101101 _set_http_scheme ,
102- _set_http_status_code ,
103102 _set_http_url ,
103+ _set_status ,
104104 _StabilityMode ,
105105)
106106from opentelemetry .instrumentation .instrumentor import BaseInstrumentor
107107from opentelemetry .instrumentation .requests .package import _instruments
108108from opentelemetry .instrumentation .requests .version import __version__
109109from opentelemetry .instrumentation .utils import (
110- http_status_to_status_code ,
111110 is_http_instrumentation_enabled ,
112111 suppress_http_instrumentation ,
113112)
@@ -124,7 +123,6 @@ def response_hook(span, request_obj, response)
124123)
125124from opentelemetry .trace import SpanKind , Tracer , get_tracer
126125from opentelemetry .trace .span import Span
127- from opentelemetry .trace .status import StatusCode
128126from opentelemetry .util .http import (
129127 ExcludeList ,
130128 get_excluded_urls ,
@@ -140,6 +138,32 @@ def response_hook(span, request_obj, response)
140138_ResponseHookT = Optional [Callable [[Span , PreparedRequest , Response ], None ]]
141139
142140
141+ def _set_http_status_code_attribute (
142+ span ,
143+ status_code ,
144+ metric_attributes = None ,
145+ sem_conv_opt_in_mode = _StabilityMode .DEFAULT ,
146+ ):
147+ status_code_str = str (status_code )
148+ try :
149+ status_code = int (status_code )
150+ except ValueError :
151+ status_code = - 1
152+ if metric_attributes is None :
153+ metric_attributes = {}
154+ # When we have durations we should set metrics only once
155+ # Also the decision to include status code on a histogram should
156+ # not be dependent on tracing decisions.
157+ _set_status (
158+ span ,
159+ metric_attributes ,
160+ status_code ,
161+ status_code_str ,
162+ server_span = False ,
163+ sem_conv_opt_in_mode = sem_conv_opt_in_mode ,
164+ )
165+
166+
143167# pylint: disable=unused-argument
144168# pylint: disable=R0915
145169def _instrument (
@@ -267,25 +291,12 @@ def get_or_create_headers():
267291
268292 if isinstance (result , Response ):
269293 span_attributes = {}
270- if span .is_recording ():
271- _set_http_status_code (
272- span_attributes ,
273- result .status_code ,
274- sem_conv_opt_in_mode ,
275- )
276- _set_http_status_code (
277- metric_labels , result .status_code , sem_conv_opt_in_mode
278- )
279- status_code = http_status_to_status_code (
280- result .status_code
281- )
282- span .set_status (status_code )
283- if (
284- _report_new (sem_conv_opt_in_mode )
285- and status_code is StatusCode .ERROR
286- ):
287- span_attributes [ERROR_TYPE ] = str (result .status_code )
288- metric_labels [ERROR_TYPE ] = str (result .status_code )
294+ _set_http_status_code_attribute (
295+ span ,
296+ result .status_code ,
297+ metric_labels ,
298+ sem_conv_opt_in_mode ,
299+ )
289300
290301 if result .raw is not None :
291302 version = getattr (result .raw , "version" , None )
0 commit comments