41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AppConfig:
|
|
db_path: str
|
|
metric_nodes_json_path: str
|
|
offline_threshold_seconds: int
|
|
online_threshold_seconds: int
|
|
scheduler_interval_seconds: int
|
|
node_id_prefix: str
|
|
auth_mode: str
|
|
|
|
|
|
def _get_int_env(name: str, default: int) -> int:
|
|
raw = os.environ.get(name)
|
|
if raw is None or raw.strip() == "":
|
|
return default
|
|
try:
|
|
return int(raw)
|
|
except ValueError as exc:
|
|
raise ValueError(f"Environment variable {name} must be an integer, got {raw!r}") from exc
|
|
|
|
|
|
def load_config() -> AppConfig:
|
|
"""读取环境变量生成配置对象,方便统一管理运行参数。"""
|
|
return AppConfig(
|
|
db_path=os.environ.get("DB_PATH", "/private/argus/master/db.sqlite3"),
|
|
metric_nodes_json_path=os.environ.get(
|
|
"METRIC_NODES_JSON_PATH", "/private/argus/metric/prometheus/nodes.json"
|
|
),
|
|
offline_threshold_seconds=_get_int_env("OFFLINE_THRESHOLD_SECONDS", 180),
|
|
online_threshold_seconds=_get_int_env("ONLINE_THRESHOLD_SECONDS", 120),
|
|
scheduler_interval_seconds=_get_int_env("SCHEDULER_INTERVAL_SECONDS", 30),
|
|
node_id_prefix=os.environ.get("NODE_ID_PREFIX", "A"),
|
|
auth_mode=os.environ.get("AUTH_MODE", "disabled"),
|
|
)
|