| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // 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
- }
|