44from urllib .parse import urlparse
55
66from ddtrace ._trace .processor import SpanProcessor
7+ from ddtrace ._trace .span import Span
78from ddtrace .ext import SpanTypes
89from ddtrace .ext import http
910from ddtrace .internal .logger import get_logger
1314log = get_logger (__name__ )
1415
1516
16- class ResourceRenamingProcessor ( SpanProcessor ) :
17+ class SimplifiedEndpointComputer :
1718 def __init__ (self ):
1819 self ._INT_RE = re .compile (r"^[1-9][0-9]+$" )
1920 self ._INT_ID_RE = re .compile (r"^(?=.*[0-9].*)[0-9._-]{3,}$" )
@@ -35,7 +36,7 @@ def _compute_simplified_endpoint_path_element(self, elem: str) -> str:
3536 return "{param:str}"
3637 return elem
3738
38- def _compute_simplified_endpoint (self , url : Optional [str ]) -> str :
39+ def from_url (self , url : Optional [str ]) -> str :
3940 """Extracts and simplifies the path from an HTTP URL."""
4041 if not url :
4142 return "/"
@@ -62,16 +63,24 @@ def _compute_simplified_endpoint(self, url: Optional[str]) -> str:
6263 elements = [self ._compute_simplified_endpoint_path_element (elem ) for elem in elements ]
6364 return "/" + "/" .join (elements )
6465
65- def on_span_start (self , span ):
66+
67+ class ResourceRenamingProcessor (SpanProcessor ):
68+ def __init__ (self ):
69+ self .simplified_endpoint_computer = SimplifiedEndpointComputer ()
70+
71+ def on_span_start (self , span : Span ):
6672 pass
6773
68- def on_span_finish (self , span ):
74+ def on_span_finish (self , span : Span ):
6975 if not span ._is_top_level or span .span_type not in (SpanTypes .WEB , SpanTypes .HTTP , SpanTypes .SERVERLESS ):
7076 return
7177
78+ status = span .get_tag (http .STATUS_CODE )
79+ is_404 = status == "404" or status == 404
80+
7281 route = span .get_tag (http .ROUTE )
7382
74- if not route or config ._trace_resource_renaming_always_simplified_endpoint :
83+ if not is_404 and ( not route or config ._trace_resource_renaming_always_simplified_endpoint ) :
7584 url = span .get_tag (http .URL )
76- endpoint = self ._compute_simplified_endpoint (url )
77- span ._set_tag_str (http .ENDPOINT , endpoint )
85+ endpoint = self .simplified_endpoint_computer . from_url (url )
86+ span .set_tag_str (http .ENDPOINT , endpoint )
0 commit comments