Constraint: 切换 main 前必须保存当前七月分支全部项目进展,套餐生效提案仅属于 Iteration/7-11。 Rejected: 将七月套餐修复直接移植到 main | 两个分支的可靠投递架构不同。 Confidence: medium Scope-risk: broad Directive: 不得将本提交整体 cherry-pick 到 main;main 套餐热修必须基于其纯 Asynq 代码独立实施。 Tested: git diff --check;openspec validate fix-package-activation-starvation --strict。 Not-tested: 按用户要求未运行自动化测试;go build ./... 因当前审计改造中的 Enterprise 模型字面量和 role.recordFailure 参数类型错误未通过。
34 lines
1.1 KiB
Go
34 lines
1.1 KiB
Go
// Package auditfailure 提供失败审计二次写入故障的最小进程内观测。
|
|
package auditfailure
|
|
|
|
import (
|
|
"sync/atomic"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/break/junhong_cmp_fiber/pkg/logger"
|
|
)
|
|
|
|
var secondaryWriteFailures atomic.Uint64
|
|
|
|
// RecordSecondaryWriteFailure 累计失败审计二次写入故障并记录 critical 安全日志。
|
|
func RecordSecondaryWriteFailure(action, resourceKey, requestID, correlationID, originalErrorCode string, err error) {
|
|
count := secondaryWriteFailures.Add(1)
|
|
logger.GetAppLogger().Error(
|
|
"失败或拒绝审计二次写入失败",
|
|
zap.String("severity", "critical"),
|
|
zap.String("action", action),
|
|
zap.String("resource_key", resourceKey),
|
|
zap.String("request_id", requestID),
|
|
zap.String("correlation_id", correlationID),
|
|
zap.String("original_error_code", originalErrorCode),
|
|
zap.Uint64("secondary_write_failure_count", count),
|
|
zap.Error(err),
|
|
)
|
|
}
|
|
|
|
// SecondaryWriteFailureCount 返回当前进程累计的失败审计二次写入故障数。
|
|
func SecondaryWriteFailureCount() uint64 {
|
|
return secondaryWriteFailures.Load()
|
|
}
|