Merge pull request #216 from WangEdward/main

This commit is contained in:
jxxghp
2024-04-19 20:19:18 +08:00
committed by GitHub

View File

@@ -43,7 +43,7 @@ class SiteStatistic(_PluginBase):
# 插件图标
plugin_icon = "statistic.png"
# 插件版本
plugin_version = "2.6"
plugin_version = "2.7"
# 插件作者
plugin_author = "lightolly"
# 作者主页
@@ -70,6 +70,7 @@ class SiteStatistic(_PluginBase):
_cron: str = ""
_notify: bool = False
_queue_cnt: int = 5
_remove_failed: bool = False
_statistic_type: str = None
_statistic_sites: list = []
@@ -87,6 +88,7 @@ class SiteStatistic(_PluginBase):
self._notify = config.get("notify")
self._sitemsg = config.get("sitemsg")
self._queue_cnt = config.get("queue_cnt")
self._remove_failed = config.get("remove_failed")
self._statistic_type = config.get("statistic_type") or "all"
self._statistic_sites = config.get("statistic_sites") or []
@@ -369,7 +371,23 @@ class SiteStatistic(_PluginBase):
}
}
]
}
},
{
'component': 'VCol',
'props': {
'cols': 12,
'md': 4
},
'content': [
{
'component': 'VSwitch',
'props': {
'model': 'remove_failed',
'label': '移除失效站点',
}
}
]
},
]
}
]
@@ -381,6 +399,7 @@ class SiteStatistic(_PluginBase):
"sitemsg": True,
"cron": "5 1 * * *",
"queue_cnt": 5,
"remove_failed": False,
"statistic_type": "all",
"statistic_sites": []
}
@@ -1179,7 +1198,8 @@ class SiteStatistic(_PluginBase):
"bonus": site_user_info.bonus,
"url": site_url,
"err_msg": site_user_info.err_msg,
"message_unread": site_user_info.message_unread
"message_unread": site_user_info.message_unread,
"updated_at": datetime.now().strftime('%Y-%m-%d')
}
})
return site_user_info
@@ -1248,62 +1268,67 @@ class SiteStatistic(_PluginBase):
if not refresh_sites:
return
# 将数据初始化为前一天,筛选站点
yesterday_sites_data = {}
today_date = datetime.now().strftime('%Y-%m-%d')
if self._statistic_type == "add" or not self._remove_failed:
if last_update_time := self.get_data("last_update_time"):
yesterday_sites_data = self.get_data(last_update_time) or {}
if not self._remove_failed and yesterday_sites_data:
site_names = [site.get("name") for site in refresh_sites]
self._sites_data = {k: v for k, v in yesterday_sites_data.items() if k in site_names}
# 并发刷新
with ThreadPool(min(len(refresh_sites), int(self._queue_cnt or 5))) as p:
p.map(self.__refresh_site_data, refresh_sites)
# 通知刷新完成
if self._notify:
yesterday_sites_data = {}
# 增量数据
if self._statistic_type == "add":
last_update_time = self.get_data("last_update_time")
if last_update_time:
yesterday_sites_data = self.get_data(last_update_time) or {}
messages = []
# 按照上传降序排序
sites = self._sites_data.keys()
uploads = [self._sites_data[site].get("upload") or 0 if not yesterday_sites_data.get(site) else
int(self._sites_data[site].get("upload") or 0) - int(
yesterday_sites_data[site].get("upload") or 0) for site in sites]
downloads = [self._sites_data[site].get("download") or 0 if not yesterday_sites_data.get(site) else
int(self._sites_data[site].get("download") or 0) - int(
yesterday_sites_data[site].get("download") or 0) for site in sites]
data_list = sorted(list(zip(sites, uploads, downloads)),
key=lambda x: x[1],
reverse=True)
messages = {}
# 总上传
incUploads = 0
# 总下载
incDownloads = 0
for data in data_list:
site = data[0]
upload = int(data[1])
download = int(data[2])
for rand, site in enumerate(self._sites_data.keys()):
upload = int(self._sites_data[site].get("upload") or 0)
download = int(self._sites_data[site].get("download") or 0)
updated_date = self._sites_data[site].get("updated_at")
if self._statistic_type == "add" and yesterday_sites_data.get(site):
upload -= int(yesterday_sites_data[site].get("upload") or 0)
download -= int(yesterday_sites_data[site].get("download") or 0)
if updated_date and updated_date != today_date:
updated_date = f"{updated_date}"
else:
updated_date = ""
if upload > 0 or download > 0:
incUploads += int(upload)
incDownloads += int(download)
messages.append(f"{site}\n"
f"上传量:{StringUtils.str_filesize(upload)}\n"
f"下载量:{StringUtils.str_filesize(download)}\n"
f"————————————")
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:
messages.insert(0, f"【汇总】\n"
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(mtype=NotificationType.SiteMessage,
title="站点数据统计", text="\n".join(messages))
title="站点数据统计", text="\n".join(sorted_messages))
# 获取今天的日期
key = datetime.now().strftime('%Y-%m-%d')
# 保存数据
self.save_data(key, self._sites_data)
self.save_data(today_date, self._sites_data)
# 更新时间
self.save_data("last_update_time", key)
self.save_data("last_update_time", today_date)
logger.info("站点数据刷新完成")
def __custom_sites(self) -> List[Any]:
@@ -1321,6 +1346,7 @@ class SiteStatistic(_PluginBase):
"notify": self._notify,
"sitemsg": self._sitemsg,
"queue_cnt": self._queue_cnt,
"remove_failed": self._remove_failed,
"statistic_type": self._statistic_type,
"statistic_sites": self._statistic_sites,
})