from pydantic import BaseModel from pydantic_settings import ( BaseSettings, SettingsConfigDict, ) from pathlib import Path import logging BASE_DIR = Path(__file__).parent.parent TEMPLATES_DIR = BASE_DIR / "web" / "templates" STATIC_DIR = BASE_DIR / "web" / "static" icon_dict = { "0": "", "1": "🟦", "2": "🟨", "3": "🟧", "4": "🟥", "5": "🟫", "10": "✅", } class LogConfig(BaseModel): level: int = 30 level_to_file: int = 30 dateformat: str = "%Y-%m-%d %H:%M:%S" format: str = ( "[%(asctime)s.%(msecs)03d] %(module)-25s:%(lineno)4d | %(funcName)-20s| %(levelname)-8s | %(message)s" ) class RedisConfig(BaseModel): host: str = "localhost" port: int = 6379 pwd: str | None = None class TelegramBotConfig(BaseModel): token: str chat_id: int tread_id: int delete_msg: str class ZabbixConfig(BaseModel): url: str token: str min_severity: int upd_interval: int alert_fail_count: int alert_tread_id: int alert_tag_user: str = "" alert_text_up: str alert_text_down: str change_state_count: int = 0 api_state: str = "UP" class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=( BASE_DIR / "config" / ".env-template", BASE_DIR / "config" / ".env", ), case_sensitive=False, env_nested_delimiter="__", env_prefix="CFG__", ) log: LogConfig = LogConfig() redis: RedisConfig tgbot: TelegramBotConfig zabbix: ZabbixConfig conf = Settings() logging.basicConfig( level=conf.log.level, datefmt=conf.log.dateformat, format=conf.log.format, ) file_handler = logging.FileHandler(BASE_DIR / "logfile.log") file_handler.setLevel(conf.log.level_to_file) file_handler.setFormatter( logging.Formatter( "[%(asctime)s.%(msecs)03d] %(module)s:%(lineno)4d | %(funcName)s| %(levelname)s | %(message)s" ) ) logging.getLogger().addHandler(file_handler)