feat: 添加访问日志分页功能,优化相关接口和前端组件

This commit is contained in:
ryan
2026-03-14 23:18:49 +08:00
parent b7d38590ba
commit 8d406f5ade
8 changed files with 184 additions and 23 deletions
+48 -4
View File
@@ -6,7 +6,10 @@ import (
"time"
)
const accessLogListLimit = 500
const (
defaultAccessLogPageSize = 50
maxAccessLogPageSize = 200
)
type AccessLogView struct {
ID uint `json:"id"`
@@ -19,8 +22,23 @@ type AccessLogView struct {
StatusCode int `json:"status_code"`
}
func ListAccessLogs(nodeID string) ([]AccessLogView, error) {
logs, err := model.ListNodeAccessLogs(strings.TrimSpace(nodeID), time.Now().Add(-nodeAccessLogRetentionWindow), accessLogListLimit)
type AccessLogList struct {
Items []AccessLogView `json:"items"`
Page int `json:"page"`
PageSize int `json:"page_size"`
HasMore bool `json:"has_more"`
}
func ListAccessLogs(nodeID string, page int, pageSize int) (*AccessLogList, error) {
normalizedPage := normalizeAccessLogPage(page)
normalizedPageSize := normalizeAccessLogPageSize(pageSize)
offset := normalizedPage * normalizedPageSize
logs, err := model.ListNodeAccessLogs(
strings.TrimSpace(nodeID),
time.Now().Add(-nodeAccessLogRetentionWindow),
offset,
normalizedPageSize+1,
)
if err != nil {
return nil, err
}
@@ -35,6 +53,10 @@ func ListAccessLogs(nodeID string) ([]AccessLogView, error) {
}
nodeNames[node.NodeID] = node.Name
}
hasMore := len(logs) > normalizedPageSize
if hasMore {
logs = logs[:normalizedPageSize]
}
views := make([]AccessLogView, 0, len(logs))
for _, item := range logs {
if item == nil {
@@ -51,5 +73,27 @@ func ListAccessLogs(nodeID string) ([]AccessLogView, error) {
StatusCode: item.StatusCode,
})
}
return views, nil
return &AccessLogList{
Items: views,
Page: normalizedPage,
PageSize: normalizedPageSize,
HasMore: hasMore,
}, nil
}
func normalizeAccessLogPage(page int) int {
if page < 0 {
return 0
}
return page
}
func normalizeAccessLogPageSize(pageSize int) int {
if pageSize <= 0 {
return defaultAccessLogPageSize
}
if pageSize > maxAccessLogPageSize {
return maxAccessLogPageSize
}
return pageSize
}