mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
feat:远程交互刷新数据时发送统计消息
This commit is contained in:
@@ -54,6 +54,11 @@ class CommandChain(ChainBase, metaclass=Singleton):
|
|||||||
"description": "更新站点Cookie",
|
"description": "更新站点Cookie",
|
||||||
"data": {}
|
"data": {}
|
||||||
},
|
},
|
||||||
|
"/site_statistic": {
|
||||||
|
"func": SiteChain().remote_refresh_userdatas,
|
||||||
|
"description": "站点数据统计",
|
||||||
|
"data": {}
|
||||||
|
},
|
||||||
"/site_enable": {
|
"/site_enable": {
|
||||||
"func": SiteChain().remote_enable,
|
"func": SiteChain().remote_enable,
|
||||||
"description": "启用站点",
|
"description": "启用站点",
|
||||||
@@ -402,7 +407,7 @@ class CommandChain(ChainBase, metaclass=Singleton):
|
|||||||
channel=event_channel, source=event_source, userid=event_user)
|
channel=event_channel, source=event_source, userid=event_user)
|
||||||
|
|
||||||
@eventmanager.register(EventType.ModuleReload)
|
@eventmanager.register(EventType.ModuleReload)
|
||||||
def module_reload_event(self, event: ManagerEvent) -> None:
|
def module_reload_event(self, _: ManagerEvent) -> None:
|
||||||
"""
|
"""
|
||||||
注册模块重载事件
|
注册模块重载事件
|
||||||
"""
|
"""
|
||||||
|
|||||||
+75
-2
@@ -1,7 +1,7 @@
|
|||||||
import base64
|
import base64
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional, Tuple, Union
|
from typing import Optional, Tuple, Union, Dict
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
|
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
@@ -86,14 +86,22 @@ class SiteChain(ChainBase):
|
|||||||
f"{userdata.message_unread} 条新消息,请登陆查看",
|
f"{userdata.message_unread} 条新消息,请登陆查看",
|
||||||
link=site.get("url")
|
link=site.get("url")
|
||||||
))
|
))
|
||||||
|
# 低分享率警告
|
||||||
|
if userdata.ratio and float(userdata.ratio) < 1:
|
||||||
|
self.post_message(Notification(
|
||||||
|
mtype=NotificationType.SiteMessage,
|
||||||
|
title=f"【站点分享率低预警】",
|
||||||
|
text=f"站点 {site.get('name')} 分享率 {userdata.ratio},请注意!"
|
||||||
|
))
|
||||||
return userdata
|
return userdata
|
||||||
|
|
||||||
def refresh_userdatas(self) -> None:
|
def refresh_userdatas(self) -> Dict[str, SiteUserData]:
|
||||||
"""
|
"""
|
||||||
刷新所有站点的用户数据
|
刷新所有站点的用户数据
|
||||||
"""
|
"""
|
||||||
sites = self.siteshelper.get_indexers()
|
sites = self.siteshelper.get_indexers()
|
||||||
any_site_updated = False
|
any_site_updated = False
|
||||||
|
result = {}
|
||||||
for site in sites:
|
for site in sites:
|
||||||
if global_vars.is_system_stopped:
|
if global_vars.is_system_stopped:
|
||||||
return
|
return
|
||||||
@@ -101,10 +109,12 @@ class SiteChain(ChainBase):
|
|||||||
userdata = self.refresh_userdata(site)
|
userdata = self.refresh_userdata(site)
|
||||||
if userdata:
|
if userdata:
|
||||||
any_site_updated = True
|
any_site_updated = True
|
||||||
|
result[site.get("name")] = userdata
|
||||||
if any_site_updated:
|
if any_site_updated:
|
||||||
EventManager().send_event(EventType.SiteRefreshed, {
|
EventManager().send_event(EventType.SiteRefreshed, {
|
||||||
"site_id": "*"
|
"site_id": "*"
|
||||||
})
|
})
|
||||||
|
return result
|
||||||
|
|
||||||
def is_special_site(self, domain: str) -> bool:
|
def is_special_site(self, domain: str) -> bool:
|
||||||
"""
|
"""
|
||||||
@@ -705,3 +715,66 @@ class SiteChain(ChainBase):
|
|||||||
source=source,
|
source=source,
|
||||||
title=f"【{site_info.name}】 Cookie&UA更新成功",
|
title=f"【{site_info.name}】 Cookie&UA更新成功",
|
||||||
userid=userid))
|
userid=userid))
|
||||||
|
|
||||||
|
def remote_refresh_userdatas(self, channel: MessageChannel,
|
||||||
|
userid: Union[str, int] = None, source: str = None):
|
||||||
|
"""
|
||||||
|
刷新所有站点用户数据
|
||||||
|
"""
|
||||||
|
logger.info("收到命令,开始刷新站点数据 ...")
|
||||||
|
self.post_message(Notification(
|
||||||
|
channel=channel,
|
||||||
|
source=source,
|
||||||
|
title="开始刷新站点数据 ...",
|
||||||
|
userid=userid
|
||||||
|
))
|
||||||
|
# 刷新站点数据
|
||||||
|
site_datas = self.refresh_userdatas()
|
||||||
|
if site_datas:
|
||||||
|
# 发送消息
|
||||||
|
messages = {}
|
||||||
|
# 总上传
|
||||||
|
incUploads = 0
|
||||||
|
# 总下载
|
||||||
|
incDownloads = 0
|
||||||
|
# 今天日期
|
||||||
|
today_date = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
for rand, site in enumerate(site_datas.keys()):
|
||||||
|
upload = int(site_datas[site].upload or 0)
|
||||||
|
download = int(site_datas[site].download or 0)
|
||||||
|
updated_date = site_datas[site].updated_day
|
||||||
|
if updated_date and updated_date != today_date:
|
||||||
|
updated_date = f"({updated_date})"
|
||||||
|
else:
|
||||||
|
updated_date = ""
|
||||||
|
|
||||||
|
if upload > 0 or download > 0:
|
||||||
|
incUploads += upload
|
||||||
|
incDownloads += download
|
||||||
|
messages[upload + (rand / 1000)] = (
|
||||||
|
f"【{site}】{updated_date}\n"
|
||||||
|
+ f"上传量:{StringUtils.str_filesize(upload)}\n"
|
||||||
|
+ f"下载量:{StringUtils.str_filesize(download)}\n"
|
||||||
|
+ "————————————"
|
||||||
|
)
|
||||||
|
if incDownloads or incUploads:
|
||||||
|
sorted_messages = [messages[key] for key in sorted(messages.keys(), reverse=True)]
|
||||||
|
sorted_messages.insert(0, f"【汇总】\n"
|
||||||
|
f"总上传:{StringUtils.str_filesize(incUploads)}\n"
|
||||||
|
f"总下载:{StringUtils.str_filesize(incDownloads)}\n"
|
||||||
|
f"————————————")
|
||||||
|
self.post_message(Notification(
|
||||||
|
channel=channel,
|
||||||
|
source=source,
|
||||||
|
title="【站点数据统计】",
|
||||||
|
text="\n".join(sorted_messages),
|
||||||
|
userid=userid
|
||||||
|
))
|
||||||
|
else:
|
||||||
|
self.post_message(Notification(
|
||||||
|
channel=channel,
|
||||||
|
source=source,
|
||||||
|
title="没有刷新到任何站点数据!",
|
||||||
|
userid=userid
|
||||||
|
))
|
||||||
|
|||||||
Reference in New Issue
Block a user