From 3ce982d8eebbdd1f62aeb2f71a903423740d0bce Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 24 Jun 2023 19:13:33 +0800 Subject: [PATCH] feat: able to query token with admin user --- controller/log.go | 6 ++-- i18n/en.json | 7 ++-- model/log.go | 5 ++- web/src/components/LogsTable.js | 62 +++++++++++++++++++++------------ 4 files changed, 52 insertions(+), 28 deletions(-) diff --git a/controller/log.go b/controller/log.go index 09cb1bb6..ba043349 100644 --- a/controller/log.go +++ b/controller/log.go @@ -16,8 +16,9 @@ func GetAllLogs(c *gin.Context) { startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64) endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64) username := c.Query("username") + tokenName := c.Query("token_name") modelName := c.Query("model_name") - logs, err := model.GetAllLogs(logType, startTimestamp, endTimestamp, modelName, username, p*common.ItemsPerPage, common.ItemsPerPage) + logs, err := model.GetAllLogs(logType, startTimestamp, endTimestamp, modelName, username, tokenName, p*common.ItemsPerPage, common.ItemsPerPage) if err != nil { c.JSON(200, gin.H{ "success": false, @@ -97,9 +98,10 @@ func GetLogsStat(c *gin.Context) { logType, _ := strconv.Atoi(c.Query("type")) startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64) endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64) + tokenName := c.Query("token_name") username := c.Query("username") modelName := c.Query("model_name") - quotaNum := model.SumUsedQuota(logType, startTimestamp, endTimestamp, modelName, username, "") + quotaNum := model.SumUsedQuota(logType, startTimestamp, endTimestamp, modelName, username, tokenName) //tokenNum := model.SumUsedToken(logType, startTimestamp, endTimestamp, modelName, username, "") c.JSON(200, gin.H{ "success": true, diff --git a/i18n/en.json b/i18n/en.json index 9072be13..68b124ec 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -453,7 +453,8 @@ "起始时间": "Start Time", "结束时间": "End Time", "查询": "Query", - "提示令牌": "Prompt Token", - "补全令牌": "Completion Token", - "消耗额度": "Used Quota" + "提示": "Prompt", + "补全": "Completion", + "消耗额度": "Used Quota", + "可选值": "Optional Values" } diff --git a/model/log.go b/model/log.go index ce56bdbb..b0d6409a 100644 --- a/model/log.go +++ b/model/log.go @@ -66,7 +66,7 @@ func RecordConsumeLog(userId int, promptTokens int, completionTokens int, modelN } } -func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, startIdx int, num int) (logs []*Log, err error) { +func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, startIdx int, num int) (logs []*Log, err error) { var tx *gorm.DB if logType == LogTypeUnknown { tx = DB @@ -79,6 +79,9 @@ func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName if username != "" { tx = tx.Where("username = ?", username) } + if tokenName != "" { + tx = tx.Where("token_name = ?", tokenName) + } if startTimestamp != 0 { tx = tx.Where("created_at >= ?", startTimestamp) } diff --git a/web/src/components/LogsTable.js b/web/src/components/LogsTable.js index 6cd102d1..e11d6326 100644 --- a/web/src/components/LogsTable.js +++ b/web/src/components/LogsTable.js @@ -51,12 +51,13 @@ const LogsTable = () => { const isAdminUser = isAdmin(); let now = new Date(); const [inputs, setInputs] = useState({ - name: '', + username: '', + token_name: '', model_name: '', start_timestamp: timestamp2string(0), end_timestamp: timestamp2string(now.getTime() / 1000 + 3600) }); - const { name, model_name, start_timestamp, end_timestamp } = inputs; + const { username, token_name, model_name, start_timestamp, end_timestamp } = inputs; const [stat, setStat] = useState({ quota: 0, @@ -70,7 +71,7 @@ const LogsTable = () => { const getLogSelfStat = async () => { let localStartTimestamp = Date.parse(start_timestamp) / 1000; let localEndTimestamp = Date.parse(end_timestamp) / 1000; - let res = await API.get(`/api/log/self/stat?type=${logType}&token_name=${name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`); + let res = await API.get(`/api/log/self/stat?type=${logType}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`); const { success, message, data } = res.data; if (success) { setStat(data); @@ -82,7 +83,7 @@ const LogsTable = () => { const getLogStat = async () => { let localStartTimestamp = Date.parse(start_timestamp) / 1000; let localEndTimestamp = Date.parse(end_timestamp) / 1000; - let res = await API.get(`/api/log/stat?type=${logType}&username=${name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`); + let res = await API.get(`/api/log/stat?type=${logType}&username=${username}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`); const { success, message, data } = res.data; if (success) { setStat(data); @@ -96,9 +97,9 @@ const LogsTable = () => { let localStartTimestamp = Date.parse(start_timestamp) / 1000; let localEndTimestamp = Date.parse(end_timestamp) / 1000; if (isAdminUser) { - url = `/api/log/?p=${startIdx}&type=${logType}&username=${name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; + url = `/api/log/?p=${startIdx}&type=${logType}&username=${username}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; } else { - url = `/api/log/self/?p=${startIdx}&type=${logType}&token_name=${name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; + url = `/api/log/self/?p=${startIdx}&type=${logType}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; } const res = await API.get(url); const { success, message, data } = res.data; @@ -183,10 +184,17 @@ const LogsTable = () => {
使用明细(总消耗额度:{renderQuota(stat.quota)})
- - + ) + } + + { > 时间 + { + isAdminUser && { + sortLog('username'); + }} + width={1} + > + 用户 + + } { + sortLog('token_name'); + }} width={1} > - {isAdminUser ? '用户' : '令牌'} + 令牌 { }} width={1} > - 提示令牌 + 提示 { }} width={1} > - 补全令牌 + 补全 { onClick={() => { sortLog('content'); }} - width={5} + width={isAdminUser ? 4 : 5} > 详情 @@ -288,15 +310,11 @@ const LogsTable = () => { {log.username ? : ''} ) } - { - !isAdminUser && ( - {log.token_name ? : ''} - ) - } + {log.token_name ? : ''} {renderType(log.type)} {log.model_name ? : ''} - {log.prompt_tokens ? log.prompt_tokens: ''} - {log.completion_tokens ? log.completion_tokens: ''} + {log.prompt_tokens ? log.prompt_tokens : ''} + {log.completion_tokens ? log.completion_tokens : ''} {log.quota ? renderQuota(log.quota, 6) : ''} {log.content} @@ -306,7 +324,7 @@ const LogsTable = () => { - +