922e86070d
新增节点级月流量限额配置、重置调度和运行状态持久化 下发 traffic_limit 给 mi-node,并在超额后停止内核、到期后恢复 管理端支持编辑限额参数并展示额度进度、状态和下次重置 手动与定时重置会同步清理限额状态并通知节点刷新配置
2.4 KiB
2.4 KiB
node-traffic-limit
职责
- 保存节点级月流量限额配置、重置规则和运行状态
- 将限额配置下发给
mi-node,由节点端执行真实内核停启 - 在手动重置、定时重置和节点 metrics 回传时同步面板侧状态
行为规范
v2_server.transfer_enable是节点月流量额度,单位为字节;新增字段只负责启用状态、重置日、重置时间、时区和运行状态traffic_limit_enabled=false或transfer_enable<=0时不启用节点限额,ServerTrafficLimitService::buildNodeConfig()仍会下发 disabled 配置,旧行为保持不变- 重置日支持
1-31,短月按当月最后一天计算;重置时间使用HH:mm,时区优先使用节点字段,空值或非法值回退config('app.timezone') - 管理端保存节点后调用
ServerTrafficLimitService::refreshSchedule()计算traffic_limit_next_reset_at,并通过NodeSyncService::notifyConfigUpdated()通知节点更新配置 - 手动重置和定时重置统一走
ServerTrafficLimitService::resetServer():清空节点u/d,恢复traffic_limit_status=normal,记录traffic_limit_last_reset_at,计算下一次重置时间,并触发notifyFullSync() sync:server-traffic-limits每分钟扫描到期且启用限额的节点,只处理traffic_limit_next_reset_at <= now()的记录,不影响未启用限额的节点ServerService::updateMetrics()会缓存metrics.traffic_limit并把节点端suspended / last_reset_at / next_reset_at / suspended_at写回v2_server- 限额下线不修改
show、auto_online或墙检测字段;真实下线由mi-node调用内核Stop()完成
依赖关系
- 依赖
app/Services/ServerTrafficLimitService.php统一处理配置下发、时间计算、状态回写和重置 - 依赖
app/Services/ServerService.php在节点配置中追加traffic_limit并消费节点 metrics - 依赖
app/Observers/ServerObserver.php在限额配置变化时推送sync.config - 依赖
app/Console/Commands/SyncServerTrafficLimits.php与 Laravel Scheduler 执行到期重置 - 依赖管理端
admin-frontend/src/utils/nodeEditor*、admin-frontend/src/utils/nodes.ts和admin-frontend/src/views/nodes/*提供配置与展示入口 - 依赖
E:/code/go/mi-node/internal/trafficlimit和internal/service执行本地强制下线、重置恢复与状态持久化