Some checks failed
Build and Deploy (service.xpcool.com) / build-and-deploy (push) Failing after 35s
- 新增新房预售证表 house_presale 存储预售许可信息 - 为 house_community 表添加 avg_price 字段存储小区参考均价 - 增强服务器操作审计日志功能,新增管理员账号、IP归属地、错误信息、UA等字段 - 实现纯Go版IP归属地离线解析器,无外部依赖,支持二分查找 - 优化看房列表查询逻辑,修复Fields设置位置导致的SQL语法错误 - 集成招聘模块,添加独立数据库配置和Bark推送服务支持 - 重构日志查询接口,支持多维度筛选和综合分页列表展示 - 更新DAO实体结构同步数据库表结构调整
59 lines
2.2 KiB
Go
59 lines
2.2 KiB
Go
package admin
|
|
|
|
import (
|
|
"context"
|
|
|
|
logv1 "service.xpcool.com/api/admin/base/log"
|
|
systemlogv1 "service.xpcool.com/api/admin/system/log"
|
|
"service.xpcool.com/internal/model/dto"
|
|
log "service.xpcool.com/internal/service/admin/base/log"
|
|
adminlog "service.xpcool.com/internal/service/admin/system/log"
|
|
)
|
|
|
|
// LogFiles 列出服务器日志文件。
|
|
func (c *Controller) LogFiles(ctx context.Context, req *logv1.LogFilesReq) (res *logv1.LogFilesRes, err error) {
|
|
dir, files, err := log.LogManage().Files(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
list := make([]*logv1.LogFile, 0, len(files))
|
|
for _, f := range files {
|
|
list = append(list, &logv1.LogFile{Name: f.Name, Path: f.Path, Size: f.Size, ModTime: f.ModTime})
|
|
}
|
|
return &logv1.LogFilesRes{Dir: dir, Files: list}, nil
|
|
}
|
|
|
|
// LogTail 读取日志文件尾部,支持关键字过滤。
|
|
func (c *Controller) LogTail(ctx context.Context, req *logv1.LogTailReq) (res *logv1.LogTailRes, err error) {
|
|
lines, err := log.LogManage().Tail(ctx, req.File, req.Lines, req.Keyword)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &logv1.LogTailRes{Lines: lines}, nil
|
|
}
|
|
|
|
// LogList 分页查询 admin 系统日志(操作审计记录)。
|
|
func (c *Controller) LogList(ctx context.Context, req *systemlogv1.LogListReq) (res *systemlogv1.LogListRes, err error) {
|
|
items, total, err := adminlog.AdminAudit().List(ctx, dto.LogQuery{
|
|
Page: req.Page, Size: req.Size, AdminID: req.AdminID, Username: req.Username,
|
|
IP: req.IP, IpLocation: req.IpLocation, Method: req.Method, Status: req.Status,
|
|
Keyword: req.Keyword, StartTime: req.StartTime, EndTime: req.EndTime,
|
|
MinDuration: req.MinDuration, MaxDuration: req.MaxDuration,
|
|
OrderBy: req.OrderBy, OrderDir: req.OrderDir,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
list := make([]*systemlogv1.LogItem, 0, len(items))
|
|
for _, it := range items {
|
|
list = append(list, &systemlogv1.LogItem{
|
|
Id: it.Id, AdminID: it.AdminID, AdminUsername: it.AdminUsername,
|
|
Permission: it.Permission, Method: it.Method, Path: it.Path, IP: it.IP,
|
|
IpLocation: it.IpLocation, Param: it.Param, DurationMS: it.DurationMS,
|
|
StatusCode: it.StatusCode, ErrorMessage: it.ErrorMessage,
|
|
UserAgent: it.UserAgent, CreatedAt: it.CreatedAt,
|
|
})
|
|
}
|
|
return &systemlogv1.LogListRes{List: list, Total: total}, nil
|
|
}
|