This repository was archived by the owner on Mar 22, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathloader.py
More file actions
72 lines (57 loc) · 2.5 KB
/
loader.py
File metadata and controls
72 lines (57 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import logging
import time
from pathlib import Path
from threading import Thread
from peewee import SqliteDatabase
from decouple import config
from pyrogram import Client
from prometheus_client import start_http_server
from utils.monitoring import initialize_metrics, update_database_metrics
# Получение конфигурационных переменных из .env файла
API_TOKEN = config("API_TOKEN")
API_ID = config("API_ID")
API_HASH = config("API_HASH")
ADMIN_CHAT_ID = int(config("ADMIN_CHAT_ID"))
DIR = Path(__file__).absolute().parent
# Настройка логгирования
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler(f"{DIR}/logs.log"),
logging.StreamHandler(),
],
)
logger = logging.getLogger(__name__)
# Создание экземпляра бота и диспетчера для обработки сообщений
app = Client("bot", api_hash=API_HASH, api_id=API_ID, bot_token=API_TOKEN)
# Инициализация экземпляра базы данных
database = SqliteDatabase(
"database.sqlite3",
pragmas={"foreign_keys": 1},
)
# Запуск Prometheus
def start_metrics_server():
start_http_server(8001)
def update_metrics_periodically():
"""Периодически обновляет метрики из БД"""
time.sleep(2) # Ждем инициализации БД
while True:
try:
update_database_metrics()
time.sleep(60) # Обновляем каждую минуту
except Exception as e:
logger.error(f"Ошибка в потоке обновления метрик: {e}")
time.sleep(60)
metrics_thread = Thread(target=start_metrics_server, daemon=True)
metrics_thread.start()
# Поток для периодического обновления метрик из БД
metrics_update_thread = Thread(
target=update_metrics_periodically, daemon=True)
metrics_update_thread.start()
# Инициализируем метрики с нулевыми значениями после запуска сервера
# Это нужно, чтобы метрики были видны в Prometheus даже до первого использования
time.sleep(0.5) # Небольшая задержка для запуска сервера
initialize_metrics()
time.sleep(1) # Дополнительная задержка для БД
update_database_metrics()