Skip to content

Commit 093d7ba

Browse files
committed
fix(ops): use normalized error type for all classification functions
- Compute normalizedType once and pass to classifyOpsPhase, classifyOpsSeverity, classifyOpsIsBusinessLimited, classifyOpsIsRetryable instead of raw parsed.ErrorType - Add test case verifying known type takes precedence over conflicting code Addresses Copilot review feedback on PR Wei-Shaw#680.
1 parent ce006a7 commit 093d7ba

2 files changed

Lines changed: 10 additions & 5 deletions

File tree

backend/internal/handler/ops_error_logger.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -662,8 +662,10 @@ func OpsErrorLoggerMiddleware(ops *service.OpsService) gin.HandlerFunc {
662662
requestID = c.Writer.Header().Get("x-request-id")
663663
}
664664

665-
phase := classifyOpsPhase(parsed.ErrorType, parsed.Message, parsed.Code)
666-
isBusinessLimited := classifyOpsIsBusinessLimited(parsed.ErrorType, phase, parsed.Code, status, parsed.Message)
665+
normalizedType := normalizeOpsErrorType(parsed.ErrorType, parsed.Code)
666+
667+
phase := classifyOpsPhase(normalizedType, parsed.Message, parsed.Code)
668+
isBusinessLimited := classifyOpsIsBusinessLimited(normalizedType, phase, parsed.Code, status, parsed.Message)
667669

668670
errorOwner := classifyOpsErrorOwner(phase, parsed.Message)
669671
errorSource := classifyOpsErrorSource(phase, parsed.Message)
@@ -685,8 +687,8 @@ func OpsErrorLoggerMiddleware(ops *service.OpsService) gin.HandlerFunc {
685687
UserAgent: c.GetHeader("User-Agent"),
686688

687689
ErrorPhase: phase,
688-
ErrorType: normalizeOpsErrorType(parsed.ErrorType, parsed.Code),
689-
Severity: classifyOpsSeverity(parsed.ErrorType, status),
690+
ErrorType: normalizedType,
691+
Severity: classifyOpsSeverity(normalizedType, status),
690692
StatusCode: status,
691693
IsBusinessLimited: isBusinessLimited,
692694
IsCountTokens: isCountTokensRequest(c),
@@ -698,7 +700,7 @@ func OpsErrorLoggerMiddleware(ops *service.OpsService) gin.HandlerFunc {
698700
ErrorSource: errorSource,
699701
ErrorOwner: errorOwner,
700702

701-
IsRetryable: classifyOpsIsRetryable(parsed.ErrorType, status),
703+
IsRetryable: classifyOpsIsRetryable(normalizedType, status),
702704
RetryCount: 0,
703705
CreatedAt: time.Now(),
704706
}

backend/internal/handler/ops_error_logger_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,9 @@ func TestNormalizeOpsErrorType(t *testing.T) {
263263
{"empty type with balance code", "", "INSUFFICIENT_BALANCE", "billing_error"},
264264
{"empty type with subscription code", "", "SUBSCRIPTION_NOT_FOUND", "subscription_error"},
265265
{"empty type no code", "", "", "api_error"},
266+
267+
// Known type overrides conflicting code-based mapping.
268+
{"known type overrides conflicting code", "rate_limit_error", "INSUFFICIENT_BALANCE", "rate_limit_error"},
266269
}
267270
for _, tt := range tests {
268271
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)