feat(usage): 记录并展示失败请求(用户端+管理端)

- 记录失败请求并在用户端/管理端展示;分类下拉改用统一 Select 组件
- 模型过滤改后端 ILIKE 模糊匹配;新增「Key 名称」列(含已删除标记)与按 Key 过滤;时间列移至末列
- 用户可见「已删除 key 失败请求」:OpsErrorLogFilter 加 MatchDeletedKeyOwner,用户侧归属
  放宽为 (user_id OR deleted_key_owner_user_id),让 key 原所有者能看到删除 key 后继续请求
  导致的认证失败记录(他人仍 NotFound,不泄露存在性)
- 迁移 148:ops_error_logs 用户+时间索引

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DaydreamCoding
2026-06-05 14:00:57 +08:00
committed by QTom
co-authored by Claude Opus 4.8
parent ddf063352a
commit cfb195c7b2
37 changed files with 1746 additions and 84 deletions
+31
View File
@@ -234,6 +234,7 @@ export interface PublicSettings {
channel_monitor_default_interval_seconds: number
available_channels_enabled: boolean
affiliate_enabled: boolean
allow_user_view_error_requests?: boolean
}
export interface AuthResponse {
@@ -1592,6 +1593,36 @@ export interface ExtendSubscriptionRequest {
// ==================== Query Parameters ====================
export interface UserErrorRequest {
id: number
created_at: string
model: string
inbound_endpoint: string
status_code: number
category: string
platform: string
message: string
key_name: string
key_deleted: boolean
}
export interface UserErrorRequestDetail extends UserErrorRequest {
error_body: string
upstream_status_code?: number
}
export interface UserErrorListParams {
page?: number
page_size?: number
start_date?: string
end_date?: string
timezone?: string
model?: string
status_code?: number
category?: string
api_key_id?: number
}
export interface UsageQueryParams {
page?: number
page_size?: number