feat: 深色主题UI、错误分类、批量抓取、健康度筛选

- 修复 datetime 时区不一致导致所有API 500错误的问题
- Feeds/Dashboard 页面改为深色表格主题,高对比度文字
- 添加错误类型自动分类(URL失效/被拒绝/超时/DNS失败/SSL错误等12种)
- 新增"下次抓取时间"列,从APScheduler获取
- 新增健康度筛选下拉,修复分页后过滤失效的bug
- "全部抓取"改为同步并发执行,基于当前筛选条件获取所有匹配源
- 新增数据库自动迁移机制,处理增量列变更

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
congsh
2026-06-11 17:44:54 +08:00
parent c59dd304f7
commit 68bba3d9e0
12 changed files with 846 additions and 192 deletions
+3 -3
View File
@@ -1,5 +1,5 @@
"""RSS 源健康度检测"""
from datetime import datetime, timedelta, timezone
from datetime import datetime, timedelta
from typing import List, Dict
from sqlalchemy import func
from sqlalchemy.orm import Session
@@ -10,7 +10,7 @@ def get_feed_health(db: Session, feed_id: int = None) -> List[Dict]:
"""获取 RSS 源健康度信息
返回每个源的健康状态详情
"""
now = datetime.now(timezone.utc)
now = datetime.utcnow()
query = db.query(Feed)
if feed_id:
query = query.filter(Feed.id == feed_id)
@@ -84,7 +84,7 @@ def get_overall_stats(db: Session) -> Dict:
# 健康源统计
feeds = db.query(Feed).all()
healthy = warning = unhealthy = 0
now = datetime.now(timezone.utc)
now = datetime.utcnow()
for feed in feeds:
status = feed.health_status(now=now)
if status == "healthy":