71 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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