Implement audio record management features in AsyncBotDB and AudioRepository
- Added methods to delete audio moderation records and retrieve all audio records in async_db.py. - Enhanced AudioRepository with functionality to delete audio records by file name and retrieve all audio message records. - Improved logging for audio record operations to enhance monitoring and debugging capabilities. - Updated related handlers to ensure proper integration of new audio management features.
This commit is contained in:
1
helper_bot/config/__init__.py
Normal file
1
helper_bot/config/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
# Config package
|
||||
129
helper_bot/config/rate_limit_config.py
Normal file
129
helper_bot/config/rate_limit_config.py
Normal file
@@ -0,0 +1,129 @@
|
||||
"""
|
||||
Конфигурация для rate limiting
|
||||
"""
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
|
||||
|
||||
@dataclass
|
||||
class RateLimitSettings:
|
||||
"""Настройки rate limiting для разных типов сообщений"""
|
||||
|
||||
# Основные настройки
|
||||
messages_per_second: float = 0.5 # Максимум 0.5 сообщений в секунду на чат
|
||||
burst_limit: int = 2 # Максимум 2 сообщения подряд
|
||||
retry_after_multiplier: float = 1.5 # Множитель для увеличения задержки при retry
|
||||
max_retry_delay: float = 30.0 # Максимальная задержка между попытками
|
||||
max_retries: int = 3 # Максимальное количество повторных попыток
|
||||
|
||||
# Специальные настройки для разных типов сообщений
|
||||
voice_message_delay: float = 2.0 # Дополнительная задержка для голосовых сообщений
|
||||
media_message_delay: float = 1.5 # Дополнительная задержка для медиа сообщений
|
||||
text_message_delay: float = 1.0 # Дополнительная задержка для текстовых сообщений
|
||||
|
||||
# Настройки для разных типов чатов
|
||||
private_chat_multiplier: float = 1.0 # Множитель для приватных чатов
|
||||
group_chat_multiplier: float = 0.8 # Множитель для групповых чатов
|
||||
channel_multiplier: float = 0.6 # Множитель для каналов
|
||||
|
||||
# Глобальные ограничения
|
||||
global_messages_per_second: float = 10.0 # Максимум 10 сообщений в секунду глобально
|
||||
global_burst_limit: int = 20 # Максимум 20 сообщений подряд глобально
|
||||
|
||||
|
||||
# Конфигурации для разных сценариев использования
|
||||
DEVELOPMENT_CONFIG = RateLimitSettings(
|
||||
messages_per_second=1.0, # Более мягкие ограничения для разработки
|
||||
burst_limit=3,
|
||||
retry_after_multiplier=1.2,
|
||||
max_retry_delay=15.0,
|
||||
max_retries=2
|
||||
)
|
||||
|
||||
PRODUCTION_CONFIG = RateLimitSettings(
|
||||
messages_per_second=0.5, # Строгие ограничения для продакшена
|
||||
burst_limit=2,
|
||||
retry_after_multiplier=1.5,
|
||||
max_retry_delay=30.0,
|
||||
max_retries=3,
|
||||
voice_message_delay=2.5,
|
||||
media_message_delay=2.0,
|
||||
text_message_delay=1.5
|
||||
)
|
||||
|
||||
STRICT_CONFIG = RateLimitSettings(
|
||||
messages_per_second=0.3, # Очень строгие ограничения
|
||||
burst_limit=1,
|
||||
retry_after_multiplier=2.0,
|
||||
max_retry_delay=60.0,
|
||||
max_retries=5,
|
||||
voice_message_delay=3.0,
|
||||
media_message_delay=2.5,
|
||||
text_message_delay=2.0
|
||||
)
|
||||
|
||||
|
||||
def get_rate_limit_config(environment: str = "production") -> RateLimitSettings:
|
||||
"""
|
||||
Получает конфигурацию rate limiting в зависимости от окружения
|
||||
|
||||
Args:
|
||||
environment: Окружение ('development', 'production', 'strict')
|
||||
|
||||
Returns:
|
||||
RateLimitSettings: Конфигурация для указанного окружения
|
||||
"""
|
||||
configs = {
|
||||
"development": DEVELOPMENT_CONFIG,
|
||||
"production": PRODUCTION_CONFIG,
|
||||
"strict": STRICT_CONFIG
|
||||
}
|
||||
|
||||
return configs.get(environment, PRODUCTION_CONFIG)
|
||||
|
||||
|
||||
def get_adaptive_config(
|
||||
current_error_rate: float,
|
||||
base_config: Optional[RateLimitSettings] = None
|
||||
) -> RateLimitSettings:
|
||||
"""
|
||||
Получает адаптивную конфигурацию на основе текущего уровня ошибок
|
||||
|
||||
Args:
|
||||
current_error_rate: Текущий уровень ошибок (0.0 - 1.0)
|
||||
base_config: Базовая конфигурация
|
||||
|
||||
Returns:
|
||||
RateLimitSettings: Адаптированная конфигурация
|
||||
"""
|
||||
if base_config is None:
|
||||
base_config = PRODUCTION_CONFIG
|
||||
|
||||
# Если уровень ошибок высокий, ужесточаем ограничения
|
||||
if current_error_rate > 0.1: # Более 10% ошибок
|
||||
return RateLimitSettings(
|
||||
messages_per_second=base_config.messages_per_second * 0.5,
|
||||
burst_limit=max(1, base_config.burst_limit - 1),
|
||||
retry_after_multiplier=base_config.retry_after_multiplier * 1.5,
|
||||
max_retry_delay=base_config.max_retry_delay * 1.5,
|
||||
max_retries=base_config.max_retries + 1,
|
||||
voice_message_delay=base_config.voice_message_delay * 1.5,
|
||||
media_message_delay=base_config.media_message_delay * 1.3,
|
||||
text_message_delay=base_config.text_message_delay * 1.2
|
||||
)
|
||||
|
||||
# Если уровень ошибок низкий, можно немного ослабить ограничения
|
||||
elif current_error_rate < 0.01: # Менее 1% ошибок
|
||||
return RateLimitSettings(
|
||||
messages_per_second=base_config.messages_per_second * 1.2,
|
||||
burst_limit=base_config.burst_limit + 1,
|
||||
retry_after_multiplier=base_config.retry_after_multiplier * 0.9,
|
||||
max_retry_delay=base_config.max_retry_delay * 0.8,
|
||||
max_retries=max(1, base_config.max_retries - 1),
|
||||
voice_message_delay=base_config.voice_message_delay * 0.8,
|
||||
media_message_delay=base_config.media_message_delay * 0.9,
|
||||
text_message_delay=base_config.text_message_delay * 0.9
|
||||
)
|
||||
|
||||
# Возвращаем базовую конфигурацию
|
||||
return base_config
|
||||
Reference in New Issue
Block a user