mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-08 18:37:46 +08:00
feat(usage): 管理员用量统计支持筛选刷新与失败保留旧数据
- 用量统计/聚合接口新增 skipCache 选项与 120s 超时,便于强制绕过缓存 - loadStats 增加 force/preserveOnFailure 选项,背景刷新失败时保留旧数据 - 管理员页面在用户/模型/Provider 筛选变化时强制刷新统计,并将筛选条件传入统计接口 - 手动刷新与自动刷新分离,自动刷新不再重载长期热力图相关聚合
This commit is contained in:
@@ -219,4 +219,51 @@ describe('useUsageData', () => {
|
||||
expect(providerStats.value.map(item => item.provider)).toEqual(['OpenAI'])
|
||||
expect(availableProviders.value).toEqual(['OpenAI'])
|
||||
})
|
||||
|
||||
it('keeps previous admin provider stats when a background refresh fails', async () => {
|
||||
const isAdminPage = ref(true)
|
||||
const { loadStats, providerStats, availableProviders } = useUsageData({ isAdminPage })
|
||||
const dateRange = { preset: 'last7days', tz_offset_minutes: 0 }
|
||||
|
||||
getUsageStatsMock.mockResolvedValueOnce({
|
||||
total_requests: 3,
|
||||
total_tokens: 300,
|
||||
total_cost: 1,
|
||||
avg_response_time: 0,
|
||||
})
|
||||
getUsageByProviderMock.mockResolvedValueOnce([
|
||||
{
|
||||
provider: 'OpenAI',
|
||||
request_count: 3,
|
||||
total_tokens: 300,
|
||||
total_cost: 1.23,
|
||||
actual_cost: 1.5,
|
||||
avg_response_time_ms: 1250,
|
||||
success_rate: 100,
|
||||
},
|
||||
])
|
||||
|
||||
await loadStats(dateRange)
|
||||
|
||||
getUsageStatsMock.mockResolvedValueOnce({
|
||||
total_requests: 4,
|
||||
total_tokens: 400,
|
||||
total_cost: 2,
|
||||
avg_response_time: 0,
|
||||
})
|
||||
getUsageByProviderMock.mockRejectedValueOnce({
|
||||
response: { status: 500 },
|
||||
message: 'provider aggregation failed',
|
||||
})
|
||||
|
||||
const hadFailure = await loadStats(dateRange, { preserveOnFailure: true })
|
||||
|
||||
expect(hadFailure).toBe(true)
|
||||
expect(providerStats.value).toHaveLength(1)
|
||||
expect(providerStats.value[0]).toMatchObject({
|
||||
provider: 'OpenAI',
|
||||
requests: 3,
|
||||
})
|
||||
expect(availableProviders.value).toEqual(['OpenAI'])
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user