a62a124710
统一自动墙检查询逻辑,兼容 parent_id 为 null 或 0 的父节点 将 gfw_check_enabled 的空值视为开启,避免页面显示已启用却未入队 同时调整管理端自动墙检统计仅计算父节点 并更新 CI 配置以忽略 .helloagents 变更触发后端发布
4.1 KiB
4.1 KiB
node-gfw-check
职责
- 在 Xboard 后端维护节点墙状态检测任务和检测结果
- 通过管理端接口触发父节点墙状态检测,并通过节点端接口提供 REST 兜底领取与结果上报
- 通过
NodeSyncService发送gfw.checkWS 事件,让在线 mi-node 可即时执行检测 - 在节点列表返回
gfw_check字段,并对子节点应用父节点检测结果继承规则
行为规范
- 检测任务只对父节点创建;父节点兼容
parent_id IS NULL与历史parent_id=0两种表示,带真实父节点 ID 的子节点不单独下发任务 - 子节点列表展示继承父节点最新
gfw_check,并返回inherited=true与source_node_id server_gfw_checks.status使用pending / checking / normal / blocked / partial / failed / skipped- 管理端
POST server/manage/checkGfw接收{ ids: number[] },响应中区分started与skipped - 后端定时命令
sync:server-gfw-checks会自动为未明确关闭墙检托管的父节点创建检测任务;gfw_check_enabled=1或NULL均视为开启,只有false/0视为关闭;已有未超时的pending/checking任务时跳过,超过 5 分钟未领取或未上报的任务会自动标记为failed - Docker all-in-one 镜像通过 supervisor 独立运行
php artisan schedule:work;compose.sample.yaml的分进程样例和deploy/xboard-server/compose.yaml服务器部署模板也包含scheduler服务,确保sync:server-gfw-checks和其他 Laravel Scheduler 任务会持续执行 - 节点端
GET server/gfw/task只向父节点返回待执行任务;节点端POST server/gfw/report必须校验check_id归属当前节点 v2_server.gfw_check_enabled控制节点是否参与自动墙检测与墙状态自动显隐;该字段按“未明确关闭即开启”处理,管理端开启父节点墙检测托管时会立即发起一次检测,后续由定时命令持续检测;子节点不独立检测但可单独关闭随父节点自动隐藏 / 恢复blocked结果会自动隐藏仍开启墙检测托管且当前显示中的父节点及其子节点,并设置gfw_auto_hidden=1normal结果只恢复gfw_auto_hidden=1的节点,避免误恢复管理员手动隐藏的节点;partial/failed只记录状态,不触发自动上线或下线sync:server-auto-online会把最新墙状态blocked和未恢复的gfw_auto_hidden作为显示否决条件,防止自动上线重新发布疑似被墙节点- 当前检测方向只做节点服务器主动 ping 国内三网目标;后续墙内探测 IP 可在同一任务模型中扩展
- 参考脚本中的 Telegram 通知、chat_id、bot token 和自动安装依赖逻辑不得进入项目实现
- mi-node 使用 Go 原生 runner 调用系统
ping,按三网目标并发检测并结构化上报summary / operator_summary / raw_result;ping 命令成功即视为目标可达,平均延迟解析失败不再把正常可达误判为超时 - Docker runtime 镜像需要提供
ping,当前通过 Alpineiputils满足
依赖关系
- 依赖
app/Services/ServerGfwCheckService.php统一处理任务创建、状态判定、结果装饰和子节点继承 - 依赖
app/Models/ServerGfwCheck.php与server_gfw_checks表保存检测记录 - 依赖
app/Http/Controllers/V2/Admin/Server/ManageController.php暴露管理端触发接口 - 依赖
app/Http/Controllers/V2/Server/ServerController.php暴露节点端任务领取和上报接口 - 依赖
app/Services/NodeSyncService.php与 Workerman WS 通道向在线节点推送gfw.check - 依赖
app/Console/Commands/SyncServerGfwChecks.php与 Laravel Scheduler 自动创建检测任务 - 依赖
.docker/supervisor/supervisord.conf、deploy/xboard-server/compose.yaml中的scheduler服务,或部署环境中的schedule:work/cron + schedule:run持续驱动 Laravel Scheduler - 依赖
app/Services/ServerAutoOnlineService.php在自动上线同步时尊重墙状态否决 - 依赖
E:/code/go/mi-node/internal/gfwcheck执行 ping 检测和结果判定 - 依赖
E:/code/go/mi-node/internal/panel、internal/controlplane与internal/service接收任务、轮询兜底并上报结果