-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot_logging.py
More file actions
96 lines (86 loc) · 3.51 KB
/
bot_logging.py
File metadata and controls
96 lines (86 loc) · 3.51 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import logging
import sqlite3
from datetime import datetime
import telebot
import var
# ===== Конфигурация =====
TELEGRAM_BOT_TOKEN = var.TOKEN
LOG_CHAT_ID = var.LOG_GROUP_ID
DB_PATH = var.DB_PATH
# Создаем телеграм-бота
bot = telebot.TeleBot(TELEGRAM_BOT_TOKEN)
# Настроим логгер локально (для внутренних логов функции)
logger = logging.getLogger('db_logger')
logger.setLevel(logging.INFO)
logger_handler = logging.StreamHandler() # можно убрать, если нужна только телеграм-вывод
logger.addHandler(logger_handler)
# ===== Функция логирования в Telegram =====
def log_to_telegram(message: str):
"""
Отправляет сообщение в указанный чат/канал Telegram.
"""
try:
bot.send_message(LOG_CHAT_ID, message)
except Exception as e:
# Фоновая обработка ошибок отправки лога
logger.error(f"Failed to send log to Telegram: {e}")
# ===== Контекстная обвязка работы с SQLite =====
def run_query_and_log(sql_query: str, params: tuple = ()):
"""
Выполняет SQL-запрос к sqlite3, возвращает результат и отправляет лог
о соединении и выполнении запроса в Telegram.
"""
conn = sqlite3.connect('user_list.sql')
cursor = None
start_time = datetime.utcnow()
try:
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute(sql_query, params)
# Если это SELECT, вернем результат
if sql_query.strip().lower().startswith('select'):
rows = cursor.fetchall()
rowcount = len(rows)
else:
conn.commit()
rows = []
rowcount = cursor.rowcount
duration = (datetime.utcnow() - start_time).total_seconds()
# Лог об успешном выполнении
log_message = (
f"DB_LOG | time={start_time.isoformat()}Z | "
f"query='{sql_query}' | params={params} | "
f"rows={rowcount} | duration={duration:.3f}s"
)
log_to_telegram(log_message)
return rows
except Exception as e:
duration = (datetime.utcnow() - start_time).total_seconds()
log_message = (
f"DB_LOG_ERROR | time={start_time.isoformat()}Z | "
f"query='{sql_query}' | params={params} | "
f"error={e} | duration={duration:.3f}s"
)
log_to_telegram(log_message)
raise
finally:
try:
if cursor:
cursor.close()
except Exception:
pass
try:
if conn:
conn.close()
except Exception:
pass
# ===== Пример использования =====
"""if __name__ == '__main__':
# Пример: создание таблицы
run_query_and_log("CREATE TABLE IF NOT EXISTS logs_example (id INTEGER PRIMARY KEY AUTOINCREMENT, message TEXT NOT NULL, ts DATETIME DEFAULT CURRENT_TIMESTAMP)")
# Пример: вставка
run_query_and_log("INSERT INTO logs_example (message) VALUES (?)", ("Пример сообщения",))
# Пример: выборка
rows = run_query_and_log("SELECT * FROM logs_example")
print("Query rows:", rows)
"""