a0f6582914
- 后台密钥管理「代理设置」列改为完整明文展示(含账号密码),便于运维核对; 新增 full 字段仅对代理模块下发,密钥两列保持脱敏 - 新增 biz_user_secret_usage_daily(V117):用户 × 模块 × 天累计真实对外请求次数 - 计次口径:LLM 每次真实 HTTP 请求(含重试)计 1 次;代理每次成功提取计 1 次 - LLM 埋点走 SecretUsageContext 上下文(批次外设置、线程池内快照恢复) - 新增内部上报接口 /api/internal/user-secret-usage(X-Internal-Token) - 新增后台页「密钥用量统计」:日期范围 + 用户名 + 分组筛选,含范围内汇总
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import { http } from './http'
|
||
import { unwrap } from './envelope'
|
||
|
||
/** 单用户一行:三类密钥调用次数 + 合计(口径=真实对外请求次数)。 */
|
||
export interface AdminUserSecretUsageRow {
|
||
userId: number
|
||
username: string
|
||
groups: string[]
|
||
similarAsinCount: number
|
||
appearancePatentCount: number
|
||
proxyCount: number
|
||
totalCount: number
|
||
}
|
||
|
||
export interface AdminUserSecretUsagePage {
|
||
items: AdminUserSecretUsageRow[]
|
||
total: number
|
||
page: number
|
||
pageSize: number
|
||
/** 所选范围内(不分页)三类总次数。 */
|
||
totalCalls: number
|
||
similarAsinCalls: number
|
||
appearancePatentCalls: number
|
||
proxyCalls: number
|
||
groupOptions?: Array<{ id: number; groupName: string }>
|
||
}
|
||
|
||
export interface UserSecretUsageQuery {
|
||
startDate?: string
|
||
endDate?: string
|
||
keyword?: string
|
||
/** 按数据权限分组筛选(仅超管生效);后端参数为 snake_case。 */
|
||
groupId?: number
|
||
page: number
|
||
pageSize: number
|
||
}
|
||
|
||
/** 分页查询密钥用量:GET /api/admin/user-secret-usage(group_id 必须 snake_case)。 */
|
||
export async function fetchUserSecretUsage(params: UserSecretUsageQuery): Promise<AdminUserSecretUsagePage> {
|
||
const query: Record<string, string | number> = { page: params.page, pageSize: params.pageSize }
|
||
if (params.startDate) query.startDate = params.startDate
|
||
if (params.endDate) query.endDate = params.endDate
|
||
if (params.keyword) query.keyword = params.keyword
|
||
if (params.groupId) query.group_id = params.groupId
|
||
const { data } = await http.get('/api/admin/user-secret-usage', { params: query })
|
||
return unwrap<AdminUserSecretUsagePage>(data)
|
||
}
|