From f6c7eb86a2fe30b307d6884bff6ee84f40db9246 Mon Sep 17 00:00:00 2001 From: KimigaiiWuyi <444835641@qq.com> Date: Mon, 18 Nov 2024 02:01:53 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E5=BE=88?= =?UTF-8?q?=E5=A4=9A=E5=85=B3=E4=BA=8E=E7=BD=91=E9=A1=B5=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=8F=B0=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gsuid_core/global_val.py | 23 +++++--- gsuid_core/logger.py | 59 ++++++++++--------- gsuid_core/utils/plugins_update/_plugins.py | 6 +- gsuid_core/version.py | 2 +- gsuid_core/web_app.py | 4 +- .../webconsole/create_analysis_panel.py | 1 - gsuid_core/webconsole/create_log_panel.py | 2 +- gsuid_core/webconsole/html.py | 6 +- gsuid_core/webconsole/mount_app.py | 23 +++++--- 9 files changed, 69 insertions(+), 57 deletions(-) diff --git a/gsuid_core/global_val.py b/gsuid_core/global_val.py index 23999f5..87337fa 100644 --- a/gsuid_core/global_val.py +++ b/gsuid_core/global_val.py @@ -97,19 +97,26 @@ async def get_global_analysis(bot_id: str, bot_self_id: str): out_user = [] new_user = [] - for i in user_list[0]: - if i not in user_before_list: - out_user.append(i) + if user_list: + for i in user_list[0]: + if i not in user_before_list: + out_user.append(i) - for i in user_list[-1]: - if i not in user_after_list: - new_user.append(i) + if user_list: + for i in user_list[-1]: + if i not in user_after_list: + new_user.append(i) _user_all_list = list(set(user_all_list)) + user_num = len(user_data) + group_num = len(group_data) + data = { - 'DAU': '{0:.2f}'.format(sum(user_data) / len(user_data)), - 'DAG': '{0:.2f}'.format(sum(group_data) / len(group_data)), + 'DAU': '{0:.2f}'.format(sum(user_data) / user_num) if user_num else 0, + 'DAG': ( + '{0:.2f}'.format(sum(group_data) / group_num) if group_num else 0 + ), 'NU': str(len(new_user)), 'OU': ( '{0:.2f}%'.format((len(out_user) / len(_user_all_list)) * 100) diff --git a/gsuid_core/logger.py b/gsuid_core/logger.py index c0925e2..4f5bb58 100644 --- a/gsuid_core/logger.py +++ b/gsuid_core/logger.py @@ -2,6 +2,7 @@ import sys import asyncio import logging import datetime +from functools import wraps from typing import TYPE_CHECKING, List import loguru @@ -11,8 +12,6 @@ from gsuid_core.config import core_config from gsuid_core.models import Event, Message from gsuid_core.data_store import get_res_path -is_clear: bool = False -is_RL: bool = False log_history = [] LOG_PATH = get_res_path() / 'logs' @@ -111,21 +110,20 @@ def format_event(record): def std_format_event(record): try: data = format_event(record) - if is_RL: - _data = data.format_map(record) - _data = ( - _data.replace('', '\033[37m') - .replace('', '\033[0m') - .replace('', '\033[34m') - .replace('', '\033[0m') - .replace('', '\033[35m') - .replace('', '\033[0m') - .replace('', '\033[32m') - .replace('', '\033[0m') - .replace('', '') - .replace('', '') - ) - log_history.append(_data.format_map(record)) + _data = ( + data.replace('', '\033[37m') + .replace('', '\033[0m') + .replace('', '\033[34m') + .replace('', '\033[0m') + .replace('', '\033[35m') + .replace('', '\033[0m') + .replace('', '\033[32m') + .replace('', '\033[0m') + .replace('', '') + .replace('', '') + ) + log = _data.format_map(record) + log_history.append(log[:-5]) return data except: # noqa: E722 return 'UnknowLog' @@ -165,25 +163,30 @@ if 'file' in logger_list: async def read_log(): global log_history - global is_RL - is_RL = True index = 0 while True: if index <= len(log_history) - 1: - yield log_history[index] + if log_history[index]: + yield log_history[index] index += 1 else: await asyncio.sleep(1) -async def clear_log(): - global is_clear +async def clean_log(): global log_history + while True: + await asyncio.sleep(480) + log_history = [] - if is_clear: - return - is_clear = True - await asyncio.sleep(18000) - log_history = [] - is_clear = False +def handle_exceptions(async_function): + @wraps(async_function) + async def wrapper(*args, **kwargs): + try: + return await async_function(*args, **kwargs) + except Exception as e: + logger.exception("[错误发生] %s: %s", async_function.__name__, e) + return None + + return wrapper diff --git a/gsuid_core/utils/plugins_update/_plugins.py b/gsuid_core/utils/plugins_update/_plugins.py index fbb665f..2532c3e 100644 --- a/gsuid_core/utils/plugins_update/_plugins.py +++ b/gsuid_core/utils/plugins_update/_plugins.py @@ -523,10 +523,8 @@ async def update_plugins( break for _n in PLUGINS_PATH.iterdir(): - _name = _n.name - sim = len(set(_name.lower()) & set(pn)) - if sim >= 0.9 * len(_name): - plugin_name = _name + if pn == _n.name.lower(): + plugin_name = _n.name break log_list = await update_from_git_in_tread( diff --git a/gsuid_core/version.py b/gsuid_core/version.py index 43c4ab0..22049ab 100644 --- a/gsuid_core/version.py +++ b/gsuid_core/version.py @@ -1 +1 @@ -__version__ = "0.6.1" +__version__ = "0.6.2" diff --git a/gsuid_core/web_app.py b/gsuid_core/web_app.py index a8c747f..e69b316 100644 --- a/gsuid_core/web_app.py +++ b/gsuid_core/web_app.py @@ -18,7 +18,7 @@ from gsuid_core.data_store import image_res from gsuid_core.webconsole.mount_app import site from gsuid_core.segment import Message, MessageSegment from gsuid_core.config import CONFIG_DEFAULT, core_config -from gsuid_core.logger import logger, read_log, clear_log +from gsuid_core.logger import logger, read_log, clean_log from gsuid_core.aps import start_scheduler, shutdown_scheduler from gsuid_core.server import core_start_def, core_shutdown_def from gsuid_core.utils.database.models import CoreUser, CoreGroup @@ -52,6 +52,7 @@ async def lifespan(app: FastAPI): await start_check() # type:ignore await start_scheduler() + asyncio.create_task(clean_log()) yield await shutdown_scheduler() try: @@ -421,7 +422,6 @@ async def get_image(image_id: str, background_tasks: BackgroundTasks): @app.get("/corelogs") async def core_log(): - asyncio.create_task(clear_log()) return StreamingResponse(read_log(), media_type='text/plain') diff --git a/gsuid_core/webconsole/create_analysis_panel.py b/gsuid_core/webconsole/create_analysis_panel.py index 91b0046..349a2ae 100644 --- a/gsuid_core/webconsole/create_analysis_panel.py +++ b/gsuid_core/webconsole/create_analysis_panel.py @@ -54,6 +54,5 @@ async def get_analysis_page(): ], ) ) - page['body'].append(get_tabs(tabs)) return page diff --git a/gsuid_core/webconsole/create_log_panel.py b/gsuid_core/webconsole/create_log_panel.py index b01c98f..a805aee 100644 --- a/gsuid_core/webconsole/create_log_panel.py +++ b/gsuid_core/webconsole/create_log_panel.py @@ -1,6 +1,6 @@ def create_log_page(): return { "type": "log", - "height": 600, + "height": 730, "source": "/corelogs", } diff --git a/gsuid_core/webconsole/html.py b/gsuid_core/webconsole/html.py index 0cbc49c..18e3bcf 100644 --- a/gsuid_core/webconsole/html.py +++ b/gsuid_core/webconsole/html.py @@ -1,6 +1,6 @@ import fastapi_amis_admin -from gsuid_core.version import __version__ as GenshinUID_version +from gsuid_core.version import __version__ as gscore_version web_url = 'https://docs.sayu-bot.com' login_html = f''' @@ -43,9 +43,9 @@ login_html = f''' footer_html = f'''

-

Copyright © 2021 - 2022 +
Copyright © 2021 - 2024 GenshinUID {GenshinUID_version} + class='link-secondary'>GenshinUID {gscore_version} X Page: return Page.parse_obj(await get_analysis_page()) @@ -444,6 +443,7 @@ class CoreManagePage(GsAdminPage): sort=100, ) # type: ignore + @handle_exceptions async def get_page(self, request: Request) -> Page: return Page.parse_obj(get_core_config_page()) @@ -458,6 +458,7 @@ class SVManagePage(GsAdminPage): sort=100, ) # type: ignore + @handle_exceptions async def get_page(self, request: Request) -> Page: return Page.parse_obj(get_sv_page()) @@ -472,6 +473,7 @@ class ConfigManagePage(GsAdminPage): sort=100, ) # type: ignore + @handle_exceptions async def get_page(self, request: Request) -> Page: return Page.parse_obj(get_config_page()) @@ -486,6 +488,7 @@ class PluginsManagePage(GsAdminPage): sort=100, ) # type: ignore + @handle_exceptions async def get_page(self, request: Request) -> Page: return Page.parse_obj(get_tasks_panel()) @@ -500,6 +503,7 @@ class LogsPage(GsAdminPage): sort=100, ) # type: ignore + @handle_exceptions async def get_page(self, request: Request) -> Page: return Page.parse_obj(create_log_page()) @@ -514,6 +518,7 @@ class PushPage(GsAdminPage): sort=100, ) # type: ignore + @handle_exceptions async def get_page(self, request: Request) -> Page: return Page.parse_obj(await get_batch_push_panel())