mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-03 04:10:48 +08:00
HTTP transition for asgi (#2610)
This commit is contained in:
@ -17,6 +17,10 @@ import threading
|
||||
from enum import Enum
|
||||
|
||||
from opentelemetry.instrumentation.utils import http_status_to_status_code
|
||||
from opentelemetry.semconv.attributes.client_attributes import (
|
||||
CLIENT_ADDRESS,
|
||||
CLIENT_PORT,
|
||||
)
|
||||
from opentelemetry.semconv.attributes.error_attributes import ERROR_TYPE
|
||||
from opentelemetry.semconv.attributes.http_attributes import (
|
||||
HTTP_REQUEST_METHOD,
|
||||
@ -33,11 +37,18 @@ from opentelemetry.semconv.attributes.server_attributes import (
|
||||
)
|
||||
from opentelemetry.semconv.attributes.url_attributes import (
|
||||
URL_FULL,
|
||||
URL_PATH,
|
||||
URL_QUERY,
|
||||
URL_SCHEME,
|
||||
)
|
||||
from opentelemetry.semconv.attributes.user_agent_attributes import (
|
||||
USER_AGENT_ORIGINAL,
|
||||
)
|
||||
from opentelemetry.semconv.trace import SpanAttributes
|
||||
from opentelemetry.trace.status import Status, StatusCode
|
||||
|
||||
# These lists represent attributes for metrics that are currently supported
|
||||
|
||||
_client_duration_attrs_old = [
|
||||
SpanAttributes.HTTP_STATUS_CODE,
|
||||
SpanAttributes.HTTP_HOST,
|
||||
@ -85,13 +96,12 @@ _server_active_requests_count_attrs_old = [
|
||||
SpanAttributes.HTTP_SCHEME,
|
||||
SpanAttributes.HTTP_FLAVOR,
|
||||
SpanAttributes.HTTP_SERVER_NAME,
|
||||
SpanAttributes.NET_HOST_NAME,
|
||||
SpanAttributes.NET_HOST_PORT,
|
||||
]
|
||||
|
||||
_server_active_requests_count_attrs_new = [
|
||||
HTTP_REQUEST_METHOD,
|
||||
URL_SCHEME,
|
||||
# TODO: Support SERVER_ADDRESS AND SERVER_PORT
|
||||
]
|
||||
|
||||
OTEL_SEMCONV_STABILITY_OPT_IN = "OTEL_SEMCONV_STABILITY_OPT_IN"
|
||||
@ -280,14 +290,14 @@ def _set_http_net_host(result, host, sem_conv_opt_in_mode):
|
||||
if _report_old(sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.NET_HOST_NAME, host)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.SERVER_ADDRESS, host)
|
||||
set_string_attribute(result, SERVER_ADDRESS, host)
|
||||
|
||||
|
||||
def _set_http_net_host_port(result, port, sem_conv_opt_in_mode):
|
||||
if _report_old(sem_conv_opt_in_mode):
|
||||
set_int_attribute(result, SpanAttributes.NET_HOST_PORT, port)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
set_int_attribute(result, SpanAttributes.SERVER_PORT, port)
|
||||
set_int_attribute(result, SERVER_PORT, port)
|
||||
|
||||
|
||||
def _set_http_target(result, target, path, query, sem_conv_opt_in_mode):
|
||||
@ -295,23 +305,23 @@ def _set_http_target(result, target, path, query, sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.HTTP_TARGET, target)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
if path:
|
||||
set_string_attribute(result, SpanAttributes.URL_PATH, path)
|
||||
set_string_attribute(result, URL_PATH, path)
|
||||
if query:
|
||||
set_string_attribute(result, SpanAttributes.URL_QUERY, query)
|
||||
set_string_attribute(result, URL_QUERY, query)
|
||||
|
||||
|
||||
def _set_http_peer_ip(result, ip, sem_conv_opt_in_mode):
|
||||
if _report_old(sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.NET_PEER_IP, ip)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.CLIENT_ADDRESS, ip)
|
||||
set_string_attribute(result, CLIENT_ADDRESS, ip)
|
||||
|
||||
|
||||
def _set_http_peer_port_server(result, port, sem_conv_opt_in_mode):
|
||||
if _report_old(sem_conv_opt_in_mode):
|
||||
set_int_attribute(result, SpanAttributes.NET_PEER_PORT, port)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
set_int_attribute(result, SpanAttributes.CLIENT_PORT, port)
|
||||
set_int_attribute(result, CLIENT_PORT, port)
|
||||
|
||||
|
||||
def _set_http_user_agent(result, user_agent, sem_conv_opt_in_mode):
|
||||
@ -320,32 +330,28 @@ def _set_http_user_agent(result, user_agent, sem_conv_opt_in_mode):
|
||||
result, SpanAttributes.HTTP_USER_AGENT, user_agent
|
||||
)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
set_string_attribute(
|
||||
result, SpanAttributes.USER_AGENT_ORIGINAL, user_agent
|
||||
)
|
||||
set_string_attribute(result, USER_AGENT_ORIGINAL, user_agent)
|
||||
|
||||
|
||||
def _set_http_net_peer_name_server(result, name, sem_conv_opt_in_mode):
|
||||
if _report_old(sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.NET_PEER_NAME, name)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.CLIENT_ADDRESS, name)
|
||||
set_string_attribute(result, CLIENT_ADDRESS, name)
|
||||
|
||||
|
||||
def _set_http_flavor_version(result, version, sem_conv_opt_in_mode):
|
||||
if _report_old(sem_conv_opt_in_mode):
|
||||
set_string_attribute(result, SpanAttributes.HTTP_FLAVOR, version)
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
set_string_attribute(
|
||||
result, SpanAttributes.NETWORK_PROTOCOL_VERSION, version
|
||||
)
|
||||
set_string_attribute(result, NETWORK_PROTOCOL_VERSION, version)
|
||||
|
||||
|
||||
def _set_status(
|
||||
span,
|
||||
metrics_attributes,
|
||||
status_code_str,
|
||||
status_code,
|
||||
status_code_str,
|
||||
sem_conv_opt_in_mode,
|
||||
):
|
||||
if status_code < 0:
|
||||
@ -366,12 +372,8 @@ def _set_status(
|
||||
span.set_attribute(SpanAttributes.HTTP_STATUS_CODE, status_code)
|
||||
metrics_attributes[SpanAttributes.HTTP_STATUS_CODE] = status_code
|
||||
if _report_new(sem_conv_opt_in_mode):
|
||||
span.set_attribute(
|
||||
SpanAttributes.HTTP_RESPONSE_STATUS_CODE, status_code
|
||||
)
|
||||
metrics_attributes[SpanAttributes.HTTP_RESPONSE_STATUS_CODE] = (
|
||||
status_code
|
||||
)
|
||||
span.set_attribute(HTTP_RESPONSE_STATUS_CODE, status_code)
|
||||
metrics_attributes[HTTP_RESPONSE_STATUS_CODE] = status_code
|
||||
if status == StatusCode.ERROR:
|
||||
span.set_attribute(ERROR_TYPE, status_code_str)
|
||||
metrics_attributes[ERROR_TYPE] = status_code_str
|
||||
|
Reference in New Issue
Block a user