mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-03 01:40:21 +08:00
feat(rate-limit): 实现分层 RPM 限速,支持系统默认/用户/独立Key三级配置
- 新增用户级 rate_limit 字段,支持系统默认/用户自定义/不限制三种模式 - 独立 Key 的 rate_limit 语义调整:null=跟随系统默认,0=不限制,>0=自定义 - 实现 UserRpmLimiter 基于 Redis sliding window 的 RPM 限速引擎 - Pipeline 请求流程集成用户级 RPM 检查 - 管理后台和用户面板新增 RPM 限速配置与实时状态查看 - 系统设置新增全局默认 RPM 配置项 - 迁移脚本回填现有 API Key 的 rate_limit 默认值 - 新增用户/Key RPM 状态监控 API 和前端展示 Closes #231 Co-authored-by: LewisPen <LewisPen@nyadoo.com>
This commit is contained in:
@@ -159,3 +159,25 @@ export function formatHitRate(rate: number | undefined): string {
|
||||
if (typeof rate !== 'number' || Number.isNaN(rate)) return '-'
|
||||
return `${rate.toFixed(2)}%`
|
||||
}
|
||||
|
||||
// Rate limit formatting (supports "inherit" semantics: null = inherit system default)
|
||||
export function formatRateLimitInheritable(rateLimit?: number | null): string {
|
||||
if (rateLimit == null) return '跟随系统'
|
||||
if (rateLimit === 0) return '不限速'
|
||||
return `${rateLimit}/min`
|
||||
}
|
||||
|
||||
// Rate limit formatting (simple: null/0 both mean unlimited)
|
||||
export function formatRateLimitSimple(rateLimit?: number | null): string {
|
||||
if (rateLimit == null || rateLimit === 0) return '不限速'
|
||||
return `${rateLimit}/min`
|
||||
}
|
||||
|
||||
// Rate limit state helpers
|
||||
export function isRateLimitInherited(rateLimit?: number | null): boolean {
|
||||
return rateLimit == null
|
||||
}
|
||||
|
||||
export function isRateLimitUnlimited(rateLimit?: number | null): boolean {
|
||||
return rateLimit === 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user