55from opentelemetry .sdk .resources import Resource
66from opentelemetry .sdk .trace import TracerProvider
77from opentelemetry .sdk .trace .export import BatchSpanProcessor
8- from pydantic import Field , SecretStr , model_validator
8+ from pydantic import AliasChoices , Field , SecretStr , model_validator
99from pydantic_settings import BaseSettings , SettingsConfigDict
1010from typing_extensions import Self
1111
@@ -21,6 +21,7 @@ class OtelSettings(BaseSettings):
2121 env_prefix = "ASKUI__OTEL_" ,
2222 case_sensitive = False ,
2323 extra = "ignore" ,
24+ validate_by_name = True ,
2425 )
2526
2627 enabled : bool = Field (default = False )
@@ -38,7 +39,11 @@ class OtelSettings(BaseSettings):
3839 default = None ,
3940 description = "OTLP endpoint URL." ,
4041 )
41- cluster_name : str = Field (default = "askui-dev" )
42+ workspace_id : str | None = Field (
43+ default = None ,
44+ validation_alias = AliasChoices ("ASKUI_WORKSPACE_ID" , "askui_workspace_id" ),
45+ description = "AskUI workspace ID. Read from ASKUI_WORKSPACE_ID env var." ,
46+ )
4247
4348 @model_validator (mode = "after" )
4449 def validate_secret_when_enabled (self ) -> Self :
@@ -71,23 +76,20 @@ def setup_opentelemetry_tracing(settings: OtelSettings) -> None:
7176 from opentelemetry .instrumentation .httpx import (
7277 HTTPXClientInstrumentor ,
7378 )
74- from opentelemetry .instrumentation .sqlalchemy import (
75- SQLAlchemyInstrumentor ,
76- )
7779 except ImportError :
7880 logger .exception ("Failed to set up OpenTelemetry Tracing." )
7981 return
8082
8183 if not settings .enabled :
8284 return
8385
84- resource = Resource . create (
85- {
86- "service.name " : settings .service_name ,
87- "service.version" : settings . service_version ,
88- "cluster.name" : settings .cluster_name ,
89- }
90- )
86+ resource_attributes : dict [ str , str ] = {
87+ "service.name" : settings . service_name ,
88+ "service.version " : settings .service_version ,
89+ }
90+ if settings .workspace_id :
91+ resource_attributes [ "askui.workspace.id" ] = settings . workspace_id
92+ resource = Resource . create ( resource_attributes )
9193 provider = TracerProvider (resource = resource )
9294
9395 base : str = settings .user + ":" + settings .secret .get_secret_value () # type: ignore
@@ -104,4 +106,3 @@ def setup_opentelemetry_tracing(settings: OtelSettings) -> None:
104106 trace .set_tracer_provider (provider )
105107
106108 HTTPXClientInstrumentor ().instrument ()
107- SQLAlchemyInstrumentor ().instrument ()
0 commit comments