Files
junhong_cmp_fiber/pkg/auditfailure/observer.go
break b3499adfca 固化七月迭代审计治理进展以隔离线上热修
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 参数类型错误未通过。
2026-08-03 09:47:22 +08:00

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()
}