fix(pkg/providers):do regex precompile insteadd on the fly

This commit is contained in:
ItsT0ng 2026-02-28 22:46:06 +11:00
parent 71bdeb41c9
commit 7e55680c6b

View file

@ -6,6 +6,12 @@ import (
"strings" "strings"
) )
// Common patterns in Go HTTP error messages
var httpStatusPatterns = []*regexp.Regexp{
regexp.MustCompile(`status[:\s]+(\d{3})`),
regexp.MustCompile(`HTTP[/\s]+\d*\.?\d*\s+(\d{3})`),
}
// errorPattern defines a single pattern (string or regex) for error classification. // errorPattern defines a single pattern (string or regex) for error classification.
type errorPattern struct { type errorPattern struct {
substring string substring string
@ -200,18 +206,11 @@ func classifyByMessage(msg string) FailoverReason {
// extractHTTPStatus extracts an HTTP status code from an error message. // extractHTTPStatus extracts an HTTP status code from an error message.
// Looks for patterns like "status: 429", "status 429", "HTTP 429", or standalone "429". // Looks for patterns like "status: 429", "status 429", "HTTP 429", or standalone "429".
func extractHTTPStatus(msg string) int { func extractHTTPStatus(msg string) int {
// Common patterns in Go HTTP error messages for _, p := range httpStatusPatterns {
patterns := []*regexp.Regexp{
regexp.MustCompile(`status[:\s]+(\d{3})`),
regexp.MustCompile(`HTTP[/\s]+\d*\.?\d*\s+(\d{3})`),
}
for _, p := range patterns {
if m := p.FindStringSubmatch(msg); len(m) > 1 { if m := p.FindStringSubmatch(msg); len(m) > 1 {
return parseDigits(m[1]) return parseDigits(m[1])
} }
} }
return 0 return 0
} }