1+ import base64
12import logging
23
34from opentelemetry import trace
@@ -23,10 +24,13 @@ class OtelSettings(BaseSettings):
2324 )
2425
2526 enabled : bool = Field (default = False )
26- b64_secret : SecretStr | None = Field (
27+ user : str | None = Field (
2728 default = None ,
28- description = "Secret for OTLP authentication, encoded as base64 array."
29- "Required when enabled=True." ,
29+ description = "User for OTLP authentication. Required when enabled=True." ,
30+ )
31+ secret : SecretStr | None = Field (
32+ default = None ,
33+ description = "Secret for OTLP authentication. Required when enabled=True." ,
3034 )
3135 service_name : str = Field (default = "askui-python-sdk" )
3236 service_version : str = Field (default = __version__ )
@@ -39,7 +43,10 @@ class OtelSettings(BaseSettings):
3943 @model_validator (mode = "after" )
4044 def validate_secret_when_enabled (self ) -> Self :
4145 """Ensure secret is provided when OpenTelemetry is enabled."""
42- if self .enabled and self .b64_secret is None :
46+ if self .enabled and self .user is None :
47+ error_msg = "User is required when OpenTelemetry is enabled"
48+ raise ValueError (error_msg )
49+ if self .enabled and self .secret is None :
4350 error_msg = "Secret is required when OpenTelemetry is enabled"
4451 raise ValueError (error_msg )
4552 return self
@@ -68,7 +75,10 @@ def setup_opentelemetry_tracing(settings: OtelSettings) -> None:
6875 SQLAlchemyInstrumentor ,
6976 )
7077 except ImportError :
71- logger .exception ("Failed to set up OTEL Tracing." )
78+ logger .exception ("Failed to set up OpenTelemetry Tracing." )
79+ return
80+
81+ if not settings .enabled :
7282 return
7383
7484 resource = Resource .create (
@@ -80,9 +90,12 @@ def setup_opentelemetry_tracing(settings: OtelSettings) -> None:
8090 )
8191 provider = TracerProvider (resource = resource )
8292
93+ base : str = settings .user + ":" + settings .secret .get_secret_value () # type: ignore
94+ encoded = base64 .b64encode (base .encode ("utf-8" )).decode ("utf-8" )
95+
8396 otlp_exporter = OTLPSpanExporter (
8497 endpoint = settings .endpoint ,
85- headers = {"authorization" : f"Basic { settings . b64_secret . get_secret_value () } " }, # type: ignore[union-attr]
98+ headers = {"authorization" : f"Basic { encoded } " },
8699 )
87100
88101 span_processor = BatchSpanProcessor (otlp_exporter )
0 commit comments