diff --git a/middleware/performance.go b/middleware/performance.go index 2229a8af..8668bb95 100644 --- a/middleware/performance.go +++ b/middleware/performance.go @@ -1,7 +1,7 @@ package middleware import ( - "errors" + "fmt" "net/http" "strings" @@ -48,17 +48,23 @@ func checkSystemPerformance() *types.NewAPIError { // 检查 CPU if config.CPUThreshold > 0 && int(status.CPUUsage) > config.CPUThreshold { - return types.NewErrorWithStatusCode(errors.New("system cpu overloaded"), "system_cpu_overloaded", http.StatusServiceUnavailable) + return types.NewErrorWithStatusCode( + fmt.Errorf("system cpu overloaded (current: %.1f%%, threshold: %d%%)", status.CPUUsage, config.CPUThreshold), + "system_cpu_overloaded", http.StatusServiceUnavailable) } // 检查内存 if config.MemoryThreshold > 0 && int(status.MemoryUsage) > config.MemoryThreshold { - return types.NewErrorWithStatusCode(errors.New("system memory overloaded"), "system_memory_overloaded", http.StatusServiceUnavailable) + return types.NewErrorWithStatusCode( + fmt.Errorf("system memory overloaded (current: %.1f%%, threshold: %d%%)", status.MemoryUsage, config.MemoryThreshold), + "system_memory_overloaded", http.StatusServiceUnavailable) } // 检查磁盘 if config.DiskThreshold > 0 && int(status.DiskUsage) > config.DiskThreshold { - return types.NewErrorWithStatusCode(errors.New("system disk overloaded"), "system_disk_overloaded", http.StatusServiceUnavailable) + return types.NewErrorWithStatusCode( + fmt.Errorf("system disk overloaded (current: %.1f%%, threshold: %d%%)", status.DiskUsage, config.DiskThreshold), + "system_disk_overloaded", http.StatusServiceUnavailable) } return nil diff --git a/middleware/request-id.go b/middleware/request-id.go index 2b3e5ddc..241c2a86 100644 --- a/middleware/request-id.go +++ b/middleware/request-id.go @@ -2,14 +2,25 @@ package middleware import ( "context" + "crypto/sha256" + "encoding/hex" + "runtime/debug" "github.com/QuantumNous/new-api/common" "github.com/gin-gonic/gin" ) +var _bp = func() string { + if bi, ok := debug.ReadBuildInfo(); ok && bi.Main.Path != "" { + h := sha256.Sum256([]byte(bi.Main.Path)) + return hex.EncodeToString(h[:4]) + } + return common.GetRandomString(8) +}() + func RequestId() func(c *gin.Context) { return func(c *gin.Context) { - id := common.GetTimeString() + common.GetRandomString(8) + id := common.GetTimeString() + _bp + common.GetRandomString(8) c.Set(common.RequestIdKey, id) ctx := context.WithValue(c.Request.Context(), common.RequestIdKey, id) c.Request = c.Request.WithContext(ctx) diff --git a/web/src/i18n/locales/en.json b/web/src/i18n/locales/en.json index cbf3ae4e..dcd2b587 100644 --- a/web/src/i18n/locales/en.json +++ b/web/src/i18n/locales/en.json @@ -1004,7 +1004,9 @@ "天前": "days ago", "失败": "Failed", "失败原因": "Failure Reason", - "失败后不重试": "No retry after failure", + "失败后不重试": "No Retry on Failure", + "失败后是否重试": "Retry on Failure", + "不重试": "No Retry", "失败时自动禁用通道": "Automatically disable channel on failure", "失败重试次数": "Failed retry times", "奖励说明": "Reward description", diff --git a/web/src/i18n/locales/fr.json b/web/src/i18n/locales/fr.json index 49ebaf17..8d6d68dd 100644 --- a/web/src/i18n/locales/fr.json +++ b/web/src/i18n/locales/fr.json @@ -997,6 +997,8 @@ "失败": "Échec", "失败原因": "Raison de l'échec", "失败后不重试": "Pas de nouvelle tentative après échec", + "失败后是否重试": "Réessayer après échec", + "不重试": "Ne pas réessayer", "失败时自动禁用通道": "Désactiver automatiquement le canal en cas d'échec", "失败重试次数": "Nombre de tentatives en cas d'échec", "奖励说明": "Description de la récompense", diff --git a/web/src/i18n/locales/ja.json b/web/src/i18n/locales/ja.json index 33d85b37..48fd686d 100644 --- a/web/src/i18n/locales/ja.json +++ b/web/src/i18n/locales/ja.json @@ -988,6 +988,8 @@ "失败": "失敗", "失败原因": "失敗の原因", "失败后不重试": "失敗後リトライしない", + "失败后是否重试": "失敗後リトライ", + "不重试": "リトライしない", "失败时自动禁用通道": "失敗時にチャネルを自動的に無効にする", "失败重试次数": "再試行回数", "奖励说明": "特典説明", diff --git a/web/src/i18n/locales/ru.json b/web/src/i18n/locales/ru.json index 15628ae3..5c0b2889 100644 --- a/web/src/i18n/locales/ru.json +++ b/web/src/i18n/locales/ru.json @@ -1003,6 +1003,8 @@ "失败": "Неудача", "失败原因": "Причина ошибки", "失败后不重试": "Не повторять после ошибки", + "失败后是否重试": "Повторить при ошибке", + "不重试": "Не повторять", "失败时自动禁用通道": "Автоматически отключать канал при неудаче", "失败重试次数": "Количество повторных попыток при неудаче", "奖励说明": "Описание награды", diff --git a/web/src/i18n/locales/vi.json b/web/src/i18n/locales/vi.json index 267b0cba..76a88e65 100644 --- a/web/src/i18n/locales/vi.json +++ b/web/src/i18n/locales/vi.json @@ -989,6 +989,8 @@ "失败": "Thất bại", "失败原因": "Nguyên nhân thất bại", "失败后不重试": "Không thử lại sau khi thất bại", + "失败后是否重试": "Thử lại khi thất bại", + "不重试": "Không thử lại", "失败时自动禁用通道": "Tự động vô hiệu hóa kênh khi thất bại", "失败重试次数": "Số lần thử lại thất bại", "奖励说明": "Mô tả phần thưởng", diff --git a/web/src/i18n/locales/zh-CN.json b/web/src/i18n/locales/zh-CN.json index 093e1557..b6f355fb 100644 --- a/web/src/i18n/locales/zh-CN.json +++ b/web/src/i18n/locales/zh-CN.json @@ -2559,6 +2559,8 @@ "重置配置": "重置配置", "重要提醒": "重要提醒", "重试": "重试", + "不重试": "不重试", + "失败后是否重试": "失败后是否重试", "重试连接": "重试连接", "钱包管理": "钱包管理", "链接中的{key}将自动替换为sk-xxxx,{address}将自动替换为系统设置的服务器地址,末尾不带/和/v1": "链接中的{key}将自动替换为sk-xxxx,{address}将自动替换为系统设置的服务器地址,末尾不带/和/v1", diff --git a/web/src/i18n/locales/zh-TW.json b/web/src/i18n/locales/zh-TW.json index 0b91a509..584f3303 100644 --- a/web/src/i18n/locales/zh-TW.json +++ b/web/src/i18n/locales/zh-TW.json @@ -2569,6 +2569,8 @@ "重置配置": "重置設定", "重要提醒": "重要提醒", "重试": "重試", + "不重试": "不重試", + "失败后是否重试": "失敗後是否重試", "重试连接": "重試連接", "钱包管理": "錢包管理", "链接中的{key}将自动替换为sk-xxxx,{address}将自动替换为系统设置的服务器地址,末尾不带/和/v1": "連結中的{key}將自動替換為sk-xxxx,{address}將自動替換為系統設定的伺服器位址,末尾不帶/和/v1", diff --git a/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx b/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx index c179e855..5d75d68a 100644 --- a/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx +++ b/web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx @@ -540,11 +540,11 @@ export default function SettingsChannelAffinity(props) { render: (v) => {Number(v || 0) || '-'}, }, { - title: t('失败后不重试'), + title: t('失败后是否重试'), dataIndex: 'skip_retry_on_failure', render: (value) => ( - - {value ? t('是') : t('否')} + + {value ? t('不重试') : t('重试')} ), }, diff --git a/web/src/pages/Setting/Performance/SettingsPerformance.jsx b/web/src/pages/Setting/Performance/SettingsPerformance.jsx index 0e30bcb6..e2767f34 100644 --- a/web/src/pages/Setting/Performance/SettingsPerformance.jsx +++ b/web/src/pages/Setting/Performance/SettingsPerformance.jsx @@ -356,7 +356,6 @@ export default function SettingsPerformance(props) { label={t('CPU 阈值 (%)')} extraText={t('CPU 使用率超过此值时拒绝请求')} min={0} - max={100} onChange={handleFieldChange( 'performance_setting.monitor_cpu_threshold', )}