Skip to content

Commit 3908d99

Browse files
feat(usage): /admin/usage 错误请求新增分类过滤
- 后端 GetErrorLogs/ListRequestErrors 新增 category 参数,复用 CategoryToFilter 反查映射,与 phase 可叠加 - UsageFilters errors 模式插入分类下拉(选项同用户端,other 不可反查不列),error_category 随 filters 透传 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent acbebca commit 3908d99

5 files changed

Lines changed: 34 additions & 0 deletions

File tree

backend/internal/handler/admin/ops_handler.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@ func (h *OpsHandler) GetErrorLogs(c *gin.Context) {
127127
filter.Phase = ""
128128
}
129129

130+
// 分类(用户侧粗分类码)→ phase/type ANY 条件,与用户端 /usage/errors 同一映射;
131+
// 未知分类返回空切片 = 不过滤。与 phase 参数可同时设置(AND 语义)。
132+
if cat := strings.TrimSpace(c.Query("category")); cat != "" {
133+
phases, types := service.CategoryToFilter(cat)
134+
filter.ErrorPhasesAny = phases
135+
filter.ErrorTypesAny = types
136+
}
137+
130138
if platform := strings.TrimSpace(c.Query("platform")); platform != "" {
131139
filter.Platform = platform
132140
}
@@ -249,6 +257,14 @@ func (h *OpsHandler) ListRequestErrors(c *gin.Context) {
249257
filter.Phase = ""
250258
}
251259

260+
// 分类(用户侧粗分类码)→ phase/type ANY 条件,与用户端 /usage/errors 同一映射;
261+
// 未知分类返回空切片 = 不过滤。与 phase 参数可同时设置(AND 语义)。
262+
if cat := strings.TrimSpace(c.Query("category")); cat != "" {
263+
phases, types := service.CategoryToFilter(cat)
264+
filter.ErrorPhasesAny = phases
265+
filter.ErrorTypesAny = types
266+
}
267+
252268
if platform := strings.TrimSpace(c.Query("platform")); platform != "" {
253269
filter.Platform = platform
254270
}

frontend/src/api/admin/ops.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,8 @@ export type OpsErrorListQueryParams = {
10981098
model?: string
10991099

11001100
phase?: string
1101+
// 分类(用户侧粗分类码,如 auth/rate_limit/upstream),后端反查为 phase/type ANY 条件
1102+
category?: string
11011103
error_owner?: string
11021104
error_source?: string
11031105
resolved?: string

frontend/src/api/admin/usage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ export interface AdminUsageQueryParams extends UsageQueryParams {
8888
sort_order?: 'asc' | 'desc'
8989
// 错误请求 tab 专属筛选(仅传给错误列表接口;共用同一 filters 对象)
9090
error_phase?: string | null
91+
error_category?: string | null
9192
status_code?: number | null
9293
}
9394

frontend/src/components/admin/usage/UsageFilters.vue

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@
145145
<Select v-model="filters.error_phase" :options="errorPhaseOptions" @change="emitChange" />
146146
</div>
147147

148+
<!-- Error Category Filter (errors only) -->
149+
<div v-if="mode === 'errors'" class="w-full sm:w-auto sm:min-w-[180px]">
150+
<label class="input-label">{{ t('usage.errors.category') }}</label>
151+
<Select v-model="filters.error_category" :options="errorCategoryOptions" @change="emitChange" />
152+
</div>
153+
148154
<!-- Status Code Filter (errors only) -->
149155
<div v-if="mode === 'errors'" class="w-full sm:w-auto sm:min-w-[180px]">
150156
<label class="input-label">{{ t('admin.ops.errorLog.status') }}</label>
@@ -270,6 +276,14 @@ const errorPhaseOptions = computed<SelectOption[]>(() => [
270276
{ value: 'internal', label: t('admin.ops.errorLog.typeInternal') },
271277
])
272278
279+
// 分类码同用户端 /usage 错误筛选;"other" 无法反查为过滤条件,刻意不列
280+
const errorCategoryCodes = ['auth', 'rate_limit', 'quota', 'invalid_request', 'service_unavailable', 'upstream', 'internal', 'cyber']
281+
282+
const errorCategoryOptions = computed<SelectOption[]>(() => [
283+
{ value: null, label: t('usage.errors.allCategories') },
284+
...errorCategoryCodes.map((c) => ({ value: c, label: t('usage.errors.categories.' + c) })),
285+
])
286+
273287
const commonErrorStatusCodes = [400, 401, 403, 404, 408, 413, 429, 499, 500, 502, 503, 504, 529]
274288
275289
const statusCodeOptions = computed<SelectOption[]>(() => [

frontend/src/views/admin/UsageView.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,7 @@ const loadAdminErrors = async () => {
732732
group_id: filters.value.group_id ?? undefined,
733733
model: filters.value.model || undefined,
734734
phase: filters.value.error_phase || undefined,
735+
category: filters.value.error_category || undefined,
735736
status_codes: filters.value.status_code != null ? String(filters.value.status_code) : undefined,
736737
sort_by: errSortBy.value,
737738
sort_order: errSortOrder.value,

0 commit comments

Comments
 (0)