Refactor Docker and configuration files for improved structure and functionality
- Updated `.dockerignore` to include additional development and temporary files, enhancing build efficiency. - Modified `.gitignore` to remove unnecessary entries and streamline ignored files. - Enhanced `docker-compose.yml` with health checks, resource limits, and improved environment variable handling for better service management. - Refactored `Dockerfile.bot` to utilize a multi-stage build for optimized image size and security. - Improved `Makefile` with new commands for deployment, migration, and backup, along with enhanced help documentation. - Updated `requirements.txt` to include new dependencies for environment variable management. - Refactored metrics handling in the bot to ensure proper initialization and collection.
This commit is contained in:
@@ -1,33 +1,61 @@
|
||||
import configparser
|
||||
import os
|
||||
import sys
|
||||
from dotenv import load_dotenv
|
||||
|
||||
from database.db import BotDB
|
||||
|
||||
current_dir = os.getcwd()
|
||||
|
||||
|
||||
class BaseDependencyFactory:
|
||||
def __init__(self):
|
||||
# Загрузка настроек из settings.ini
|
||||
config_path = os.path.join(sys.path[0], 'settings.ini')
|
||||
self.config = configparser.ConfigParser()
|
||||
self.config.read(config_path)
|
||||
self.settings = {}
|
||||
# Используем абсолютный путь к директории проекта
|
||||
project_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
self.database = BotDB(project_dir, 'tg-bot-database.db')
|
||||
env_path = os.path.join(project_dir, '.env')
|
||||
if os.path.exists(env_path):
|
||||
load_dotenv(env_path)
|
||||
|
||||
for section in self.config.sections():
|
||||
self.settings[section] = {}
|
||||
for key in self.config[section]:
|
||||
# Преобразование значений в соответствующий тип
|
||||
if key == 'PREVIEW_LINK':
|
||||
self.settings[section][key] = self.config.getboolean(section, key)
|
||||
elif key == 'LOGS' or key == 'TEST':
|
||||
self.settings[section][key] = self.config.getboolean(section, key)
|
||||
else:
|
||||
self.settings[section][key] = self.config.get(section, key)
|
||||
self.settings = {}
|
||||
|
||||
database_path = os.getenv('DATABASE_PATH', 'database/tg-bot-database.db')
|
||||
if not os.path.isabs(database_path):
|
||||
database_path = os.path.join(project_dir, database_path)
|
||||
|
||||
database_dir = project_dir
|
||||
database_name = database_path.replace(project_dir + '/', '')
|
||||
|
||||
self.database = BotDB(database_dir, database_name)
|
||||
|
||||
self._load_settings_from_env()
|
||||
|
||||
def _load_settings_from_env(self):
|
||||
"""Загружает настройки из переменных окружения."""
|
||||
self.settings['Telegram'] = {
|
||||
'bot_token': os.getenv('BOT_TOKEN', ''),
|
||||
'listen_bot_token': os.getenv('LISTEN_BOT_TOKEN', ''),
|
||||
'test_bot_token': os.getenv('TEST_BOT_TOKEN', ''),
|
||||
'preview_link': self._parse_bool(os.getenv('PREVIEW_LINK', 'false')),
|
||||
'main_public': os.getenv('MAIN_PUBLIC', ''),
|
||||
'group_for_posts': self._parse_int(os.getenv('GROUP_FOR_POSTS', '0')),
|
||||
'group_for_message': self._parse_int(os.getenv('GROUP_FOR_MESSAGE', '0')),
|
||||
'group_for_logs': self._parse_int(os.getenv('GROUP_FOR_LOGS', '0')),
|
||||
'important_logs': self._parse_int(os.getenv('IMPORTANT_LOGS', '0')),
|
||||
'archive': self._parse_int(os.getenv('ARCHIVE', '0')),
|
||||
'test_group': self._parse_int(os.getenv('TEST_GROUP', '0'))
|
||||
}
|
||||
|
||||
self.settings['Settings'] = {
|
||||
'logs': self._parse_bool(os.getenv('LOGS', 'false')),
|
||||
'test': self._parse_bool(os.getenv('TEST', 'false'))
|
||||
}
|
||||
|
||||
def _parse_bool(self, value: str) -> bool:
|
||||
"""Парсит строковое значение в boolean."""
|
||||
return value.lower() in ('true', '1', 'yes', 'on')
|
||||
|
||||
def _parse_int(self, value: str) -> int:
|
||||
"""Парсит строковое значение в integer."""
|
||||
try:
|
||||
return int(value)
|
||||
except (ValueError, TypeError):
|
||||
return 0
|
||||
|
||||
def get_settings(self):
|
||||
return self.settings
|
||||
@@ -37,7 +65,6 @@ class BaseDependencyFactory:
|
||||
return self.database
|
||||
|
||||
|
||||
# Создаем единый экземпляр для всего приложения
|
||||
_global_instance = None
|
||||
|
||||
def get_global_instance():
|
||||
|
||||
Reference in New Issue
Block a user