1. 新增账号事件数据表 AccountEvent 与迁移版本 20261002_0040_account_events,支持审计 Cookie 变更、自动重登、健康检查及任务执行事件; 2. 后端新增 account_events_service 并扩展 /api/accounts 路由,支持事件查询、过滤与上报; 3. 前端新增 AccountDetailPage 账号详情页组件,支持账号元信息展示、事件历史瀑布流与快捷重登操作; 4. 修复 CK 重登与自动化定时任务中事件关联逻辑,补充 test_account_events 单元测试; 5. 新增生产服务器高负载排查分析报告及相关设计文档。
90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
"""自动化调度:作业注册、调度线程与各作业实现。
|
|
|
|
登记作业请放在 ``register_default_jobs()``,由 ``main.py`` 在启动时调用一次,
|
|
避免 import 顺序影响注册结果。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .jobs.account_events_collect import JOB_KEY as ACCOUNT_EVENTS_KEY
|
|
from .jobs.account_events_collect import run_account_events_collect
|
|
from .jobs.ck_health import JOB_KEY as CK_HEALTH_KEY
|
|
from .jobs.ck_health import run_ck_health
|
|
from .jobs.ck_relogin import JOB_KEY as CK_RELOGIN_KEY
|
|
from .jobs.ck_relogin import run_ck_relogin
|
|
from .scheduler import (
|
|
JobSpec,
|
|
automation_enabled,
|
|
ensure_jobs,
|
|
register_job,
|
|
registered_jobs,
|
|
reset_registry,
|
|
run_due_jobs,
|
|
run_job_now,
|
|
scheduler_status,
|
|
start_scheduler,
|
|
stop_scheduler,
|
|
)
|
|
|
|
__all__ = [
|
|
"ACCOUNT_EVENTS_KEY",
|
|
"CK_HEALTH_KEY",
|
|
"CK_RELOGIN_KEY",
|
|
"JobSpec",
|
|
"automation_enabled",
|
|
"ensure_jobs",
|
|
"register_default_jobs",
|
|
"register_job",
|
|
"registered_jobs",
|
|
"reset_registry",
|
|
"run_account_events_collect",
|
|
"run_ck_health",
|
|
"run_ck_relogin",
|
|
"run_due_jobs",
|
|
"run_job_now",
|
|
"scheduler_status",
|
|
"start_scheduler",
|
|
"stop_scheduler",
|
|
]
|
|
|
|
|
|
def register_default_jobs() -> None:
|
|
"""登记内置作业(幂等)。"""
|
|
register_job(
|
|
JobSpec(
|
|
key=CK_RELOGIN_KEY,
|
|
title="CK 自动重登",
|
|
# interval_seconds 同样是「同一行多久重试一次」的兜底(真实节奏由
|
|
# relogin_next_at 的退避表决定);批次小、跑得慢,单轮 10 条。
|
|
interval_seconds=6 * 3600,
|
|
batch_size=10,
|
|
concurrency=3,
|
|
run=run_ck_relogin,
|
|
)
|
|
)
|
|
register_job(
|
|
JobSpec(
|
|
key=CK_HEALTH_KEY,
|
|
title="CK 自动巡检",
|
|
# interval_seconds = 单账号多久重新检测一次(不是作业周期;
|
|
# 作业每个 tick 都跑)。全库 12,881 条按 5 分钟一轮、单轮 200 条
|
|
# 反推,吞吐 40 条/分钟,够 6 小时内覆盖一遍(规划 §7.3)。
|
|
interval_seconds=6 * 3600,
|
|
batch_size=200,
|
|
concurrency=5,
|
|
run=run_ck_health,
|
|
)
|
|
)
|
|
register_job(
|
|
JobSpec(
|
|
key=ACCOUNT_EVENTS_KEY,
|
|
title="账号事件收集",
|
|
# interval_seconds 这里无实际意义(收集器每轮只按水位线往后取,
|
|
# 取不到就空转),保留一个值以复用现有调度与页面。
|
|
interval_seconds=10 * 60,
|
|
batch_size=500,
|
|
concurrency=1,
|
|
run=run_account_events_collect,
|
|
)
|
|
)
|