improve(log):优化日志显示,隐藏关键信息
This commit is contained in:
1 parent
9c32da15f0
commit
ac5566b141
5 files changed
+23
-16
No files matched your search
@@ -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 != "" {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<script setup lang="ts">
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import Icon from '@/components/common/Icon.vue'
|
||||
@@ -301,7 +301,7 @@ onMounted(() => {
|
||||
<th class="min-w-50">用户/项目</th>
|
||||
<th class="min-w-40">API Key</th>
|
||||
<th class="min-w-45">模型</th>
|
||||
<th class="min-w-40">渠道</th>
|
||||
<th class="min-w-40">模型显示名称</th>
|
||||
<th class="min-w-30">类型</th>
|
||||
<th class="min-w-30">Token</th>
|
||||
<th class="min-w-20">费用</th>
|
||||
@@ -332,9 +332,9 @@ onMounted(() => {
|
||||
</div>
|
||||
<span v-else class="font-medium text-gray-900">{{ log.model_name }}</span>
|
||||
</td>
|
||||
<!-- 渠道 -->
|
||||
<!-- 模型显示名称 -->
|
||||
<td>
|
||||
<span class="text-sm text-gray-700">{{ log.channel_name || '-' }}</span>
|
||||
<span class="text-sm text-gray-700">{{ log.model_display_name || '-' }}</span>
|
||||
</td>
|
||||
|
||||
<!-- 请求类型 -->
|
||||
@@ -601,10 +601,6 @@ onMounted(() => {
|
||||
<button class="text-xs text-primary-500 hover:text-primary-700 ml-1" @click.stop="$router.push({ path: '/tenant/task-logs', query: { public_task_id: detailLog.task_id } })">查看任务</button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">渠道</span>
|
||||
<span>{{ detailLog.channel_name || '-' }} <span v-if="detailLog.channel_type" class="text-xs text-gray-400">(类型: {{ detailLog.channel_type }})</span></span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">代理模式</span>
|
||||
<span class="font-mono text-xs">{{ detailLog.relay_mode || '-' }}</span>
|
||||
|
||||
@@ -49,7 +49,7 @@ async function synthesize() {
|
||||
input: inputText.value,
|
||||
voice: voice.value,
|
||||
response_format: responseFormat.value,
|
||||
}, { responseType: 'arraybuffer' })
|
||||
}, { responseType: 'arraybuffer', timeout: 180_000 })
|
||||
|
||||
// /v1/audio/speech 返回原始二进制音频数据
|
||||
const buffer = res.data as ArrayBuffer
|
||||
|
||||
@@ -53,7 +53,7 @@ async function generate() {
|
||||
prompt: prompt.value,
|
||||
size: size.value,
|
||||
quality: quality.value,
|
||||
}, { timeout: 180_000 })
|
||||
}, { timeout: 300_000 })
|
||||
|
||||
const data = res.data
|
||||
images.value = data.data || []
|
||||
|
||||
Reference in new issue
Block a user