""" 性能配置汇总模块 集中管理所有性能相关配置,使用 Pydantic Settings 实现: - 支持从环境变量读取配置 - 支持从 .env 文件读取配置 - 使用 lru_cache 缓存配置实例 需求引用: 10.1, 10.2, 10.3, 10.4 """ from functools import lru_cache from typing import Optional from pydantic_settings import BaseSettings from pydantic import Field class PerformanceSettings(BaseSettings): """性能相关配置 所有配置项都有合理的默认值,可通过环境变量或 .env 文件覆盖。 """ # ============================================ # 数据库连接池配置 (需求 10.1) # ============================================ db_host: str = Field(default="localhost", description="数据库主机地址") db_port: int = Field(default=5432, description="数据库端口") db_user: str = Field(default="postgres", description="数据库用户名") db_password: str = Field(default="", description="数据库密码") db_name: str = Field(default="model_square", description="数据库名称") db_pool_size: int = Field(default=20, description="连接池大小") db_max_overflow: int = Field(default=40, description="连接池最大溢出数") db_pool_timeout: int = Field(default=30, description="连接池获取超时时间(秒)") db_pool_recycle: int = Field(default=1800, description="连接回收时间(秒)") # ============================================ # Redis 配置 (需求 10.2) # ============================================ redis_url: str = Field(default="redis://localhost:6379", description="Redis 连接地址") redis_password: str = Field(default="", description="Redis 密码") redis_pool_size: int = Field(default=50, description="Redis 连接池大小") cache_default_ttl: int = Field(default=300, description="缓存默认过期时间(秒)") # ============================================ # 限流配置 (需求 10.3) # ============================================ rate_limit_default: int = Field(default=100, description="默认限流阈值(次/窗口)") rate_limit_window: int = Field(default=60, description="限流时间窗口(秒)") # ============================================ # Gunicorn/应用配置 (需求 10.4) # ============================================ gunicorn_workers: int = Field(default=4, description="Gunicorn Worker 数量") app_host: str = Field(default="0.0.0.0", description="应用监听地址") app_port: int = Field(default=8010, description="应用监听端口") log_level: str = Field(default="info", description="日志级别") # ============================================ # 慢查询配置 (需求 7.4) # ============================================ slow_query_threshold_ms: int = Field(default=1000, description="慢查询阈值(毫秒)") # ============================================ # 调试配置 # ============================================ debug: bool = Field(default=False, description="调试模式") # ============================================ # 爬虫同步配置 # ============================================ crawler_base_url: str = Field(default="http://localhost:8000", description="爬虫系统地址") crawler_referer: str = Field(default="aigcspace.com", description="请求爬虫时的 Referer 域名") apikey_encrypt_key: str = Field(default="", description="爬虫 API Key 解密密钥") model_config = { "env_file": ".env", "env_file_encoding": "utf-8", "extra": "ignore" # 忽略未定义的环境变量 } @property def async_database_url(self) -> str: """构建异步数据库连接 URL""" return f"postgresql+asyncpg://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}" @property def sync_database_url(self) -> str: """构建同步数据库连接 URL""" return f"postgresql://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}" @lru_cache() def get_performance_settings() -> PerformanceSettings: """获取性能配置单例 使用 lru_cache 确保配置只加载一次, 后续调用直接返回缓存的实例。 Returns: PerformanceSettings: 性能配置实例 """ return PerformanceSettings() # 导出配置实例,方便直接导入使用 settings = get_performance_settings()