"""运行配置。 支持从环境变量读取(HMS_ 前缀),未配置时使用安全默认值,保证模块开箱即用。 """ from __future__ import annotations import os from dataclasses import dataclass def _env(name: str, default: str) -> str: return os.environ.get(name, default) @dataclass class Config: """检测模块配置。""" http_addr: str = "0.0.0.0:8080" # 检测引擎 evaluation_interval: str = "15s" # 评估周期(PENDING 恢复观察默认时长) recover_duration: str = "15s" # 恢复观察窗口 # 告警收敛 dedup_window: str = "5m" # 去重窗口(同 host+rule 抑制) aggregate_window: str = "1m" # 聚合窗口 # 规则热加载 rule_reload_interval: str = "10s" # 存储驱动:memory / mysql / redis(可选依赖未安装时自动回退 memory) rule_store_driver: str = "memory" event_store_driver: str = "memory" alert_store_driver: str = "memory" cache_driver: str = "memory" bus_driver: str = "memory" # 中间件连接配置(接入真实中间件时使用) mysql_dsn: str = "" redis_url: str = "redis://127.0.0.1:6379/0" kafka_bootstrap: str = "127.0.0.1:9092" metrics_topic: str = "metrics.samples" alerts_topic: str = "alerts.converged" # 是否在启动时写入示例规则(便于本地联调/演示) seed_demo_rules: bool = True @classmethod def from_env(cls) -> "Config": return cls( http_addr=_env("HMS_HTTP_ADDR", "0.0.0.0:8080"), evaluation_interval=_env("HMS_EVALUATION_INTERVAL", "15s"), recover_duration=_env("HMS_RECOVER_DURATION", "15s"), dedup_window=_env("HMS_DEDUP_WINDOW", "5m"), aggregate_window=_env("HMS_AGGREGATE_WINDOW", "1m"), rule_reload_interval=_env("HMS_RULE_RELOAD_INTERVAL", "10s"), rule_store_driver=_env("HMS_RULE_STORE_DRIVER", "memory"), event_store_driver=_env("HMS_EVENT_STORE_DRIVER", "memory"), alert_store_driver=_env("HMS_ALERT_STORE_DRIVER", "memory"), cache_driver=_env("HMS_CACHE_DRIVER", "memory"), bus_driver=_env("HMS_BUS_DRIVER", "memory"), mysql_dsn=_env("HMS_MYSQL_DSN", ""), redis_url=_env("HMS_REDIS_URL", "redis://127.0.0.1:6379/0"), kafka_bootstrap=_env("HMS_KAFKA_BOOTSTRAP", "127.0.0.1:9092"), metrics_topic=_env("HMS_METRICS_TOPIC", "metrics.samples"), alerts_topic=_env("HMS_ALERTS_TOPIC", "alerts.converged"), seed_demo_rules=_env("HMS_SEED_DEMO_RULES", "true").lower() in ("1", "true", "yes"), )