Spaces:
Running
Running
系统级优化
Browse files- app.py +4 -1
- router_items.py +8 -1
- router_posts.py +8 -1
- router_tasks.py +8 -1
- 云端_定时版本检测引擎.py +61 -1
app.py
CHANGED
|
@@ -29,7 +29,7 @@ logging.basicConfig(
|
|
| 29 |
logger = logging.getLogger("ComfyUI-Ranking")
|
| 30 |
|
| 31 |
|
| 32 |
-
from 云端_定时版本检测引擎 import daily_version_check_task
|
| 33 |
|
| 34 |
# ==========================================
|
| 35 |
# 👥 用户模块 (拆分为3个子模块)
|
|
@@ -222,6 +222,9 @@ async def on_startup():
|
|
| 222 |
asyncio.create_task(daily_version_check_task())
|
| 223 |
logger.info("✅ 定时版本检测任务已挂载")
|
| 224 |
|
|
|
|
|
|
|
|
|
|
| 225 |
# ========== 启动 HF 批量同步定时器 ==========
|
| 226 |
db.start_batch_sync()
|
| 227 |
logger.info("✅ HF 批量同步定时器已启动")
|
|
|
|
| 29 |
logger = logging.getLogger("ComfyUI-Ranking")
|
| 30 |
|
| 31 |
|
| 32 |
+
from 云端_定时版本检测引擎 import daily_version_check_task, reset_daily_views_task
|
| 33 |
|
| 34 |
# ==========================================
|
| 35 |
# 👥 用户模块 (拆分为3个子模块)
|
|
|
|
| 222 |
asyncio.create_task(daily_version_check_task())
|
| 223 |
logger.info("✅ 定时版本检测任务已挂载")
|
| 224 |
|
| 225 |
+
asyncio.create_task(reset_daily_views_task())
|
| 226 |
+
logger.info("✅ daily_views 每日重置任务已挂载")
|
| 227 |
+
|
| 228 |
# ========== 启动 HF 批量同步定时器 ==========
|
| 229 |
db.start_batch_sync()
|
| 230 |
logger.info("✅ HF 批量同步定时器已启动")
|
router_items.py
CHANGED
|
@@ -166,7 +166,11 @@ async def create_item(item: ItemCreate):
|
|
| 166 |
"netdisk_password": item.netdisk_password, # ☁️ 网盘密码
|
| 167 |
"is_netdisk": item.is_netdisk, # ☁️ 是否网盘资源
|
| 168 |
"is_original": item.is_original, # 🎨 是否为原创作品
|
| 169 |
-
"likes": 0, "favorites": 0, "comments": 0, "uses": 0, "use_history": {}, "created_at": int(time.time()), "liked_by": [], "favorited_by": []
|
|
|
|
|
|
|
|
|
|
|
|
|
| 170 |
}
|
| 171 |
items_db.insert(0, new_item)
|
| 172 |
db.save_data("items.json", items_db)
|
|
@@ -395,6 +399,9 @@ async def record_item_view(item_id: str, current_user: str = Depends(require_aut
|
|
| 395 |
if result is None:
|
| 396 |
raise HTTPException(status_code=404, detail="找不到该内容记录")
|
| 397 |
|
|
|
|
|
|
|
|
|
|
| 398 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
| 399 |
|
| 400 |
|
|
|
|
| 166 |
"netdisk_password": item.netdisk_password, # ☁️ 网盘密码
|
| 167 |
"is_netdisk": item.is_netdisk, # ☁️ 是否网盘资源
|
| 168 |
"is_original": item.is_original, # 🎨 是否为原创作品
|
| 169 |
+
"likes": 0, "favorites": 0, "comments": 0, "uses": 0, "use_history": {}, "created_at": int(time.time()), "liked_by": [], "favorited_by": [],
|
| 170 |
+
"views": 0,
|
| 171 |
+
"daily_views": 0,
|
| 172 |
+
"viewed_by": [],
|
| 173 |
+
"daily_views_date": ""
|
| 174 |
}
|
| 175 |
items_db.insert(0, new_item)
|
| 176 |
db.save_data("items.json", items_db)
|
|
|
|
| 399 |
if result is None:
|
| 400 |
raise HTTPException(status_code=404, detail="找不到该内容记录")
|
| 401 |
|
| 402 |
+
# 🗂️ 清除排序缓存(浏览量变化可能影响排序)
|
| 403 |
+
sort_cache.invalidate("items:")
|
| 404 |
+
|
| 405 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
| 406 |
|
| 407 |
|
router_posts.py
CHANGED
|
@@ -163,7 +163,11 @@ async def create_post(post: PostCreate, current_user: str = Depends(require_auth
|
|
| 163 |
"comments": 0,
|
| 164 |
"liked_by": [],
|
| 165 |
"favorited_by": [],
|
| 166 |
-
"tip_board": [] # 打赏榜单
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
}
|
| 168 |
|
| 169 |
posts_db.insert(0, new_post)
|
|
@@ -458,4 +462,7 @@ async def record_post_view(post_id: str, current_user: str = Depends(require_aut
|
|
| 458 |
if result is None:
|
| 459 |
raise HTTPException(status_code=404, detail="帖子不存在")
|
| 460 |
|
|
|
|
|
|
|
|
|
|
| 461 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
|
|
|
| 163 |
"comments": 0,
|
| 164 |
"liked_by": [],
|
| 165 |
"favorited_by": [],
|
| 166 |
+
"tip_board": [], # 打赏榜单
|
| 167 |
+
"views": 0,
|
| 168 |
+
"daily_views": 0,
|
| 169 |
+
"viewed_by": [],
|
| 170 |
+
"daily_views_date": ""
|
| 171 |
}
|
| 172 |
|
| 173 |
posts_db.insert(0, new_post)
|
|
|
|
| 462 |
if result is None:
|
| 463 |
raise HTTPException(status_code=404, detail="帖子不存在")
|
| 464 |
|
| 465 |
+
# 🗂️ 清除排序缓存(浏览量变化可能影响排序)
|
| 466 |
+
sort_cache.invalidate("posts:")
|
| 467 |
+
|
| 468 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
router_tasks.py
CHANGED
|
@@ -396,7 +396,11 @@ async def create_task(task: TaskCreate, current_user: str = Depends(require_auth
|
|
| 396 |
"comments": 0,
|
| 397 |
"liked_by": [],
|
| 398 |
"favorited_by": [],
|
| 399 |
-
"tip_board": [] # 打赏榜单
|
|
|
|
|
|
|
|
|
|
|
|
|
| 400 |
}
|
| 401 |
|
| 402 |
tasks_db.insert(0, new_task)
|
|
@@ -1223,6 +1227,9 @@ async def record_task_view(task_id: str, current_user: str = Depends(require_aut
|
|
| 1223 |
if result is None:
|
| 1224 |
raise HTTPException(status_code=404, detail="任务不存在")
|
| 1225 |
|
|
|
|
|
|
|
|
|
|
| 1226 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
| 1227 |
|
| 1228 |
# ==========================================
|
|
|
|
| 396 |
"comments": 0,
|
| 397 |
"liked_by": [],
|
| 398 |
"favorited_by": [],
|
| 399 |
+
"tip_board": [], # 打赏榜单
|
| 400 |
+
"views": 0,
|
| 401 |
+
"daily_views": 0,
|
| 402 |
+
"viewed_by": [],
|
| 403 |
+
"daily_views_date": ""
|
| 404 |
}
|
| 405 |
|
| 406 |
tasks_db.insert(0, new_task)
|
|
|
|
| 1227 |
if result is None:
|
| 1228 |
raise HTTPException(status_code=404, detail="任务不存在")
|
| 1229 |
|
| 1230 |
+
# 🗂️ 清除排序缓存(浏览量变化可能影响排序)
|
| 1231 |
+
sort_cache.invalidate("tasks:")
|
| 1232 |
+
|
| 1233 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
| 1234 |
|
| 1235 |
# ==========================================
|
云端_定时版本检测引擎.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
# 云端_定时版本检测引擎.py
|
| 2 |
import asyncio
|
| 3 |
import datetime
|
|
|
|
| 4 |
import httpx
|
| 5 |
import logging
|
| 6 |
import 数据库连接 as db
|
|
@@ -75,4 +76,63 @@ async def daily_version_check_task():
|
|
| 75 |
db.save_data("versions.json", versions_db)
|
| 76 |
print(f"✅ 版本检测任务完成,共发现并更新了 {updated_count} 个资源的新版本。")
|
| 77 |
else:
|
| 78 |
-
print("✅ 版本检测任务完成,暂无任何新版本发现。")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
# 云端_定时版本检测引擎.py
|
| 2 |
import asyncio
|
| 3 |
import datetime
|
| 4 |
+
from datetime import date
|
| 5 |
import httpx
|
| 6 |
import logging
|
| 7 |
import 数据库连接 as db
|
|
|
|
| 76 |
db.save_data("versions.json", versions_db)
|
| 77 |
print(f"✅ 版本检测任务完成,共发现并更新了 {updated_count} 个资源的新版本。")
|
| 78 |
else:
|
| 79 |
+
print("✅ 版本检测任务完成,暂无任何新版本发现。")
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
async def reset_daily_views_task():
|
| 83 |
+
"""
|
| 84 |
+
每日重置 daily_views 计数器的守护进程
|
| 85 |
+
- 每小时检查一次,在 UTC+8 00:00 执行重置
|
| 86 |
+
- 使用 atomic_update 保证并发安全
|
| 87 |
+
"""
|
| 88 |
+
# 需要处理的数据文件
|
| 89 |
+
data_files = ["items.json", "tasks.json", "posts.json"]
|
| 90 |
+
|
| 91 |
+
while True:
|
| 92 |
+
now = datetime.datetime.utcnow() + datetime.timedelta(hours=8)
|
| 93 |
+
today = date.today().isoformat()
|
| 94 |
+
|
| 95 |
+
# 计算距离今天 00:00 (UTC+8) 的秒数,如果过了就定在明天 00:00
|
| 96 |
+
next_run = now.replace(hour=0, minute=0, second=0, microsecond=0)
|
| 97 |
+
if now >= next_run:
|
| 98 |
+
next_run += datetime.timedelta(days=1)
|
| 99 |
+
sleep_seconds = (next_run - now).total_seconds()
|
| 100 |
+
|
| 101 |
+
print(f"📊 daily_views 重置引擎已挂载,距离下次 00:00 执行还有 {sleep_seconds} 秒...")
|
| 102 |
+
await asyncio.sleep(sleep_seconds)
|
| 103 |
+
|
| 104 |
+
print(f"🚀 [00:00] 开始执行 daily_views 每日重置任务 (日期: {today})...")
|
| 105 |
+
|
| 106 |
+
total_reset_count = 0
|
| 107 |
+
|
| 108 |
+
for file_name in data_files:
|
| 109 |
+
reset_count = 0
|
| 110 |
+
|
| 111 |
+
def reset_updater(data):
|
| 112 |
+
nonlocal reset_count
|
| 113 |
+
if not isinstance(data, list):
|
| 114 |
+
return
|
| 115 |
+
|
| 116 |
+
for record in data:
|
| 117 |
+
if not isinstance(record, dict):
|
| 118 |
+
continue
|
| 119 |
+
|
| 120 |
+
# 仅在 daily_views_date 不是今天时才重置
|
| 121 |
+
record_date = record.get("daily_views_date")
|
| 122 |
+
if record_date != today:
|
| 123 |
+
record["daily_views"] = 0
|
| 124 |
+
record["daily_views_date"] = today
|
| 125 |
+
reset_count += 1
|
| 126 |
+
|
| 127 |
+
try:
|
| 128 |
+
db.atomic_update(file_name, reset_updater, default_data=[])
|
| 129 |
+
total_reset_count += reset_count
|
| 130 |
+
if reset_count > 0:
|
| 131 |
+
print(f" ✓ {file_name}: 重置了 {reset_count} 条记录的 daily_views")
|
| 132 |
+
except Exception as e:
|
| 133 |
+
logger.error(f"重置 {file_name} 的 daily_views 失败: {e}")
|
| 134 |
+
|
| 135 |
+
if total_reset_count > 0:
|
| 136 |
+
print(f"✅ daily_views 重置任务完成,共重置 {total_reset_count} 条记录。")
|
| 137 |
+
else:
|
| 138 |
+
print("✅ daily_views 重置任务完成,没有需要重置的记录。")
|