Skip to content

Commit 93c9480

Browse files
fix: set user and secret as env variables i/o base64 authentication string
1 parent c9066ad commit 93c9480

2 files changed

Lines changed: 25 additions & 9 deletions

File tree

docs/09_observability_telemetry_tracing.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ Set the following environment variables to configure tracing. All variables use
8787
| Environment Variable | Description | Default |
8888
|---|---|---|
8989
| `ASKUI__OTEL_ENABLED` | Enable or disable OpenTelemetry tracing | `False` |
90-
| `ASKUI__OTEL_B64_SECRET` | Base64-encoded secret for OTLP authentication (required when enabled) ||
90+
| `ASKUI__OTEL_USER` | user for OTLP authentication (required when enabled) ||
91+
| `ASKUI__OTEL_SECRET` | secret for OTLP authentication (required when enabled) ||
9192
| `ASKUI__OTEL_ENDPOINT` | OTLP HTTP endpoint URL ||
9293
| `ASKUI__OTEL_SERVICE_NAME` | Service name reported in traces | `askui-python-sdk` |
9394
| `ASKUI__OTEL_SERVICE_VERSION` | Service version reported in traces | Current package version |
@@ -96,14 +97,16 @@ Set the following environment variables to configure tracing. All variables use
9697
#### Linux & MacOS
9798
```bash
9899
export ASKUI__OTEL_ENABLED=True
99-
export ASKUI__OTEL_B64_SECRET="your-base64-encoded-secret"
100+
export ASKUI__OTEL_SECRET="your-user"
101+
export ASKUI__OTEL_SECRET="your-secret"
100102
export ASKUI__OTEL_ENDPOINT="https://your-otlp-endpoint/v1/traces"
101103
```
102104

103105
#### Windows PowerShell
104106
```powershell
105107
$env:ASKUI__OTEL_ENABLED="True"
106-
$env:ASKUI__OTEL_B64_SECRET="your-base64-encoded-secret"
108+
$env:ASKUI__OTEL_SECRET="your-user"
109+
$env:ASKUI__OTEL_B64_SECRET="your-secret"
107110
$env:ASKUI__OTEL_ENDPOINT="https://your-otlp-endpoint/v1/traces"
108111
```
109112

src/askui/telemetry/otel.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import base64
12
import logging
23

34
from 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

Comments
 (0)