Skip to content

Commit 962ceb5

Browse files
committed
fix: 支持 report API 升级部份依赖并初步支持 AList 储存
1 parent 84b46ca commit 962ceb5

File tree

7 files changed

+1015
-118
lines changed

7 files changed

+1015
-118
lines changed

core/cluster.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"""
22
todo:
3-
1. 支持 report API
4-
2. 缺失文件时临时下载文件处理
5-
3. 断连时重新发送 disable 包
3+
1. 缺失文件时临时下载文件处理
4+
2. 断连时重新发送 disable 包
65
"""
76

87
from core.config import Config
@@ -15,7 +14,8 @@
1514
from core.orm import writeHits
1615
from core.i18n import locale
1716
from typing import List, Any
18-
from aiohttp import web
17+
from aiohttp import web, ClientResponseError
18+
from urllib.parse import urljoin
1919
from tqdm import tqdm
2020
from pathlib import Path
2121
import toml
@@ -245,18 +245,38 @@ async def downloadFile(
245245
if all(results):
246246
pbar.update(len(content))
247247
return
248+
249+
except ClientResponseError as e:
250+
logger.terror(
251+
"cluster.error.download_file.retry",
252+
file=file.hash,
253+
e=e.message,
254+
retry=delay,
255+
)
256+
self.report(e, session)
257+
248258
except Exception as e:
249259
logger.terror(
250260
"cluster.error.download_file.retry",
251261
file=file.hash,
252262
e=e,
253263
retry=delay,
254264
)
265+
255266
await asyncio.sleep(delay)
256267

257268
logger.terror("cluster.error.download_file.failed", file=file.hash)
258269
self.failed_filelist.files.append(file)
259270

271+
async def report(self, error: ClientResponseError, session: aiohttp.ClientSession) -> None:
272+
history_urls = [urljoin(self.base_url), *error.history]
273+
try:
274+
async with session.post("/openbmclapi/report", data={"url": history_urls, "error": error.message}) as response:
275+
response.raise_for_status()
276+
logger.tdebug("cluster.debug.report", url=history_urls)
277+
except Exception:
278+
pass
279+
260280
async def setupRouter(self) -> None:
261281
logger.tinfo("cluster.info.router.creating")
262282
try:

core/storages/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from core.classes import Storage
22
from core.storages.local import LocalStorage
3+
from core.storages.alist import AListStorage
34
from core.config import Config
45
from typing import List
56

@@ -10,4 +11,6 @@ def getStorages() -> List[Storage]:
1011
for storage in config:
1112
if storage["type"] == "local":
1213
storages.append(LocalStorage(path=storage["path"]))
14+
if storage["type"] == "alist":
15+
storages.append(AListStorage())
1316
return storages

core/storages/alist.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from dataclasses import dataclass
2+
3+
4+
class AListStorage():
5+
def __init__(self) -> None:
6+
pass

core/storages/local.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ async def recycleFiles(self, files: FileList) -> None:
128128
) as pbar:
129129
size = 0
130130
for file in delete_files:
131-
total_size += file.stat().st_size
131+
size += file.stat().st_size
132132
pbar.update(1)
133133
try:
134134
file.unlink()

i18n/zh_cn.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"cluster.success.filelist.parsed": "成功解析文件列表!文件数量:${count},总大小:${size}。",
2626
"cluster.error.download_file.retry": "在尝试下载文件 ${file} 时遇到错误:${e},将在 ${retry}s 后重试。",
2727
"cluster.error.download_file.failed": "无法下载文件 ${file},已达到最高重试次数。",
28+
"cluster.debug.report": "成功汇报错误 URL!URL:${url}。",
2829
"cluster.info.sync_files.skipped": "因为当前没有文件缺失,已跳过文件同步。",
2930
"cluster.success.sync_files.downloaded": "成功下载所有文件!",
3031
"cluster.error.sync_files.retry": "无法下载所有文件,将在 ${retry}s 后重试。",

0 commit comments

Comments
 (0)