@@ -44,6 +44,24 @@ def _set_prefixed_attribute(
4444 _set_attribute (f"{ prefix } .{ suffix } " , value , span )
4545
4646
47+ def _update_span_name (name : str , span : Span | None = None ) -> None :
48+ span = span or trace .get_current_span ()
49+
50+ if span is trace .INVALID_SPAN :
51+ logger .debug ("There is no active span, cannot set `name`" )
52+ return
53+
54+ span .update_name (name )
55+
56+
57+ def _use_collector () -> bool :
58+ # Imported here to avoid an import cycle with the client module.
59+ from .client import Client
60+
61+ config = Client .config ()
62+ return config is not None and config .should_use_collector ()
63+
64+
4765def set_params (params : Any , span : Span | None = None ) -> None :
4866 _set_serialised_attribute ("appsignal.request.parameters" , params , span )
4967
@@ -65,7 +83,13 @@ def set_header(header: str, value: Any, span: Span | None = None) -> None:
6583
6684
6785def set_name (name : str , span : Span | None = None ) -> None :
68- _set_attribute ("appsignal.name" , name , span )
86+ # The collector uses the span name directly, and its enrichers cannot
87+ # override it, so update the span name. The agent derives the name from
88+ # semantic conventions, so set an attribute it honors as a hard override.
89+ if _use_collector ():
90+ _update_span_name (name , span )
91+ else :
92+ _set_attribute ("appsignal.name" , name , span )
6993
7094
7195def set_category (category : str , span : Span | None = None ) -> None :
@@ -77,15 +101,27 @@ def set_body(body: str, span: Span | None = None) -> None:
77101
78102
79103def set_sql_body (body : str , span : Span | None = None ) -> None :
80- _set_attribute ("appsignal.sql_body" , body , span )
104+ # The collector sanitizes SQL via the `db.query.text` attribute, gated on
105+ # `db.system.name` being set to a recognized SQL system. The agent
106+ # sanitizes via the `appsignal.sql_body` magic attribute.
107+ if _use_collector ():
108+ _set_attribute ("db.system.name" , "other_sql" , span )
109+ _set_attribute ("db.query.text" , body , span )
110+ else :
111+ _set_attribute ("appsignal.sql_body" , body , span )
81112
82113
83114def set_namespace (namespace : str , span : Span | None = None ) -> None :
84115 _set_attribute ("appsignal.namespace" , namespace , span )
85116
86117
87118def set_root_name (root_name : str , span : Span | None = None ) -> None :
88- _set_attribute ("appsignal.root_name" , root_name , span )
119+ # The collector reads the action name from `appsignal.action_name`, while
120+ # the agent reads it from `appsignal.root_name`.
121+ if _use_collector ():
122+ _set_attribute ("appsignal.action_name" , root_name , span )
123+ else :
124+ _set_attribute ("appsignal.root_name" , root_name , span )
89125
90126
91127def set_error (error : Exception , span : Span | None = None ) -> None :
0 commit comments