🐛 修复很多关于网页控制台的错误

This commit is contained in:
KimigaiiWuyi 2024-11-18 02:01:53 +08:00
parent 09d07aff1f
commit f6c7eb86a2
9 changed files with 69 additions and 57 deletions

View File

@ -97,19 +97,26 @@ async def get_global_analysis(bot_id: str, bot_self_id: str):
out_user = [] out_user = []
new_user = [] new_user = []
for i in user_list[0]: if user_list:
if i not in user_before_list: for i in user_list[0]:
out_user.append(i) if i not in user_before_list:
out_user.append(i)
for i in user_list[-1]: if user_list:
if i not in user_after_list: for i in user_list[-1]:
new_user.append(i) if i not in user_after_list:
new_user.append(i)
_user_all_list = list(set(user_all_list)) _user_all_list = list(set(user_all_list))
user_num = len(user_data)
group_num = len(group_data)
data = { data = {
'DAU': '{0:.2f}'.format(sum(user_data) / len(user_data)), 'DAU': '{0:.2f}'.format(sum(user_data) / user_num) if user_num else 0,
'DAG': '{0:.2f}'.format(sum(group_data) / len(group_data)), 'DAG': (
'{0:.2f}'.format(sum(group_data) / group_num) if group_num else 0
),
'NU': str(len(new_user)), 'NU': str(len(new_user)),
'OU': ( 'OU': (
'{0:.2f}%'.format((len(out_user) / len(_user_all_list)) * 100) '{0:.2f}%'.format((len(out_user) / len(_user_all_list)) * 100)

View File

@ -2,6 +2,7 @@ import sys
import asyncio import asyncio
import logging import logging
import datetime import datetime
from functools import wraps
from typing import TYPE_CHECKING, List from typing import TYPE_CHECKING, List
import loguru import loguru
@ -11,8 +12,6 @@ from gsuid_core.config import core_config
from gsuid_core.models import Event, Message from gsuid_core.models import Event, Message
from gsuid_core.data_store import get_res_path from gsuid_core.data_store import get_res_path
is_clear: bool = False
is_RL: bool = False
log_history = [] log_history = []
LOG_PATH = get_res_path() / 'logs' LOG_PATH = get_res_path() / 'logs'
@ -111,21 +110,20 @@ def format_event(record):
def std_format_event(record): def std_format_event(record):
try: try:
data = format_event(record) data = format_event(record)
if is_RL: _data = (
_data = data.format_map(record) data.replace('<g>', '\033[37m')
_data = ( .replace('</g>', '\033[0m')
_data.replace('<g>', '\033[37m') .replace('<c><u>', '\033[34m')
.replace('</g>', '\033[0m') .replace('</u></c>', '\033[0m')
.replace('<c><u>', '\033[34m') .replace('<m><b>', '\033[35m')
.replace('</u></c>', '\033[0m') .replace('</b></m>', '\033[0m')
.replace('<m><b>', '\033[35m') .replace('<c><b>', '\033[32m')
.replace('</b></m>', '\033[0m') .replace('</b></c>', '\033[0m')
.replace('<c><b>', '\033[32m') .replace('<lvl>', '')
.replace('</b></c>', '\033[0m') .replace('</lvl>', '')
.replace('<lvl>', '') )
.replace('</lvl>', '') log = _data.format_map(record)
) log_history.append(log[:-5])
log_history.append(_data.format_map(record))
return data return data
except: # noqa: E722 except: # noqa: E722
return 'UnknowLog' return 'UnknowLog'
@ -165,25 +163,30 @@ if 'file' in logger_list:
async def read_log(): async def read_log():
global log_history global log_history
global is_RL
is_RL = True
index = 0 index = 0
while True: while True:
if index <= len(log_history) - 1: if index <= len(log_history) - 1:
yield log_history[index] if log_history[index]:
yield log_history[index]
index += 1 index += 1
else: else:
await asyncio.sleep(1) await asyncio.sleep(1)
async def clear_log(): async def clean_log():
global is_clear
global log_history global log_history
while True:
await asyncio.sleep(480)
log_history = []
if is_clear:
return
is_clear = True def handle_exceptions(async_function):
await asyncio.sleep(18000) @wraps(async_function)
log_history = [] async def wrapper(*args, **kwargs):
is_clear = False try:
return await async_function(*args, **kwargs)
except Exception as e:
logger.exception("[错误发生] %s: %s", async_function.__name__, e)
return None
return wrapper

View File

@ -523,10 +523,8 @@ async def update_plugins(
break break
for _n in PLUGINS_PATH.iterdir(): for _n in PLUGINS_PATH.iterdir():
_name = _n.name if pn == _n.name.lower():
sim = len(set(_name.lower()) & set(pn)) plugin_name = _n.name
if sim >= 0.9 * len(_name):
plugin_name = _name
break break
log_list = await update_from_git_in_tread( log_list = await update_from_git_in_tread(

View File

@ -1 +1 @@
__version__ = "0.6.1" __version__ = "0.6.2"

View File

@ -18,7 +18,7 @@ from gsuid_core.data_store import image_res
from gsuid_core.webconsole.mount_app import site from gsuid_core.webconsole.mount_app import site
from gsuid_core.segment import Message, MessageSegment from gsuid_core.segment import Message, MessageSegment
from gsuid_core.config import CONFIG_DEFAULT, core_config 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.aps import start_scheduler, shutdown_scheduler
from gsuid_core.server import core_start_def, core_shutdown_def from gsuid_core.server import core_start_def, core_shutdown_def
from gsuid_core.utils.database.models import CoreUser, CoreGroup 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_check() # type:ignore
await start_scheduler() await start_scheduler()
asyncio.create_task(clean_log())
yield yield
await shutdown_scheduler() await shutdown_scheduler()
try: try:
@ -421,7 +422,6 @@ async def get_image(image_id: str, background_tasks: BackgroundTasks):
@app.get("/corelogs") @app.get("/corelogs")
async def core_log(): async def core_log():
asyncio.create_task(clear_log())
return StreamingResponse(read_log(), media_type='text/plain') return StreamingResponse(read_log(), media_type='text/plain')

View File

@ -54,6 +54,5 @@ async def get_analysis_page():
], ],
) )
) )
page['body'].append(get_tabs(tabs)) page['body'].append(get_tabs(tabs))
return page return page

View File

@ -1,6 +1,6 @@
def create_log_page(): def create_log_page():
return { return {
"type": "log", "type": "log",
"height": 600, "height": 730,
"source": "/corelogs", "source": "/corelogs",
} }

View File

@ -1,6 +1,6 @@
import fastapi_amis_admin 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' web_url = 'https://docs.sayu-bot.com'
login_html = f''' login_html = f'''
@ -43,9 +43,9 @@ login_html = f'''
footer_html = f''' footer_html = f'''
<p align='right'> <p align='right'>
<div class='p-2 text-center bg-light'>Copyright © 2021 - 2022 <div class='p-2 text-center bg-light'>Copyright © 2021 - 2024
<a href='https://github.com/KimigaiiWuyi/GenshinUID' target='_blank' <a href='https://github.com/KimigaiiWuyi/GenshinUID' target='_blank'
class='link-secondary'>GenshinUID {GenshinUID_version} class='link-secondary'>GenshinUID {gscore_version}
</a> </a>
X X
<a target='_blank' <a target='_blank'

View File

@ -38,12 +38,12 @@ from fastapi_amis_admin.amis.components import (
ButtonToolbar, ButtonToolbar,
) )
from gsuid_core.logger import logger from gsuid_core.logger import logger, handle_exceptions
from gsuid_core.utils.database.base_models import db_url from gsuid_core.utils.database.base_models import db_url
from gsuid_core.utils.cookie_manager.add_ck import _deal_ck from gsuid_core.utils.cookie_manager.add_ck import _deal_ck
from gsuid_core.version import __version__ as gscore_version
from gsuid_core.webconsole.html import gsuid_webconsole_help from gsuid_core.webconsole.html import gsuid_webconsole_help
from gsuid_core.webconsole.create_sv_panel import get_sv_page from gsuid_core.webconsole.create_sv_panel import get_sv_page
from gsuid_core.version import __version__ as GenshinUID_version
from gsuid_core.webconsole.create_log_panel import create_log_page from gsuid_core.webconsole.create_log_panel import create_log_page
from gsuid_core.webconsole.create_task_panel import get_tasks_panel from gsuid_core.webconsole.create_task_panel import get_tasks_panel
from gsuid_core.webconsole.create_config_panel import get_config_page from gsuid_core.webconsole.create_config_panel import get_config_page
@ -301,14 +301,12 @@ class UserBindFormAdmin(GsNormalForm):
im = await _deal_ck(data.bot_id, data.cookie, data.user_id) im = await _deal_ck(data.bot_id, data.cookie, data.user_id)
except Exception as e: except Exception as e:
logger.warning(e) logger.warning(e)
return BaseApiOut( return BaseApiOut(status=-1, msg='你输入的CK可能已经失效/或者该用户ID未绑定UID') # type: ignore
status=-1, msg='你输入的CK可能已经失效/或者该用户ID未绑定UID'
)
ok_num = im.count('成功') ok_num = im.count('成功')
if ok_num < 1: if ok_num < 1:
return BaseApiOut(status=-1, msg=im) return BaseApiOut(status=-1, msg=im) # type: ignore
else: else:
return BaseApiOut(msg=im) return BaseApiOut(msg=im) # type: ignore
class GsAdminModel(admin.ModelAdmin): class GsAdminModel(admin.ModelAdmin):
@ -397,14 +395,14 @@ class MyHomeAdmin(admin.HomeAdmin):
), ),
amis.Divider(), amis.Divider(),
Property( Property(
title='GenshinUID Info', title='早柚核心 信息',
column=4, column=4,
items=[ items=[
Property.Item(label='system', content=platform.system()), Property.Item(label='system', content=platform.system()),
Property.Item( Property.Item(
label='python', content=platform.python_version() label='python', content=platform.python_version()
), ),
Property.Item(label='version', content=GenshinUID_version), Property.Item(label='version', content=gscore_version),
Property.Item(label='license', content='GPLv3'), Property.Item(label='license', content='GPLv3'),
], ],
), ),
@ -430,6 +428,7 @@ class AnalysisPage(GsAdminPage):
sort=100, sort=100,
) # type: ignore ) # type: ignore
@handle_exceptions
async def get_page(self, request: Request) -> Page: async def get_page(self, request: Request) -> Page:
return Page.parse_obj(await get_analysis_page()) return Page.parse_obj(await get_analysis_page())
@ -444,6 +443,7 @@ class CoreManagePage(GsAdminPage):
sort=100, sort=100,
) # type: ignore ) # type: ignore
@handle_exceptions
async def get_page(self, request: Request) -> Page: async def get_page(self, request: Request) -> Page:
return Page.parse_obj(get_core_config_page()) return Page.parse_obj(get_core_config_page())
@ -458,6 +458,7 @@ class SVManagePage(GsAdminPage):
sort=100, sort=100,
) # type: ignore ) # type: ignore
@handle_exceptions
async def get_page(self, request: Request) -> Page: async def get_page(self, request: Request) -> Page:
return Page.parse_obj(get_sv_page()) return Page.parse_obj(get_sv_page())
@ -472,6 +473,7 @@ class ConfigManagePage(GsAdminPage):
sort=100, sort=100,
) # type: ignore ) # type: ignore
@handle_exceptions
async def get_page(self, request: Request) -> Page: async def get_page(self, request: Request) -> Page:
return Page.parse_obj(get_config_page()) return Page.parse_obj(get_config_page())
@ -486,6 +488,7 @@ class PluginsManagePage(GsAdminPage):
sort=100, sort=100,
) # type: ignore ) # type: ignore
@handle_exceptions
async def get_page(self, request: Request) -> Page: async def get_page(self, request: Request) -> Page:
return Page.parse_obj(get_tasks_panel()) return Page.parse_obj(get_tasks_panel())
@ -500,6 +503,7 @@ class LogsPage(GsAdminPage):
sort=100, sort=100,
) # type: ignore ) # type: ignore
@handle_exceptions
async def get_page(self, request: Request) -> Page: async def get_page(self, request: Request) -> Page:
return Page.parse_obj(create_log_page()) return Page.parse_obj(create_log_page())
@ -514,6 +518,7 @@ class PushPage(GsAdminPage):
sort=100, sort=100,
) # type: ignore ) # type: ignore
@handle_exceptions
async def get_page(self, request: Request) -> Page: async def get_page(self, request: Request) -> Page:
return Page.parse_obj(await get_batch_push_panel()) return Page.parse_obj(await get_batch_push_panel())