fix(errors): 区分平台限流并保留上游状态码

原因:公开错误层将平台并发限流误标为上游限流,并把多种上游 4xx 统一压成 400,影响定位和客户端处理。

影响:新增公开错误 source,平台限流使用 gateway_rate_limited,上游请求按安全分类返回对应状态;数据库与管理端继续保留原始错误码、消息和状态用于审计。

验证:Go 全量测试、pnpm test、pnpm lint、pnpm build、pnpm openapi、gofmt 和 diff 检查均通过。
This commit is contained in:
2026-08-04 10:46:46 +08:00
parent 0f0998cbcf
commit fe56aa46b9
21 changed files with 289 additions and 22 deletions
+6
View File
@@ -15,6 +15,7 @@ var observed = struct {
upstreamInvalidResponse atomic.Uint64
upstreamAuthFailed atomic.Uint64
upstreamRequestRejected atomic.Uint64
gatewayRateLimited atomic.Uint64
storageWriteFailed atomic.Uint64
storageReadFailed atomic.Uint64
resultExpired atomic.Uint64
@@ -39,6 +40,10 @@ func Observe(value Error) {
observed.upstreamAuthFailed.Add(1)
case "upstream_request_rejected":
observed.upstreamRequestRejected.Add(1)
case "upstream_invalid_request", "upstream_not_found", "upstream_method_not_allowed", "upstream_conflict", "upstream_payload_too_large", "upstream_unsupported_media_type", "upstream_unprocessable_request":
observed.upstreamRequestRejected.Add(1)
case "gateway_rate_limited":
observed.gatewayRateLimited.Add(1)
case "storage_write_failed":
observed.storageWriteFailed.Add(1)
case "storage_read_failed":
@@ -63,6 +68,7 @@ func MetricSnapshot() []MetricCount {
{Code: "upstream_invalid_response", Count: observed.upstreamInvalidResponse.Load()},
{Code: "upstream_auth_failed", Count: observed.upstreamAuthFailed.Load()},
{Code: "upstream_request_rejected", Count: observed.upstreamRequestRejected.Load()},
{Code: "gateway_rate_limited", Count: observed.gatewayRateLimited.Load()},
{Code: "storage_write_failed", Count: observed.storageWriteFailed.Load()},
{Code: "storage_read_failed", Count: observed.storageReadFailed.Load()},
{Code: "result_expired", Count: observed.resultExpired.Load()},