All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m33s
- 新增网关限流:按本系统运营商账户(卡 carrier_id)→ 限流组 → 操作限制每秒请求数,每次 HTTP 尝试计量,默认限流、仅后台人工点击/通道阈值/自动续费/手动刷新豁免;支持只统计与拦截两种模式,默认只统计 - Asynq 遇限流不计失败、固定短延迟重试;轮询任务与停复机业务重试遇限流短延迟重排 - 停机、复机不再使用网关内部重试,只发一次请求 - 网关返回结构化错误;新增上游错误分类规则表与测试接口 - 新增按月分区的停复机记录表:系统自动停复机只写记录,不再写统一审计与集成日志;普通轮询查询不再写集成日志 - 新增限流组、错误分类、停复机记录、按账户调用统计与枚举后台接口 - 迁移 000243~000246;同步 OpenSpec 提案(含后续 6 个 change)与技术方案、工程约束
3.8 KiB
3.8 KiB
0. 前置确认
- 0.1 确认
rebuild-card-traffic-metering-and-stop-resume已归档并上线生产(总开关可仍为关闭);第 1、3 个 Change 已上线。
第一次发布:演练与口径补齐(总开关仍关闭,行为不变)
1. 迁移
- 1.1 新增成对迁移:
tb_gateway_error_classification增加auto_disable_polling boolean not null default false,为"已销户""风险停机"类终态规则置位;down 删列。
2. 规则演练
- 2.1 新增演练 Query:按批读取卡与资产数据,复用新规则判断函数(不受总开关影响,始终按新规则判断),支持假设的实名管控配置;只读。
- 2.2
GET /stop-resume-rule/dry-run(运营商账户、停机原因筛选,汇总 + 分页明细),仅超级管理员与平台用户;导出场景stop_resume_rule_dry_run。 - 2.3 同步路由与文档生成入口,重新生成接口文档。
3. 风险停机与已销户关闭轮询
- 3.1
ShouldStopPollingForRisk去掉独立卡限制,只关闭该卡自身enable_polling,不级联设备。 - 3.2 停复机调用失败时按错误分类查
auto_disable_polling:置位则不重试、关闭该卡轮询、回写gateway_extend、写审计。 - 3.3 错误分类接口增加
auto_disable_polling字段,非终态类别勾选时拒绝。
4. 第一次发布的编译与验证
- 4.1
gofmt -w;go build ./cmd/api ./cmd/worker通过;openspec validate finalize-unified-stop-resume-rule通过。 - 4.2 测试环境:演练不改任何状态;开启总开关后抽取
not_realname、carrier_stopped、manual、停因为空各若干张,实际评估结果与演练一致。 - 4.3 测试环境:绑定设备的卡返回已销户时只关该卡轮询;复机返回风险停机时不重试并关闭轮询;号码封存不关闭轮询。
5. 开启新规则(运营与维护者,第一次发布上线后)
- 5.1 为需要实名的运营商账户设置
realname_control_enabled = 1。 - 5.2 生产执行演练并导出明细,运营确认"将被复机 / 将被停机"清单;需保持停机的卡先关闭轮询。
- 5.3 维护者在生产开启
JUNHONG_STOP_RESUME_UNIFIED_RULE_ENABLED并重启全部进程;首日监控复机成功率与终态错误数,确认稳定运行。
第二次发布:转正(新规则在生产稳定运行后)
6. 删除总开关与旧口径
- 6.1
stop_resume_unified.go并入主逻辑:删除unifiedStopResumeEnabled与各分支,autoResumableStopReason恒为真,autoControlSuspended、unifiedRealnameOK无条件生效。 - 6.2
stop_resume_service.go删除旧口径:isRealnameOK行业卡与realname_policy分支、isPollingStopReason限定、ListByDeviceIDAndPollingStopReasons的调用。 - 6.3 删除
pkg/config/config.go、loader.go、defaults/config.yaml的总开关,.gitea/workflows/deploy.yaml与docker-compose.prod.yml中的JUNHONG_STOP_RESUME_UNIFIED_RULE_ENABLED。 - 6.4 通道阈值新周期复机条件去掉开关分支,固定为新规则复机条件。
7. 实名轮询
- 7.1
polling_realname_handler.go:删除按行业卡跳过;卡所属账户未开实名管控时跳过查询并按正常间隔重入队;账户查询失败按可恢复失败处理。
8. 第二次发布的编译与验证
- 8.1
gofmt -w;go build ./cmd/api ./cmd/worker通过;全仓检索无UnifiedRuleEnabled残留;openspec validate与openspec doctor --json通过。 - 8.2 测试环境:未开管控账户不查实名;开启管控账户的行业卡查实名并按未实名停机;通道阈值新周期解锁后按新规则复机或只解锁;停复机行为与第一次发布开启总开关后一致。