Merge pull request #93 from izzzzzi/main

Add dry logging
This commit is contained in:
Vladislav Lisitsyn
2024-11-16 18:46:12 +03:00
committed by GitHub
23 changed files with 71 additions and 43 deletions
+1 -1
View File
@@ -3,9 +3,9 @@ import subprocess
from datetime import datetime
from aiogram.types import BufferedInputFile
from loguru import logger
from config import ADMIN_ID, BACK_DIR, DB_NAME, DB_PASSWORD, DB_USER
from logger import logger
async def backup_database():
+2 -2
View File
@@ -1,7 +1,7 @@
import py3xui
from loguru import logger
from config import TOTAL_GB
from logger import logger
async def add_client(
@@ -72,7 +72,7 @@ async def extend_client_key(
client.sub_id = email
client.total_gb = total_gb
client.enable = True
client.limit_ip = 1
client.limit_ip = 1
await xui.client.update(client.id, client)
logger.info(
+1 -1
View File
@@ -1,9 +1,9 @@
from datetime import datetime
import asyncpg
from loguru import logger
from config import BONUS_PERCENT, DATABASE_URL
from logger import logger
async def init_db():
+1 -1
View File
@@ -3,13 +3,13 @@ from aiogram import Router, types
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from loguru import logger
from bot import bot
from config import DATABASE_URL
from database import add_balance_to_client, check_connection_exists
from filters.admin import IsAdminFilter
from handlers.texts import TRIAL
from logger import logger
router = Router()
+1 -1
View File
@@ -3,9 +3,9 @@ from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
from loguru import logger
from database import create_coupon, delete_coupon_from_db, get_all_coupons
from logger import logger
class AdminCouponsState(StatesGroup):
+1 -1
View File
@@ -7,7 +7,6 @@ from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
from loguru import logger
from bot import bot
from config import CLUSTERS, DATABASE_URL, TOTAL_GB
@@ -16,6 +15,7 @@ from filters.admin import IsAdminFilter
from handlers.admin.admin_panel import back_to_admin_menu
from handlers.keys.key_utils import delete_key_from_cluster, renew_key_in_cluster
from handlers.utils import sanitize_key_name
from logger import logger
router = Router()
+1 -1
View File
@@ -6,10 +6,10 @@ from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
from loguru import logger
from config import DATABASE_URL
from database import update_balance
from logger import logger
class CouponActivationState(StatesGroup):
+1 -1
View File
@@ -3,10 +3,10 @@ from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery
from aiogram.utils.keyboard import InlineKeyboardBuilder
from loguru import logger
from bot import bot
from config import RUB_TO_XTR
from logger import logger
class DonateState(StatesGroup):
+1 -1
View File
@@ -2,11 +2,11 @@ import os
from aiogram import F, Router, types
from aiogram.types import BufferedInputFile, InlineKeyboardButton, InlineKeyboardMarkup
from loguru import logger
from bot import bot
from config import CONNECT_WINDOWS, SUPPORT_CHAT_URL
from handlers.texts import INSTRUCTION_PC, INSTRUCTIONS, KEY_MESSAGE
from logger import logger
router = Router()
+1 -1
View File
@@ -7,7 +7,6 @@ from aiogram import F, Router
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup, Message
from loguru import logger
from bot import bot, dp
from config import CONNECT_ANDROID, CONNECT_IOS, DATABASE_URL, DOWNLOAD_ANDROID, DOWNLOAD_IOS, PUBLIC_LINK
@@ -17,6 +16,7 @@ from handlers.keys.key_utils import create_key_on_cluster
from handlers.profile import process_callback_view_profile
from handlers.texts import KEY, KEY_TRIAL, NULL_BALANCE, RENEWAL_PLANS, key_message_success
from handlers.utils import get_least_loaded_cluster, sanitize_key_name
from logger import logger
router = Router()
+1 -1
View File
@@ -1,11 +1,11 @@
import asyncio
import asyncpg
from loguru import logger
from py3xui import AsyncApi
from client import add_client, delete_client, extend_client_key
from config import ADMIN_PASSWORD, ADMIN_USERNAME, CLUSTERS, DATABASE_URL, TOTAL_GB
from logger import logger
async def create_key_on_cluster(cluster_id, tg_id, client_id, email, expiry_timestamp):
+1 -1
View File
@@ -6,7 +6,6 @@ from datetime import datetime, timedelta
import asyncpg
from aiogram import F, Router, types
from aiogram.types import BufferedInputFile
from loguru import logger
from bot import bot
from config import CLUSTERS, CONNECT_ANDROID, CONNECT_IOS, DATABASE_URL, DOWNLOAD_ANDROID, DOWNLOAD_IOS, PUBLIC_LINK, TOTAL_GB
@@ -14,6 +13,7 @@ from database import delete_key, get_balance, store_key, update_balance, update_
from handlers.keys.key_utils import delete_key_from_cluster, delete_key_from_db, renew_key_in_cluster, update_key_on_cluster
from handlers.texts import INSUFFICIENT_FUNDS_MSG, KEY_NOT_FOUND_MSG, NO_KEYS, PLAN_SELECTION_MSG, RENEWAL_PLANS, SUCCESS_RENEWAL_MSG, key_message
from handlers.utils import get_least_loaded_cluster, handle_error
from logger import logger
locale.setlocale(locale.LC_TIME, "ru_RU.UTF-8")
+1 -1
View File
@@ -2,9 +2,9 @@ import base64
import aiohttp
from aiohttp import web
from loguru import logger
from config import CLUSTERS
from logger import logger
async def fetch_url_content(url):
+1 -1
View File
@@ -3,7 +3,6 @@ from datetime import datetime, timedelta
import asyncpg
from aiogram import Bot, Router, types
from loguru import logger
from py3xui import AsyncApi
from client import delete_client
@@ -11,6 +10,7 @@ from config import ADMIN_PASSWORD, ADMIN_USERNAME, CLUSTERS, DATABASE_URL, TOTAL
from database import delete_key, get_balance, update_balance, update_key_expiry
from handlers.keys.key_utils import renew_key_in_cluster
from handlers.texts import KEY_EXPIRY_10H, KEY_EXPIRY_24H, KEY_RENEWED, RENEWAL_PLANS
from logger import logger
router = Router()
+1 -1
View File
@@ -5,12 +5,12 @@ from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiohttp import web
from loguru import logger
from bot import bot
from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN, RUB_TO_USDT
from database import add_connection, check_connection_exists, get_key_count, update_balance
from handlers.texts import PAYMENT_OPTIONS
from logger import logger
router = Router()
+1 -1
View File
@@ -7,12 +7,12 @@ from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiohttp import web
from loguru import logger
from bot import bot
from config import ROBOKASSA_LOGIN, ROBOKASSA_PASSWORD1, ROBOKASSA_PASSWORD2, ROBOKASSA_TEST_MODE
from database import add_connection, check_connection_exists, get_key_count, update_balance
from handlers.texts import PAYMENT_OPTIONS
from logger import logger
router = Router()
+1 -1
View File
@@ -3,12 +3,12 @@ from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery
from aiogram.utils.keyboard import InlineKeyboardBuilder
from loguru import logger
from bot import bot
from config import RUB_TO_XTR
from database import add_connection, check_connection_exists, get_key_count, update_balance
from handlers.texts import PAYMENT_OPTIONS
from logger import logger
router = Router()
+1 -1
View File
@@ -6,13 +6,13 @@ from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiohttp import web
from loguru import logger
from yookassa import Configuration, Payment
from bot import bot
from config import YOOKASSA_ENABLE, YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID
from database import add_connection, check_connection_exists, get_key_count, update_balance
from handlers.texts import PAYMENT_OPTIONS
from logger import logger
router = Router()
+1 -1
View File
@@ -4,12 +4,12 @@ from aiogram import F, Router, types
from aiogram.fsm.context import FSMContext
from aiogram.types import BufferedInputFile, InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
from loguru import logger
from bot import bot
from config import CHANNEL_URL
from database import get_balance, get_key_count, get_referral_stats
from handlers.texts import get_referral_link, invite_message_send, profile_message_send
from logger import logger
router = Router()
+1 -1
View File
@@ -4,13 +4,13 @@ from aiogram import F, Router
from aiogram.filters import Command
from aiogram.types import BufferedInputFile, CallbackQuery, InlineKeyboardButton, Message
from aiogram.utils.keyboard import InlineKeyboardBuilder
from loguru import logger
from bot import bot
from config import CHANNEL_URL, CONNECT_ANDROID, CONNECT_IOS, DOWNLOAD_ANDROID, DOWNLOAD_IOS, SUPPORT_CHAT_URL
from database import add_connection, add_referral, check_connection_exists, get_trial
from handlers.keys.trial_key import create_trial_key
from handlers.texts import INSTRUCTIONS_TRIAL, WELCOME_TEXT, get_about_vpn
from logger import logger
router = Router()
+1 -1
View File
@@ -2,10 +2,10 @@ import random
import re
import asyncpg
from loguru import logger
from bot import bot
from config import CLUSTERS, DATABASE_URL
from logger import logger
def sanitize_key_name(key_name: str) -> str:
+47
View File
@@ -0,0 +1,47 @@
import logging
import sys
from loguru import logger
logger.remove()
level_mapping = {
50: "CRITICAL",
40: "ERROR",
30: "WARNING",
20: "INFO",
10: "DEBUG",
0: "NOTSET",
}
class InterceptHandler(logging.Handler):
def emit(self, record):
logger_opt = logger.opt(depth=6, exception=record.exc_info)
message = record.getMessage()
logger_opt.log(level_mapping.get(record.levelno, "INFO"), message)
logging.basicConfig(handlers=[InterceptHandler()], level=0)
logging.getLogger("httpcore").setLevel(logging.WARNING)
logging.getLogger("httpx").setLevel(logging.WARNING)
# Настройка вывода в консоль
logger.add(
sys.stderr,
level="INFO",
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level}</level> | <cyan>{module}:{function}:{line}</cyan> | <level>{message}</level>",
colorize=True,
)
# Настройка записи в файл
logger.add(
"logging.log",
level="DEBUG",
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} | {message}",
rotation="60 minute",
retention=24,
)
logger = logger
+2 -21
View File
@@ -1,9 +1,9 @@
import logging
from typing import Any, Awaitable, Callable, Dict
from aiogram import BaseMiddleware
from aiogram.types import CallbackQuery, Message, TelegramObject
from loguru import logger
from logger import logger
class LoggingMiddleware(BaseMiddleware):
@@ -32,23 +32,4 @@ class LoggingMiddleware(BaseMiddleware):
f"Имя пользователя: {username}, "
f"Действие: {action}"
)
return await handler(event, data)
class InterceptHandler(logging.Handler):
def emit(self, record):
try:
level = logger.level(record.levelname).name
except ValueError:
level = "INFO"
logger.log(level, record.getMessage())
logging.basicConfig(handlers=[InterceptHandler()], level=0)
logging.getLogger("httpcore").setLevel(logging.WARNING)
logging.getLogger("httpx").setLevel(logging.WARNING)
logger.add("logs/app.log", level="INFO", rotation="10 MB", compression="zip")