From ac5566b141384615ef06d1eaa4e8ce0f23d5afa6 Mon Sep 17 00:00:00 2001 From: qian Date: Sat, 6 Jun 2026 11:59:58 +0800 Subject: [PATCH] =?UTF-8?q?improve(log):=E4=BC=98=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=98=BE=E7=A4=BA=EF=BC=8C=E9=9A=90=E8=97=8F=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/logic/tenant/audit_config.go | 2 +- internal/logic/tenant/billing.go | 21 ++++++++++++++----- .../src/views/service/UsageLogsPage.vue | 12 ++++------- .../src/views/service/playground/AudioTab.vue | 2 +- .../src/views/service/playground/ImageTab.vue | 2 +- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/internal/logic/tenant/audit_config.go b/internal/logic/tenant/audit_config.go index 784fd59..38e0d77 100644 --- a/internal/logic/tenant/audit_config.go +++ b/internal/logic/tenant/audit_config.go @@ -240,7 +240,7 @@ func (s *sTenant) TenantRequestAuditLogs(ctx context.Context, req *v1.TenantRequ } dataM := auditDB.Ctx(ctx).Model("aud_request_logs").Safe(). - Fields("id, request_id, user_id, project_id, method, path, query_params, status_code, client_ip, user_agent, latency_ms, first_token_ms, tenant_audit_level as audit_level, task_id, task_status, task_completed_at, created_at"). + Fields("id, request_id, tenant_id, user_id, project_id, api_key_id, method, path, query_params, status_code, client_ip, user_agent, latency_ms, first_token_ms, tenant_audit_level as audit_level, task_id, task_status, task_completed_at, created_at"). OrderDesc("created_at"). Page(page, pageSize) if where != "" { diff --git a/internal/logic/tenant/billing.go b/internal/logic/tenant/billing.go index c53dd6d..850a00a 100644 --- a/internal/logic/tenant/billing.go +++ b/internal/logic/tenant/billing.go @@ -198,7 +198,7 @@ func (s *sTenant) UsageLogs(ctx context.Context, req *v1.TenantUsageLogsReq) (*v } where := strings.Join(conditions, " AND ") - fromClause := "bil_usage_logs u LEFT JOIN tnt_users t ON u.user_id = t.id AND u.tenant_id = t.tenant_id LEFT JOIN tnt_projects p ON u.project_id = p.id LEFT JOIN api_keys ak ON u.api_key_id = ak.id" + fromClause := "bil_usage_logs u LEFT JOIN tnt_users t ON u.user_id = t.id AND u.tenant_id = t.tenant_id LEFT JOIN tnt_projects p ON u.project_id = p.id LEFT JOIN api_keys ak ON u.api_key_id = ak.id LEFT JOIN mdl_models mdl ON u.model_name = mdl.model_id" countSQL := "SELECT COUNT(*) AS total FROM " + fromClause + " WHERE " + where countResult, err := g.DB().Ctx(ctx).Query(ctx, countSQL, args...) @@ -211,7 +211,7 @@ func (s *sTenant) UsageLogs(ctx context.Context, req *v1.TenantUsageLogsReq) (*v } dataSQL := fmt.Sprintf( - `SELECT u.*, COALESCE(t.username, '') AS username, COALESCE(p.name, '') AS project_name, COALESCE(ak.name, '') AS api_key_name + `SELECT u.*, COALESCE(t.username, '') AS username, COALESCE(p.name, '') AS project_name, COALESCE(ak.name, '') AS api_key_name, COALESCE(mdl.model_name, '') AS model_display_name FROM %s WHERE %s ORDER BY u.created_at DESC LIMIT ? OFFSET ?`, fromClause, where, ) @@ -221,10 +221,20 @@ func (s *sTenant) UsageLogs(ctx context.Context, req *v1.TenantUsageLogsReq) (*v return nil, err } + // 需要从响应中移除的渠道相关字段 + channelFields := map[string]bool{ + "channel_name": true, + "channel_type": true, + "channel_id": true, + } + list := make([]map[string]any, 0, len(result)) for _, row := range result { m := make(map[string]any, len(row)) for k, v := range row { + if channelFields[k] { + continue + } switch raw := v.Val().(type) { case []byte: s := string(raw) @@ -264,7 +274,8 @@ func (s *sTenant) ExportUsageLogs(ctx context.Context, req *v1.TenantUsageLogsEx columns := []export.Column{ {Field: "id", Header: "ID"}, {Field: "username", Header: "用户名"}, - {Field: "model_name", Header: "模型"}, + {Field: "model_display_name", Header: "模型显示名称"}, + {Field: "model_name", Header: "模型标识"}, {Field: "request_type", Header: "请求类型"}, {Field: "input_tokens", Header: "输入Token"}, {Field: "output_tokens", Header: "输出Token"}, @@ -315,13 +326,13 @@ func (s *sTenant) ExportUsageLogs(ctx context.Context, req *v1.TenantUsageLogsEx } where := strings.Join(conditions, " AND ") - fromClause := "bil_usage_logs u LEFT JOIN tnt_users t ON u.user_id = t.id AND u.tenant_id = t.tenant_id LEFT JOIN tnt_projects p ON u.project_id = p.id LEFT JOIN api_keys ak ON u.api_key_id = ak.id" + fromClause := "bil_usage_logs u LEFT JOIN tnt_users t ON u.user_id = t.id AND u.tenant_id = t.tenant_id LEFT JOIN tnt_projects p ON u.project_id = p.id LEFT JOIN api_keys ak ON u.api_key_id = ak.id LEFT JOIN mdl_models mdl ON u.model_name = mdl.model_id" return nil, export.GenericExport(ctx, config, func(yield func(map[string]any) bool) { offset := 0 for { dataSQL := fmt.Sprintf( - `SELECT u.id, COALESCE(t.username, '') AS username, u.model_name, u.request_type, + `SELECT u.id, COALESCE(t.username, '') AS username, COALESCE(mdl.model_name, '') AS model_display_name, u.model_name, u.request_type, u.input_tokens, u.output_tokens, u.total_cost, u.status, u.created_at FROM %s WHERE %s ORDER BY u.created_at DESC LIMIT 1000 OFFSET ?`, fromClause, where, diff --git a/web/tenant/src/views/service/UsageLogsPage.vue b/web/tenant/src/views/service/UsageLogsPage.vue index 8091422..1f9ab9a 100644 --- a/web/tenant/src/views/service/UsageLogsPage.vue +++ b/web/tenant/src/views/service/UsageLogsPage.vue @@ -1,4 +1,4 @@ -