package carrierthreshold import "github.com/break/junhong_cmp_fiber/pkg/constants" // TriggerSourceUnrecorded 表示命中来源未记录。 // // 取值与 tb_carrier_traffic_threshold_lock.trigger_source 的 CHECK 允许的空串一致: // 本次上线前的历史行与无法归类的观测来源都记为未记录,读侧按「无」展示。 const TriggerSourceUnrecorded = "" // triggerSources 是 trigger_source 列 CHECK 允许的全部非空取值,与 // pkg/constants.CardObservationSource* 完全一致,两处必须同时演进。 var triggerSources = []string{ constants.CardObservationSourcePolling, constants.CardObservationSourceManualSync, constants.CardObservationSourceManualOverride, constants.CardObservationSourceCarrierCallback, constants.CardObservationSourceBusinessEvent, } // IsTriggerSource 判断取值是否为列约束允许的命中来源。 func IsTriggerSource(source string) bool { for _, allowed := range triggerSources { if source == allowed { return true } } return false } // SafeTriggerSource 把流量观测来源归一到列约束允许的取值集合。 // // 命中事实与停机锁是同一条 INSERT,来源列带 CHECK 约束:若把未归类的来源(上游新增观测来源而 // 本处枚举尚未同步)原样写库,INSERT 会因约束失败并回滚整个流量观测事务,等价于因留痕失败而 // 延迟停机。因此无法归类的来源一律记为「未记录」,停机事实与留痕写入都不会因此失败。 func SafeTriggerSource(source string) string { if IsTriggerSource(source) { return source } return TriggerSourceUnrecorded } // 周期恢复的复机结果取值,与 tb_carrier_traffic_threshold_lock.resume_result 的 CHECK 一致。 const ( // ResumeResultResumed 表示新周期条件满足、已发起复机;最终确认结果由 resume_status 承载。 ResumeResultResumed = "resumed" // ResumeResultSkipped 表示新周期仅解锁、未发起复机,跳过原因写入既有失败原因列。 ResumeResultSkipped = "skipped" // ResumeResultManual 表示周期归属不可判定,已按跨期语义解锁并转人工核对。 ResumeResultManual = "manual" )