// Code scaffolded by goctl. Safe to edit. // goctl 1.10.2 package systemlog import ( "context" "udeServer/internal/apierr" "udeServer/internal/audit" "udeServer/internal/log" udeModel "udeServer/internal/model" "udeServer/internal/svc" "udeServer/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type LogArchiveLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // 日志归档 func NewLogArchiveLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogArchiveLogic { return &LogArchiveLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } // LogArchive dumps the selected logs (by ids and/or created_at range) into // a SQL file stored in MinIO, then removes them from t_system_log inside // one transaction and books an archive record. func (l *LogArchiveLogic) LogArchive(req *types.SystemLogArchiveReq) (*types.SystemLogArchiveResp, error) { if req.Name == "" { return nil, apierr.BadRequest("name(归档任务名称)不能为空") } if (req.StartDate != "" && req.EndDate == "") || (req.StartDate == "" && req.EndDate != "") { return nil, apierr.BadRequest("startDate/endDate 必须成对传入") } if l.svcCtx.MinioClient == nil { return nil, apierr.New(500, "MinIO客户端未加载,无法归档(检查t_config的file_*配置)") } log.RecordDebug(l.ctx, "开始进行Name:%s的日志归档!", req.Name) list, err := l.svcCtx.SystemLogModel.FindForArchive(l.ctx, req.Ids, req.StartDate, req.EndDate) if err != nil { log.RecordError(l.ctx, err) return nil, apierr.New(500, "查询待归档日志失败") } if len(list) == 0 { return nil, apierr.BadRequest("未查询到待归档日志(检查ids/日期区间)") } entries := make([]*udeModel.TSystemLog, len(list)) for i := range list { entries[i] = &list[i] } count, err := audit.ArchiveLogsToStorageAndRecord(l.ctx, entries, req.Name, l.svcCtx.LogConfigManager.ArchiveThreshold, audit.ManualArchive, l.svcCtx.MinioClient, l.svcCtx.DB) if err != nil { log.RecordError(l.ctx, err) return nil, apierr.New(500, err.Error()) } log.RecordDebug(l.ctx, "日志归档成功!Count:%d", count) return &types.SystemLogArchiveResp{Count: count}, nil }