fix: 修复账号管理页面容量列显示为0的bug
This commit is contained in:
@@ -240,13 +240,14 @@ func (h *AccountHandler) List(c *gin.Context) {
|
|||||||
var windowCosts map[int64]float64
|
var windowCosts map[int64]float64
|
||||||
var activeSessions map[int64]int
|
var activeSessions map[int64]int
|
||||||
var rpmCounts map[int64]int
|
var rpmCounts map[int64]int
|
||||||
if !lite {
|
|
||||||
// Get current concurrency counts for all accounts
|
// 始终获取并发数(Redis ZCARD,极低开销)
|
||||||
if h.concurrencyService != nil {
|
if h.concurrencyService != nil {
|
||||||
if cc, ccErr := h.concurrencyService.GetAccountConcurrencyBatch(c.Request.Context(), accountIDs); ccErr == nil && cc != nil {
|
if cc, ccErr := h.concurrencyService.GetAccountConcurrencyBatch(c.Request.Context(), accountIDs); ccErr == nil && cc != nil {
|
||||||
concurrencyCounts = cc
|
concurrencyCounts = cc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 识别需要查询窗口费用、会话数和 RPM 的账号(Anthropic OAuth/SetupToken 且启用了相应功能)
|
// 识别需要查询窗口费用、会话数和 RPM 的账号(Anthropic OAuth/SetupToken 且启用了相应功能)
|
||||||
windowCostAccountIDs := make([]int64, 0)
|
windowCostAccountIDs := make([]int64, 0)
|
||||||
sessionLimitAccountIDs := make([]int64, 0)
|
sessionLimitAccountIDs := make([]int64, 0)
|
||||||
@@ -268,7 +269,7 @@ func (h *AccountHandler) List(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取 RPM 计数(批量查询)
|
// 始终获取 RPM 计数(Redis GET,极低开销)
|
||||||
if len(rpmAccountIDs) > 0 && h.rpmCache != nil {
|
if len(rpmAccountIDs) > 0 && h.rpmCache != nil {
|
||||||
rpmCounts, _ = h.rpmCache.GetRPMBatch(c.Request.Context(), rpmAccountIDs)
|
rpmCounts, _ = h.rpmCache.GetRPMBatch(c.Request.Context(), rpmAccountIDs)
|
||||||
if rpmCounts == nil {
|
if rpmCounts == nil {
|
||||||
@@ -276,7 +277,7 @@ func (h *AccountHandler) List(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取活跃会话数(批量查询,传入各账号的 idleTimeout 配置)
|
// 始终获取活跃会话数(Redis ZCARD,低开销)
|
||||||
if len(sessionLimitAccountIDs) > 0 && h.sessionLimitCache != nil {
|
if len(sessionLimitAccountIDs) > 0 && h.sessionLimitCache != nil {
|
||||||
activeSessions, _ = h.sessionLimitCache.GetActiveSessionCountBatch(c.Request.Context(), sessionLimitAccountIDs, sessionIdleTimeouts)
|
activeSessions, _ = h.sessionLimitCache.GetActiveSessionCountBatch(c.Request.Context(), sessionLimitAccountIDs, sessionIdleTimeouts)
|
||||||
if activeSessions == nil {
|
if activeSessions == nil {
|
||||||
@@ -284,8 +285,8 @@ func (h *AccountHandler) List(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取窗口费用(并行查询)
|
// 仅非 lite 模式获取窗口费用(PostgreSQL 聚合查询,高开销)
|
||||||
if len(windowCostAccountIDs) > 0 {
|
if !lite && len(windowCostAccountIDs) > 0 {
|
||||||
windowCosts = make(map[int64]float64)
|
windowCosts = make(map[int64]float64)
|
||||||
var mu sync.Mutex
|
var mu sync.Mutex
|
||||||
g, gctx := errgroup.WithContext(c.Request.Context())
|
g, gctx := errgroup.WithContext(c.Request.Context())
|
||||||
@@ -311,7 +312,6 @@ func (h *AccountHandler) List(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
_ = g.Wait()
|
_ = g.Wait()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Build response with concurrency info
|
// Build response with concurrency info
|
||||||
result := make([]AccountWithConcurrency, len(accounts))
|
result := make([]AccountWithConcurrency, len(accounts))
|
||||||
|
|||||||
@@ -546,18 +546,27 @@ const {
|
|||||||
handlePageSizeChange: baseHandlePageSizeChange
|
handlePageSizeChange: baseHandlePageSizeChange
|
||||||
} = useTableLoader<Account, any>({
|
} = useTableLoader<Account, any>({
|
||||||
fetchFn: adminAPI.accounts.list,
|
fetchFn: adminAPI.accounts.list,
|
||||||
initialParams: { platform: '', type: '', status: '', group: '', search: '', lite: '1' }
|
initialParams: { platform: '', type: '', status: '', group: '', search: '' }
|
||||||
})
|
})
|
||||||
|
|
||||||
const resetAutoRefreshCache = () => {
|
const resetAutoRefreshCache = () => {
|
||||||
autoRefreshETag.value = null
|
autoRefreshETag.value = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isFirstLoad = ref(true)
|
||||||
|
|
||||||
const load = async () => {
|
const load = async () => {
|
||||||
hasPendingListSync.value = false
|
hasPendingListSync.value = false
|
||||||
resetAutoRefreshCache()
|
resetAutoRefreshCache()
|
||||||
pendingTodayStatsRefresh.value = false
|
pendingTodayStatsRefresh.value = false
|
||||||
|
if (isFirstLoad.value) {
|
||||||
|
;(params as any).lite = '1'
|
||||||
|
}
|
||||||
await baseLoad()
|
await baseLoad()
|
||||||
|
if (isFirstLoad.value) {
|
||||||
|
isFirstLoad.value = false
|
||||||
|
delete (params as any).lite
|
||||||
|
}
|
||||||
await refreshTodayStatsBatch()
|
await refreshTodayStatsBatch()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -689,7 +698,7 @@ const refreshAccountsIncrementally = async () => {
|
|||||||
type?: string
|
type?: string
|
||||||
status?: string
|
status?: string
|
||||||
search?: string
|
search?: string
|
||||||
lite?: string
|
|
||||||
},
|
},
|
||||||
{ etag: autoRefreshETag.value }
|
{ etag: autoRefreshETag.value }
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user