Dashboard 功能
用户配额
用户配额页面让管理员能够集中查看和监控所有用户的配额使用情况。通过直观的卡片式布局和可视化进度条,您可以快速了解每位用户的资源消耗状态,及时发现潜在的超限风险。
页面概览
用户配额页面位于 配额管理 > 用户配额 菜单下,主要包含以下部分:
- 标题区域:显示页面标题和当前用户总数
- 提示信息:提供用户管理页面的快捷入口
- 工具栏:搜索、筛选、排序和刷新功能
- 配额卡片列表:以卡片形式展示每位用户的配额信息
权限说明
用户配额管理页面(/dashboard/quotas/users)仅对管理员开放。普通用户可通过「我的配额」页面查看自己的配额使用情况。
个人配额页面(我的配额)
v0.3.37 新增
非管理员用户现可通过独立的「我的配额」页面查看个人配额使用情况。
页面入口
非管理员用户登录后,可通过以下方式访问个人配额页面:
- 导航菜单:点击「我的配额」菜单项
- 直接访问:
/dashboard/my-quota
页面功能
个人配额页面复用了 QuotaCards 组件,展示当前用户的配额信息:
| 信息项 | 说明 |
|---|---|
| RPM 使用 | 每分钟请求数的当前使用量和限制 |
| 每日消费 | 今日消费金额和每日限额 |
| 5 小时消费 | 近 5 小时消费和限额(如有配置) |
| 周消费 | 本周消费和周限额(如有配置) |
| 月消费 | 本月消费和月限额(如有配置) |
| 总消费 | 历史累计消费和总消费上限(如有配置) |
| 账户状态 | 账户的启用状态和过期时间 |
与管理员页面的区别
| 功能 | 管理员配额页面 | 个人配额页面 |
|---|---|---|
| 查看范围 | 所有用户 | 仅自己 |
| 用户搜索 | 支持 | 不支持 |
| 筛选排序 | 支持 | 不支持 |
| Key 列表 | 显示所有 Key | 显示自己的 Key |
| 修改配额 | 可跳转用户管理 | 不可修改 |
v0.3.33 优化
v0.3.33 版本对配额显示组件进行了多项优化:
百分比计算改进
- 修复了配额使用百分比的计算精度问题
- 当限额为 0 时正确显示为「无限制」而非错误百分比
倒计时逻辑优化
- 修复了每日配额重置倒计时的显示问题
- 支持固定时间和滚动窗口两种重置模式的准确倒计时
数据缓存处理
- 改进了配额数据的缓存策略,减少重复请求
- 修复了用户限额徽章的数据缓存和错误状态处理
工具栏功能
搜索
在搜索框中输入用户名称,可以快速定位特定用户。搜索支持模糊匹配,不区分大小写。
筛选
通过筛选下拉菜单,您可以按配额使用状态筛选用户:
| 筛选选项 | 说明 |
|---|---|
| 全部 | 显示所有用户 |
| 警告中 | 显示配额使用率在 60% - 99% 之间的用户 |
| 已超限 | 显示配额使用率达到或超过 100% 的用户 |
排序
支持两种排序方式:
- 按名称:按用户名称的字母顺序排列
- 按使用率:按每日消费配额使用率从高到低排列
刷新控制
- 手动刷新:点击刷新按钮立即更新数据
- 自动刷新:开启后可选择 10 秒、30 秒或 60 秒的自动刷新间隔
配额卡片
每个用户配额卡片包含以下信息:
卡片头部
- 用户名称:显示用户的名称
- 角色徽章:显示用户角色(admin 或 user)
- 供应商组徽章:如果用户配置了专属供应商组,会显示带颜色的徽章
- 标签列表:显示用户标签(最多显示 3 个,超出部分显示数量)
- 备注:显示用户的备注信息
- 有效期状态:显示用户的到期时间和状态徽章(活跃、即将过期、已过期、已禁用)
历史总消费
每个用户配额卡片右上角显示该用户的历史总消费金额:
- 显示位置:卡片头部右侧,以大字号突出显示
- 统计范围:从用户创建至今的所有历史消费(约 100 年,36500 天)
- 数据来源:通过
sumUserTotalCost函数从message_request表聚合计算 - 货币单位:根据系统设置的显示货币进行格式化
关于总消费统计
历史总消费统计会查询用户所有 Key 在整个使用期间的消费总和。系统设置了 36500 天(约 100 年)的查询范围上限,以优化数据库查询性能。
RPM 限额(每分钟请求数)
显示用户的每分钟请求限制:
- 当前值 / 限制值:如
0 / 60 - 进度条:可视化显示当前使用比例
- 说明文字:提示这是每分钟的请求窗口
关于 RPM 显示
RPM 采用滑动窗口机制,页面上显示的当前值为参考值。实际的 RPM 限制检查在每次 API 请求时实时进行。
每日消费限额
显示用户的每日消费(美元)使用情况:
- 当前消费 / 限额:以配置的货币单位显示,如
$0.50 / $100.00 - 彩色进度条:根据使用率显示不同颜色
- 重置时间:显示距离下次重置的倒计时
每日配额设置为 0 表示无限制
当用户的每日消费限额设置为 0 时,系统会跳过该用户的每日消费检查,该用户没有每日消费限制。这适用于需要不受配额约束的特殊用户(如管理员或 VIP 用户)。在用户编辑页面设置每日限额时,输入 0 即可取消限制。
进度条颜色含义
配额进度条会根据使用率自动变色:
| 使用率 | 颜色 | 状态 |
|---|---|---|
| 0% - 59% | 蓝色(主色) | 正常 |
| 60% - 79% | 黄色 | 警告 |
| 80% - 99% | 橙色 | 危险 |
| 100% 及以上 | 红色 | 已超限 |
Key 列表与总消费
每个用户卡片底部会显示该用户的 Key 列表,展示每个 Key 的总消费情况:
- Key 预览:默认显示消费最高的前 3 个 Key,格式为
Key名称 . 总消费金额 - 展开查看:点击 "+N more" 按钮可展开查看所有 Key 的详细信息
- Key 详情:展开后显示每个 Key 的名称、状态、历史总消费、今日消费、总消费限额
Key 的历史总消费数据通过 sumKeyTotalCostById 函数获取:
- 查询方式:根据 Key ID 查询对应 API Key 的所有历史消费记录
- 统计范围:与用户总消费相同,查询约 100 年(36500 天)的数据
- 排序规则:Key 列表按今日消费降序排列,今日消费相同时按历史总消费降序
页面分组显示
用户配额列表会自动将用户分为两组显示:
有配额限制的用户
展示设置了任意配额限制的用户,包括:
- RPM 限制
- 每日消费限额
- 5 小时限额
- 每周限额
- 每月限额
- 总消费限额
- 并发 Session 限制
此分组默认展开,方便管理员监控配额使用情况。
无限制用户
展示未设置任何配额限制的用户。此分组默认收起,点击可展开查看。每个用户卡片会显示:
- 用户基本信息
- 历史总消费金额
- Key 列表及其总消费
管理用户配额
用户配额页面仅用于查看配额使用情况。如需修改用户的配额设置,请点击页面顶部提示信息中的"用户管理"链接,进入用户管理页面进行配置。
在用户管理页面,您可以为每位用户设置:
- RPM:每分钟请求数限制
- 每日限额:每日消费金额上限(美元),设置为 0 表示无限制
- 5 小时限额:5 小时滚动窗口内的消费上限
- 每周限额:每周消费金额上限
- 每月限额:每月消费金额上限
- 总消费上限:历史累计消费上限(美元),限制用户/Key 的所有时间总消费
- 并发 Session 限制:同时进行的会话数上限
配额检查逻辑
系统在处理每个 API 请求时会检查用户的配额限制。
配额检查顺序
系统按以下顺序检查配额:
- 总消费上限 (limitTotalUsd) - 历史累计消费
- 月限额 (limitMonthlyUsd) - 当月消费
- 周限额 (limitWeeklyUsd) - 当周消费
- 每日限额 (dailyQuota/limitDailyUsd) - 当日消费
- 5 小时限额 (limit5hUsd) - 近 5 小时消费
任何一项超限都会导致请求被拒绝。
每日消费限额检查
对于每日消费限额,检查逻辑如下:
- 获取配额设置:从用户配置中读取每日消费限额值
- 判断是否启用限制:如果每日限额值小于等于 0,则跳过检查,允许请求通过
- 计算当前消费:优先从 Redis 缓存读取,缓存未命中时从数据库查询
- 比较与拦截:如果当前消费已达到或超过限额,返回拒绝响应
配额值为 0 的特殊含义
配额值为 0 表示无限制,不是禁止使用。如需完全禁止用户使用,请使用「启用状态」开关禁用用户或密钥。
系统将配额值 0 或负数视为「无限制」。这意味着:
- 每日限额设置为 0:用户没有每日消费限制
- RPM 设置为 0:用户没有每分钟请求数限制
- 总消费上限设置为 0:用户没有历史累计消费限制
请谨慎使用此功能,建议仅对管理员或特殊用户启用无限制配额。
数据来源
用户配额数据来自以下渠道:
- RPM 数据:从 Redis 滑动窗口中获取(如 Redis 不可用则显示 0)
- 消费数据:从数据库聚合计算当日消费总额
- 历史总消费:通过
sumUserTotalCost和sumKeyTotalCostById函数从数据库查询
总消费统计实现
系统使用以下函数统计历史总消费:
| 函数名 | 用途 | 数据源 |
|---|---|---|
sumUserTotalCost | 用户历史总消费 | 聚合用户所有 Key 的 message_request 记录 |
sumKeyTotalCostById | Key 历史总消费 | 聚合指定 Key 的 message_request 记录 |
这两个函数位于 src/repository/statistics.ts,查询时会设置时间边界(默认约 100 年)以避免全表扫描,优化查询性能。
系统采用 Fail-Open 策略:当 Redis 不可用时,限流检查会自动降级,确保服务可用性不受影响。
空状态提示
当列表中没有用户数据时,页面会显示相应的提示信息:
- 搜索无结果:当搜索条件未匹配到任何用户时,显示"没有匹配的结果"
- 无用户数据:当系统中没有任何用户或配额数据时,显示"暂无数据"
使用场景
日常监控
定期查看用户配额页面,关注使用率较高的用户,提前预警可能的超限情况。
成本控制
通过筛选"警告中"或"已超限"用户,快速定位需要关注的用户,进行配额调整或沟通。
团队管理
按使用率排序查看团队成员的 AI 工具使用情况,了解资源消耗分布,为配额分配决策提供依据。
