From ea17a46d8eb884e2b4290fa1b40a61b3cce3b36c Mon Sep 17 00:00:00 2001 From: wozulong <> Date: Mon, 25 Mar 2024 16:36:57 +0800 Subject: [PATCH] fixed pagination issue in the log list Signed-off-by: wozulong <> --- controller/log.go | 6 ++++-- model/log.go | 20 ++++++++++++++++---- web/src/components/LogsTable.js | 16 +++++++++------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/controller/log.go b/controller/log.go index 39028102..70552b51 100644 --- a/controller/log.go +++ b/controller/log.go @@ -24,7 +24,7 @@ func GetAllLogs(c *gin.Context) { tokenName := c.Query("token_name") modelName := c.Query("model_name") channel, _ := strconv.Atoi(c.Query("channel")) - logs, err := model.GetAllLogs(logType, startTimestamp, endTimestamp, modelName, username, tokenName, p*pageSize, pageSize, channel) + logs, total, err := model.GetAllLogs(logType, startTimestamp, endTimestamp, modelName, username, tokenName, p*pageSize, pageSize, channel) if err != nil { c.JSON(http.StatusOK, gin.H{ "success": false, @@ -35,6 +35,7 @@ func GetAllLogs(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "success": true, "message": "", + "total": total, "data": logs, }) return @@ -58,7 +59,7 @@ func GetUserLogs(c *gin.Context) { endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64) tokenName := c.Query("token_name") modelName := c.Query("model_name") - logs, err := model.GetUserLogs(userId, logType, startTimestamp, endTimestamp, modelName, tokenName, p*pageSize, pageSize) + logs, total, err := model.GetUserLogs(userId, logType, startTimestamp, endTimestamp, modelName, tokenName, p*pageSize, pageSize) if err != nil { c.JSON(http.StatusOK, gin.H{ "success": false, @@ -69,6 +70,7 @@ func GetUserLogs(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "success": true, "message": "", + "total": total, "data": logs, }) return diff --git a/model/log.go b/model/log.go index 2740c5a2..08c6a719 100644 --- a/model/log.go +++ b/model/log.go @@ -90,7 +90,7 @@ func RecordConsumeLog(ctx context.Context, userId int, channelId int, promptToke } } -func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, startIdx int, num int, channel int) (logs []*Log, err error) { +func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, startIdx int, num int, channel int) (logs []*Log, total int64, err error) { var tx *gorm.DB if logType == LogTypeUnknown { tx = DB @@ -115,11 +115,17 @@ func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName if channel != 0 { tx = tx.Where("channel_id = ?", channel) } + + err = tx.Model(&Log{}).Count(&total).Error + if err != nil { + return nil, 0, err + } + err = tx.Order("id desc").Limit(num).Offset(startIdx).Find(&logs).Error - return logs, err + return logs, total, err } -func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int64, modelName string, tokenName string, startIdx int, num int) (logs []*Log, err error) { +func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int64, modelName string, tokenName string, startIdx int, num int) (logs []*Log, total int64, err error) { var tx *gorm.DB if logType == LogTypeUnknown { tx = DB.Where("user_id = ?", userId) @@ -138,8 +144,14 @@ func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int if endTimestamp != 0 { tx = tx.Where("created_at <= ?", endTimestamp) } + + err = tx.Model(&Log{}).Count(&total).Error + if err != nil { + return nil, 0, err + } + err = tx.Order("id desc").Limit(num).Offset(startIdx).Omit("id").Find(&logs).Error - return logs, err + return logs, total, err } func SearchAllLogs(keyword string) (logs []*Log, err error) { diff --git a/web/src/components/LogsTable.js b/web/src/components/LogsTable.js index 57003e07..804c7f5d 100644 --- a/web/src/components/LogsTable.js +++ b/web/src/components/LogsTable.js @@ -312,7 +312,7 @@ const LogsTable = () => { const [loading, setLoading] = useState(false); const [loadingStat, setLoadingStat] = useState(false); const [activePage, setActivePage] = useState(1); - const [logCount, setLogCount] = useState(ITEMS_PER_PAGE); + const [logCount, setLogCount] = useState(0); const [pageSize, setPageSize] = useState(ITEMS_PER_PAGE); const [searchKeyword, setSearchKeyword] = useState(''); const [searching, setSearching] = useState(false); @@ -409,14 +409,14 @@ const LogsTable = () => { } }; - const setLogsFormat = (logs) => { + const setLogsFormat = (logs, total) => { for (let i = 0; i < logs.length; i++) { logs[i].timestamp2string = timestamp2string(logs[i].created_at); logs[i].key = '' + logs[i].id; } // data.key = '' + data.id setLogs(logs); - setLogCount(logs.length + ITEMS_PER_PAGE); + setLogCount(total); // console.log(logCount); }; @@ -432,14 +432,14 @@ const LogsTable = () => { url = `/api/log/self/?p=${startIdx}&page_size=${pageSize}&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; + const { success, message, total, data } = res.data; if (success) { if (startIdx === 0) { - setLogsFormat(data); + setLogsFormat(data, total); } else { let newLogs = [...logs]; newLogs.splice(startIdx * pageSize, data.length, ...data); - setLogsFormat(newLogs); + setLogsFormat(newLogs, total); } } else { showError(message); @@ -606,7 +606,9 @@ const LogsTable = () => { type='primary' htmlType='submit' className='btn-margin-right' - onClick={refresh} + onClick={() => { + refresh(logType).then(); + }} loading={loading} > 查询