All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m27s
核心变更: - MatchConfig 改为 MatchConfigs,返回所有匹配配置 - MergedTaskIntervals 按 task type 合并各配置,选取最高优先级(非 nil 且最小 priority 值) - hasAnyEnabledInterval 过滤所有 interval 均为 NULL 的配置 - calcInitialDelay 重构为纯函数,接收 interval 参数 - 移除 getEnabledTaskTypes 和 getIntervalByTaskType(被 MergedTaskIntervals 替代) - scheduler.go 新增心跳 key + 顶层 panic recovery + Init 完成守卫 - initializer.go 批量失败日志升级为 Error,逐条检查 Pipeline 命令错误 - 数据迁移:禁用 id=29 的轮询配置(所有 interval 均为 NULL) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2.9 KiB
2.9 KiB
MODIFIED Requirements
Requirement: 按优先级顺序返回所有匹配配置(多匹配 + interval 过滤)
原描述:
MatchConfig(card):按优先级顺序返回第一个匹配的配置
修改为:
MatchConfigs(card) []*model.PollingConfig 按 priority ASC 遍历所有启用的配置,返回所有满足匹配条件且至少有一个非 NULL interval的配置。无匹配时返回空切片。
matchConfigConditions(config, card) 判断卡是否满足配置条件时,额外过滤所有 polling interval 均为 NULL 的配置(RealnameCheckInterval、CarddataCheckInterval、PackageCheckInterval、ProtectCheckInterval、CardStatusCheckInterval 均无有效值)。
Scenario: 多配置同时匹配一张卡
- GIVEN 配置 A (priority=5, card_condition="", card_status_check_interval=600, protect_check_interval=nil) 和配置 B (priority=10, card_condition="suspended", card_status_check_interval=nil, package_check_interval=60) 均处于启用状态
- WHEN 调用
MatchConfigs(card),其中 card.network_status=0(suspended) - THEN 返回 [配置 A, 配置 B],按 priority ASC 排序;配置 B 的
package_check_interval=60来自配置 A 不覆盖的 task type
Scenario: 所有 interval 均为 NULL 的配置被过滤
- GIVEN 配置 C (priority=1, card_condition="", 所有 interval 全为 NULL) 和配置 D (priority=25, card_condition="suspended", card_status_check_interval=600) 均处于启用状态
- WHEN 调用
MatchConfigs(card)对任意卡 - THEN 返回结果不包含配置 C(因为没有任何有效 interval);配置 D 正常返回
Scenario: 无任何配置匹配
- GIVEN 没有任何启用的配置,或所有配置的条件都不满足卡属性
- WHEN 调用
MatchConfigs(card) - THEN 返回空切片
[]
Requirement: 多配置 Interval 合并选取
新增 MergedTaskIntervals(card) map[string]TaskTypeInterval 方法。
对 MatchConfigs(card) 返回的所有配置,按 priority ASC 遍历,对每种 task type(realname、carddata、package、protect、card_status)选取最高优先级(priority 数值最小)的那个 config 的 interval。
Scenario: 相同 task type 不同 interval 按优先级选取
- GIVEN 配置 A (priority=5, card_status_check_interval=300) 和配置 B (priority=10, card_status_check_interval=600) 同时匹配某张停机卡
- WHEN 调用
MergedTaskIntervals(card) - THEN 结果中
card_status的 interval 为 300(来自 priority=5 的配置 A)
Scenario: 不同 task type 来自不同配置
- GIVEN 配置 A (priority=5, card_status_check_interval=300, package_check_interval=nil) 和配置 B (priority=10, card_status_check_interval=nil, package_check_interval=60) 同时匹配某张停机卡
- WHEN 调用
MergedTaskIntervals(card) - THEN 结果中
card_statusinterval=300(来自配置 A),packageinterval=60(来自配置 B)