1515import os
1616import threading
1717from enum import Enum
18+ from typing import Container , Mapping
1819
1920from opentelemetry .instrumentation .utils import http_status_to_status_code
2021from opentelemetry .semconv ._incubating .attributes .http_attributes import (
6364 USER_AGENT_ORIGINAL ,
6465)
6566from opentelemetry .semconv .schemas import Schemas
67+ from opentelemetry .trace import Span
6668from opentelemetry .trace .status import Status , StatusCode
69+ from opentelemetry .util .types import AttributeValue
6770
6871# Values defined in milliseconds
6972HTTP_DURATION_HISTOGRAM_BUCKETS_OLD = (
@@ -259,11 +262,11 @@ def _get_opentelemetry_stability_opt_in_mode(
259262
260263
261264def _filter_semconv_duration_attrs (
262- attrs ,
263- old_attrs ,
264- new_attrs ,
265- sem_conv_opt_in_mode = _StabilityMode .DEFAULT ,
266- ):
265+ attrs : Mapping [ str , AttributeValue ] ,
266+ old_attrs : Container [ AttributeValue ] ,
267+ new_attrs : Container [ AttributeValue ] ,
268+ sem_conv_opt_in_mode : _StabilityMode = _StabilityMode .DEFAULT ,
269+ ) -> dict [ str , AttributeValue ] :
267270 filtered_attrs = {}
268271 # duration is two different metrics depending on sem_conv_opt_in_mode, so no DUP attributes
269272 allowed_attributes = (
@@ -276,11 +279,11 @@ def _filter_semconv_duration_attrs(
276279
277280
278281def _filter_semconv_active_request_count_attr (
279- attrs ,
280- old_attrs ,
281- new_attrs ,
282- sem_conv_opt_in_mode = _StabilityMode .DEFAULT ,
283- ):
282+ attrs : Mapping [ str , AttributeValue ] ,
283+ old_attrs : Container [ AttributeValue ] ,
284+ new_attrs : Container [ AttributeValue ] ,
285+ sem_conv_opt_in_mode : _StabilityMode = _StabilityMode .DEFAULT ,
286+ ) -> dict [ str , AttributeValue ] :
284287 filtered_attrs = {}
285288 if _report_old (sem_conv_opt_in_mode ):
286289 for key , val in attrs .items ():
@@ -293,20 +296,29 @@ def _filter_semconv_active_request_count_attr(
293296 return filtered_attrs
294297
295298
296- def set_string_attribute (result , key , value ):
299+ def set_string_attribute (
300+ result : Mapping [str , AttributeValue ], key : str , value : AttributeValue
301+ ) -> None :
297302 if value :
298303 result [key ] = value
299304
300305
301- def set_int_attribute (result , key , value ):
306+ def set_int_attribute (
307+ result : dict [str , AttributeValue ], key : str , value : AttributeValue
308+ ) -> None :
302309 if value :
303310 try :
304311 result [key ] = int (value )
305312 except ValueError :
306313 return
307314
308315
309- def _set_http_method (result , original , normalized , sem_conv_opt_in_mode ):
316+ def _set_http_method (
317+ result : dict [str , AttributeValue ],
318+ original : str ,
319+ normalized : str ,
320+ sem_conv_opt_in_mode : _StabilityMode ,
321+ ) -> None :
310322 original = original .strip ()
311323 normalized = normalized .strip ()
312324 # See https://github.com/open-telemetry/semantic-conventions/blob/main/docs/http/http-spans.md#common-attributes
@@ -320,35 +332,55 @@ def _set_http_method(result, original, normalized, sem_conv_opt_in_mode):
320332 set_string_attribute (result , HTTP_REQUEST_METHOD , normalized )
321333
322334
323- def _set_http_status_code (result , code , sem_conv_opt_in_mode ):
335+ def _set_http_status_code (
336+ result : dict [str , AttributeValue ],
337+ code : str | int ,
338+ sem_conv_opt_in_mode : _StabilityMode ,
339+ ) -> None :
324340 if _report_old (sem_conv_opt_in_mode ):
325341 set_int_attribute (result , HTTP_STATUS_CODE , code )
326342 if _report_new (sem_conv_opt_in_mode ):
327343 set_int_attribute (result , HTTP_RESPONSE_STATUS_CODE , code )
328344
329345
330- def _set_http_url (result , url , sem_conv_opt_in_mode ):
346+ def _set_http_url (
347+ result : dict [str , AttributeValue ],
348+ url : str ,
349+ sem_conv_opt_in_mode : _StabilityMode ,
350+ ) -> None :
331351 if _report_old (sem_conv_opt_in_mode ):
332352 set_string_attribute (result , HTTP_URL , url )
333353 if _report_new (sem_conv_opt_in_mode ):
334354 set_string_attribute (result , URL_FULL , url )
335355
336356
337- def _set_http_scheme (result , scheme , sem_conv_opt_in_mode ):
357+ def _set_http_scheme (
358+ result : dict [str , AttributeValue ],
359+ scheme : str ,
360+ sem_conv_opt_in_mode : _StabilityMode ,
361+ ) -> None :
338362 if _report_old (sem_conv_opt_in_mode ):
339363 set_string_attribute (result , HTTP_SCHEME , scheme )
340364 if _report_new (sem_conv_opt_in_mode ):
341365 set_string_attribute (result , URL_SCHEME , scheme )
342366
343367
344- def _set_http_flavor_version (result , version , sem_conv_opt_in_mode ):
368+ def _set_http_flavor_version (
369+ result : dict [str , AttributeValue ],
370+ version : str ,
371+ sem_conv_opt_in_mode : _StabilityMode ,
372+ ) -> None :
345373 if _report_old (sem_conv_opt_in_mode ):
346374 set_string_attribute (result , HTTP_FLAVOR , version )
347375 if _report_new (sem_conv_opt_in_mode ):
348376 set_string_attribute (result , NETWORK_PROTOCOL_VERSION , version )
349377
350378
351- def _set_http_user_agent (result , user_agent , sem_conv_opt_in_mode ):
379+ def _set_http_user_agent (
380+ result : dict [str , AttributeValue ],
381+ user_agent : str ,
382+ sem_conv_opt_in_mode : _StabilityMode ,
383+ ) -> None :
352384 if _report_old (sem_conv_opt_in_mode ):
353385 set_string_attribute (result , HTTP_USER_AGENT , user_agent )
354386 if _report_new (sem_conv_opt_in_mode ):
@@ -358,28 +390,44 @@ def _set_http_user_agent(result, user_agent, sem_conv_opt_in_mode):
358390# Client
359391
360392
361- def _set_http_host_client (result , host , sem_conv_opt_in_mode ):
393+ def _set_http_host_client (
394+ result : dict [str , AttributeValue ],
395+ host : str ,
396+ sem_conv_opt_in_mode : _StabilityMode ,
397+ ) -> None :
362398 if _report_old (sem_conv_opt_in_mode ):
363399 set_string_attribute (result , HTTP_HOST , host )
364400 if _report_new (sem_conv_opt_in_mode ):
365401 set_string_attribute (result , SERVER_ADDRESS , host )
366402
367403
368- def _set_http_net_peer_name_client (result , peer_name , sem_conv_opt_in_mode ):
404+ def _set_http_net_peer_name_client (
405+ result : dict [str , AttributeValue ],
406+ peer_name : str ,
407+ sem_conv_opt_in_mode : _StabilityMode ,
408+ ) -> None :
369409 if _report_old (sem_conv_opt_in_mode ):
370410 set_string_attribute (result , NET_PEER_NAME , peer_name )
371411 if _report_new (sem_conv_opt_in_mode ):
372412 set_string_attribute (result , SERVER_ADDRESS , peer_name )
373413
374414
375- def _set_http_peer_port_client (result , port , sem_conv_opt_in_mode ):
415+ def _set_http_peer_port_client (
416+ result : dict [str , AttributeValue ],
417+ port : str | int ,
418+ sem_conv_opt_in_mode : _StabilityMode ,
419+ ) -> None :
376420 if _report_old (sem_conv_opt_in_mode ):
377421 set_int_attribute (result , NET_PEER_PORT , port )
378422 if _report_new (sem_conv_opt_in_mode ):
379423 set_int_attribute (result , SERVER_PORT , port )
380424
381425
382- def _set_http_network_protocol_version (result , version , sem_conv_opt_in_mode ):
426+ def _set_http_network_protocol_version (
427+ result : dict [str , AttributeValue ],
428+ version : str ,
429+ sem_conv_opt_in_mode : _StabilityMode ,
430+ ) -> None :
383431 if _report_old (sem_conv_opt_in_mode ):
384432 set_string_attribute (result , HTTP_FLAVOR , version )
385433 if _report_new (sem_conv_opt_in_mode ):
@@ -389,21 +437,35 @@ def _set_http_network_protocol_version(result, version, sem_conv_opt_in_mode):
389437# Server
390438
391439
392- def _set_http_net_host (result , host , sem_conv_opt_in_mode ):
440+ def _set_http_net_host (
441+ result : dict [str , AttributeValue ],
442+ host : str ,
443+ sem_conv_opt_in_mode : _StabilityMode ,
444+ ) -> None :
393445 if _report_old (sem_conv_opt_in_mode ):
394446 set_string_attribute (result , NET_HOST_NAME , host )
395447 if _report_new (sem_conv_opt_in_mode ):
396448 set_string_attribute (result , SERVER_ADDRESS , host )
397449
398450
399- def _set_http_net_host_port (result , port , sem_conv_opt_in_mode ):
451+ def _set_http_net_host_port (
452+ result : dict [str , AttributeValue ],
453+ port : str | int ,
454+ sem_conv_opt_in_mode : _StabilityMode ,
455+ ) -> None :
400456 if _report_old (sem_conv_opt_in_mode ):
401457 set_int_attribute (result , NET_HOST_PORT , port )
402458 if _report_new (sem_conv_opt_in_mode ):
403459 set_int_attribute (result , SERVER_PORT , port )
404460
405461
406- def _set_http_target (result , target , path , query , sem_conv_opt_in_mode ):
462+ def _set_http_target (
463+ result : dict [str , AttributeValue ],
464+ target : str ,
465+ path : str | None ,
466+ query : str | None ,
467+ sem_conv_opt_in_mode : _StabilityMode ,
468+ ) -> None :
407469 if _report_old (sem_conv_opt_in_mode ):
408470 set_string_attribute (result , HTTP_TARGET , target )
409471 if _report_new (sem_conv_opt_in_mode ):
@@ -413,7 +475,11 @@ def _set_http_target(result, target, path, query, sem_conv_opt_in_mode):
413475 set_string_attribute (result , URL_QUERY , query )
414476
415477
416- def _set_http_host_server (result , host , sem_conv_opt_in_mode ):
478+ def _set_http_host_server (
479+ result : dict [str , AttributeValue ],
480+ host : str ,
481+ sem_conv_opt_in_mode : _StabilityMode ,
482+ ) -> None :
417483 if _report_old (sem_conv_opt_in_mode ):
418484 set_string_attribute (result , HTTP_HOST , host )
419485 if _report_new (sem_conv_opt_in_mode ):
@@ -426,7 +492,11 @@ def _set_http_host_server(result, host, sem_conv_opt_in_mode):
426492# net.sock.peer.addr -> client.socket.address for server spans (TODO) AND client.address if missing
427493# https://github.com/open-telemetry/semantic-conventions/blob/v1.21.0/CHANGELOG.md#v1210-2023-07-13
428494# https://github.com/open-telemetry/semantic-conventions/blob/main/docs/non-normative/http-migration.md#common-attributes-across-http-client-and-server-spans
429- def _set_http_peer_ip_server (result , ip , sem_conv_opt_in_mode ):
495+ def _set_http_peer_ip_server (
496+ result : dict [str , AttributeValue ],
497+ ip : str ,
498+ sem_conv_opt_in_mode : _StabilityMode ,
499+ ) -> None :
430500 if _report_old (sem_conv_opt_in_mode ):
431501 set_string_attribute (result , NET_PEER_IP , ip )
432502 if _report_new (sem_conv_opt_in_mode ):
@@ -435,28 +505,36 @@ def _set_http_peer_ip_server(result, ip, sem_conv_opt_in_mode):
435505 set_string_attribute (result , CLIENT_ADDRESS , ip )
436506
437507
438- def _set_http_peer_port_server (result , port , sem_conv_opt_in_mode ):
508+ def _set_http_peer_port_server (
509+ result : dict [str , AttributeValue ],
510+ port : str | int ,
511+ sem_conv_opt_in_mode : _StabilityMode ,
512+ ) -> None :
439513 if _report_old (sem_conv_opt_in_mode ):
440514 set_int_attribute (result , NET_PEER_PORT , port )
441515 if _report_new (sem_conv_opt_in_mode ):
442516 set_int_attribute (result , CLIENT_PORT , port )
443517
444518
445- def _set_http_net_peer_name_server (result , name , sem_conv_opt_in_mode ):
519+ def _set_http_net_peer_name_server (
520+ result : dict [str , AttributeValue ],
521+ name : str ,
522+ sem_conv_opt_in_mode : _StabilityMode ,
523+ ) -> None :
446524 if _report_old (sem_conv_opt_in_mode ):
447525 set_string_attribute (result , NET_PEER_NAME , name )
448526 if _report_new (sem_conv_opt_in_mode ):
449527 set_string_attribute (result , CLIENT_ADDRESS , name )
450528
451529
452530def _set_status (
453- span ,
454- metrics_attributes : dict ,
531+ span : Span ,
532+ metrics_attributes : dict [ str , AttributeValue ] ,
455533 status_code : int ,
456534 status_code_str : str ,
457535 server_span : bool = True ,
458536 sem_conv_opt_in_mode : _StabilityMode = _StabilityMode .DEFAULT ,
459- ):
537+ ) -> None :
460538 if status_code < 0 :
461539 if _report_new (sem_conv_opt_in_mode ):
462540 metrics_attributes [ERROR_TYPE ] = status_code_str
0 commit comments