perf: 并行化 admin 聚合路由并完善前端缓存预取

- gateway: usage detail / provider summary / pool overview / users list 改为 tokio join 并行拉取依赖数据
- usage: interval timeline 支持自动刷新并按查询区间动态展示,取消服务端 120 分钟过滤并在 ScatterChart 统一封顶
- frontend: 新增管理端导航预取工具及 SidebarNav/MainLayout 触发,admin 读接口统一走 cachedRequest 的短期缓存
- dashboard: request detail 支持短 TTL 缓存并在 UsageRecordsTable mousedown 时预取
- data: migrate 测试在 wait_for_postgres 失败时清理子进程,避免遗留
This commit is contained in:
fawney19
2026-04-19 15:17:25 +08:00
parent 97cd877ce5
commit 41b51f10a9
30 changed files with 619 additions and 243 deletions
+11 -3
View File
@@ -1,4 +1,5 @@
import apiClient from './client'
import { cachedRequest } from '@/utils/cache'
import type { UserSession as SessionRecord } from '@/types/session'
export interface User {
@@ -70,9 +71,16 @@ export interface UpsertUserApiKeyRequest {
export type UserSession = SessionRecord
export const usersApi = {
async getAllUsers(): Promise<User[]> {
const response = await apiClient.get<User[]>('/api/admin/users')
return response.data
async getAllUsers(options: { cacheTtlMs?: number } = {}): Promise<User[]> {
const cacheTtlMs = options.cacheTtlMs ?? 0
return cachedRequest(
'admin:users:list',
async () => {
const response = await apiClient.get<User[]>('/api/admin/users')
return response.data
},
cacheTtlMs,
)
},
async getUser(userId: string): Promise<User> {