71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
"""运行配置。
|
||
|
||
支持从环境变量读取(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"),
|
||
)
|