logarchivelogic.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Code scaffolded by goctl. Safe to edit.
  2. // goctl 1.10.2
  3. package systemlog
  4. import (
  5. "context"
  6. "udeServer/internal/apierr"
  7. "udeServer/internal/audit"
  8. "udeServer/internal/log"
  9. udeModel "udeServer/internal/model"
  10. "udeServer/internal/svc"
  11. "udeServer/internal/types"
  12. "github.com/zeromicro/go-zero/core/logx"
  13. )
  14. type LogArchiveLogic struct {
  15. logx.Logger
  16. ctx context.Context
  17. svcCtx *svc.ServiceContext
  18. }
  19. // 日志归档
  20. func NewLogArchiveLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogArchiveLogic {
  21. return &LogArchiveLogic{
  22. Logger: logx.WithContext(ctx),
  23. ctx: ctx,
  24. svcCtx: svcCtx,
  25. }
  26. }
  27. // LogArchive dumps the selected logs (by ids and/or created_at range) into
  28. // a SQL file stored in MinIO, then removes them from t_system_log inside
  29. // one transaction and books an archive record.
  30. func (l *LogArchiveLogic) LogArchive(req *types.SystemLogArchiveReq) (*types.SystemLogArchiveResp, error) {
  31. if req.Name == "" {
  32. return nil, apierr.BadRequest("name(归档任务名称)不能为空")
  33. }
  34. if (req.StartDate != "" && req.EndDate == "") || (req.StartDate == "" && req.EndDate != "") {
  35. return nil, apierr.BadRequest("startDate/endDate 必须成对传入")
  36. }
  37. if l.svcCtx.MinioClient == nil {
  38. return nil, apierr.New(500, "MinIO客户端未加载,无法归档(检查t_config的file_*配置)")
  39. }
  40. log.RecordDebug(l.ctx, "开始进行Name:%s的日志归档!", req.Name)
  41. list, err := l.svcCtx.SystemLogModel.FindForArchive(l.ctx, req.Ids, req.StartDate, req.EndDate)
  42. if err != nil {
  43. log.RecordError(l.ctx, err)
  44. return nil, apierr.New(500, "查询待归档日志失败")
  45. }
  46. if len(list) == 0 {
  47. return nil, apierr.BadRequest("未查询到待归档日志(检查ids/日期区间)")
  48. }
  49. entries := make([]*udeModel.TSystemLog, len(list))
  50. for i := range list {
  51. entries[i] = &list[i]
  52. }
  53. count, err := audit.ArchiveLogsToStorageAndRecord(l.ctx, entries, req.Name,
  54. l.svcCtx.LogConfigManager.ArchiveThreshold, audit.ManualArchive,
  55. l.svcCtx.MinioClient, l.svcCtx.DB)
  56. if err != nil {
  57. log.RecordError(l.ctx, err)
  58. return nil, apierr.New(500, err.Error())
  59. }
  60. log.RecordDebug(l.ctx, "日志归档成功!Count:%d", count)
  61. return &types.SystemLogArchiveResp{Count: count}, nil
  62. }