mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-06-05 15:09:47 +08:00
🐛 修复很多关于网页控制台的错误
This commit is contained in:
parent
09d07aff1f
commit
f6c7eb86a2
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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(
|
||||||
|
@ -1 +1 @@
|
|||||||
__version__ = "0.6.1"
|
__version__ = "0.6.2"
|
||||||
|
@ -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')
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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",
|
||||||
}
|
}
|
||||||
|
@ -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'
|
||||||
|
@ -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())
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user