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())