|
|
@@ -1,4 +1,4 @@
|
|
|
-"""obagent SDK 的显式、安全配置。"""
|
|
|
+"""obagent SDK 的显式运行时配置。"""
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
@@ -6,7 +6,7 @@ import os
|
|
|
import warnings
|
|
|
from dataclasses import dataclass
|
|
|
from pathlib import Path
|
|
|
-from typing import Mapping
|
|
|
+from typing import Literal, Mapping
|
|
|
|
|
|
from dotenv import dotenv_values
|
|
|
|
|
|
@@ -55,6 +55,11 @@ def _positive_int(value: str, *, default: int) -> int:
|
|
|
return parsed if parsed > 0 else default
|
|
|
|
|
|
|
|
|
+def _capture_mode(value: str) -> Literal["full", "redacted"]:
|
|
|
+ normalized = value.strip().lower()
|
|
|
+ return "redacted" if normalized == "redacted" else "full"
|
|
|
+
|
|
|
+
|
|
|
@dataclass(frozen=True)
|
|
|
class ObservabilitySettings:
|
|
|
"""只承载观测基础设施配置,不进入业务合同。"""
|
|
|
@@ -68,6 +73,7 @@ class ObservabilitySettings:
|
|
|
batch_size: int = 200
|
|
|
flush_interval: float = 0.5
|
|
|
wal_dir: str = ""
|
|
|
+ capture_mode: Literal["full", "redacted"] = "full"
|
|
|
|
|
|
@classmethod
|
|
|
def load(
|
|
|
@@ -76,7 +82,11 @@ class ObservabilitySettings:
|
|
|
project_root: Path | None = None,
|
|
|
environ: Mapping[str, str] | None = None,
|
|
|
) -> "ObservabilitySettings":
|
|
|
- """读取 ``OBAGENT_*``;不把 ``.env`` 的其他变量注入进程。"""
|
|
|
+ """读取观测配置;只有当前进程的一次性授权可以开启上报。
|
|
|
+
|
|
|
+ ``OBAGENT_REPORT_THIS_RUN`` 故意不从项目 ``.env`` 读取,避免测试、
|
|
|
+ 回放和临时脚本仅因共享配置存在就自动写入远端观测台。
|
|
|
+ """
|
|
|
|
|
|
env = environ if environ is not None else os.environ
|
|
|
values: Mapping[str, object] = {}
|
|
|
@@ -89,12 +99,7 @@ class ObservabilitySettings:
|
|
|
values = {}
|
|
|
|
|
|
enabled = _boolean(
|
|
|
- _first(
|
|
|
- "OBAGENT_ENABLED",
|
|
|
- environ=env,
|
|
|
- dotenv=values,
|
|
|
- default="false",
|
|
|
- ),
|
|
|
+ env.get("OBAGENT_REPORT_THIS_RUN", "false"),
|
|
|
default=False,
|
|
|
)
|
|
|
return cls(
|
|
|
@@ -156,6 +161,14 @@ class ObservabilitySettings:
|
|
|
dotenv=values,
|
|
|
default="",
|
|
|
).strip(),
|
|
|
+ capture_mode=_capture_mode(
|
|
|
+ _first(
|
|
|
+ "OBAGENT_CAPTURE_MODE",
|
|
|
+ environ=env,
|
|
|
+ dotenv=values,
|
|
|
+ default="full",
|
|
|
+ )
|
|
|
+ ),
|
|
|
)
|
|
|
|
|
|
def configure_sdk(self) -> bool:
|