feat: 数据迁移新增实时日志&数据库游标遍历查询问题修复

This commit is contained in:
meilin.huang
2024-03-28 22:20:39 +08:00
parent 5e4793433b
commit d1d372e1bf
31 changed files with 477 additions and 344 deletions

View File

@@ -1,18 +1,14 @@
package api
import (
"context"
"fmt"
"mayfly-go/internal/db/api/form"
"mayfly-go/internal/db/api/vo"
"mayfly-go/internal/db/application"
"mayfly-go/internal/db/domain/entity"
"mayfly-go/pkg/biz"
"mayfly-go/pkg/logx"
"mayfly-go/pkg/req"
"strconv"
"strings"
"time"
)
type DbTransferTask struct {
@@ -26,13 +22,6 @@ func (d *DbTransferTask) Tasks(rc *req.Ctx) {
rc.ResData = res
}
func (d *DbTransferTask) Logs(rc *req.Ctx) {
queryCond, page := req.BindQueryAndPage[*entity.DbTransferLogQuery](rc, new(entity.DbTransferLogQuery))
res, err := d.DbTransferTask.GetTaskLogList(queryCond, page, new([]vo.DbTransferLogListVO))
biz.ErrIsNil(err)
rc.ResData = res
}
func (d *DbTransferTask) SaveTask(rc *req.Ctx) {
reqForm := &form.DbTransferTaskForm{}
task := req.BindJsonAndCopyTo[*entity.DbTransferTask](rc, reqForm, new(entity.DbTransferTask))
@@ -54,34 +43,9 @@ func (d *DbTransferTask) DeleteTask(rc *req.Ctx) {
}
func (d *DbTransferTask) Run(rc *req.Ctx) {
start := time.Now()
taskId := d.changeState(rc, entity.DbTransferTaskRunStateRunning)
go d.DbTransferTask.Run(taskId, func(msg string, err error) {
// 修改状态为停止
if err != nil {
logx.Error(msg, err)
} else {
logx.Info(fmt.Sprintf("执行迁移完成,%s, 耗时:%v", msg, time.Since(start)))
}
// 修改任务状态
task := new(entity.DbTransferTask)
task.Id = taskId
task.RunningState = entity.DbTransferTaskRunStateStop
biz.ErrIsNil(d.DbTransferTask.UpdateById(context.Background(), task))
})
go d.DbTransferTask.Run(rc.MetaCtx, uint64(rc.PathParamInt("taskId")))
}
func (d *DbTransferTask) Stop(rc *req.Ctx) {
taskId := d.changeState(rc, entity.DbTransferTaskRunStateStop)
d.DbTransferTask.Stop(taskId)
}
func (d *DbTransferTask) changeState(rc *req.Ctx, RunningState int) uint64 {
reqForm := &form.DbTransferTaskStatusForm{RunningState: RunningState}
task := req.BindJsonAndCopyTo[*entity.DbTransferTask](rc, reqForm, new(entity.DbTransferTask))
biz.ErrIsNil(d.DbTransferTask.UpdateById(rc.MetaCtx, task))
// 记录请求日志
rc.ReqParam = reqForm
return task.Id
biz.ErrIsNil(d.DbTransferTask.Stop(rc.MetaCtx, uint64(rc.PathParamInt("taskId"))))
}

View File

@@ -17,8 +17,3 @@ type DbTransferTaskForm struct {
TargetInstName string `binding:"required" json:"targetInstName"` // 目标库实例名
TargetTagPath string `binding:"required" json:"targetTagPath"` // 目标库tagPath
}
type DbTransferTaskStatusForm struct {
Id uint64 `binding:"required" json:"taskId"`
RunningState int `json:"status"`
}

View File

@@ -3,14 +3,16 @@ package vo
import "time"
type DataSyncTaskListVO struct {
Id *int64 `json:"id"`
TaskName *string `json:"taskName"`
Id int64 `json:"id"`
TaskName string `json:"taskName"`
CreateTime *time.Time `json:"createTime"`
Creator string `json:"creator"`
UpdateTime *time.Time `json:"updateTime"`
ModifierId uint64 `json:"modifierId"`
Modifier string `json:"modifier"`
RecentState *int `json:"recentState"`
RunningState *int `json:"runningState"`
Status *int `json:"status"`
RecentState int `json:"recentState"`
RunningState int `json:"runningState"`
Status int `json:"status"`
}
type DataSyncLogListVO struct {

View File

@@ -3,12 +3,14 @@ package vo
import "time"
type DbTransferTaskListVO struct {
Id *int64 `json:"id"`
Id *int64 `json:"id"`
CreateTime *time.Time `json:"createTime"`
Creator string `json:"creator"`
UpdateTime *time.Time `json:"updateTime"`
Modifier string `json:"modifier"`
RunningState int `json:"runningState"`
RunningState int `json:"runningState"`
LogId uint64 `json:"logId"`
CheckedKeys string `json:"checkedKeys"` // 选中需要迁移的表
DeleteTable int `json:"deleteTable"` // 创建表前是否删除表
@@ -27,11 +29,3 @@ type DbTransferTaskListVO struct {
TargetInstName string `json:"targetInstName"` // 目标库实例名
TargetTagPath string `json:"targetTagPath"` // 目标库tagPath
}
type DbTransferLogListVO struct {
CreateTime *time.Time `json:"createTime"`
DataSqlFull string `json:"dataSqlFull"`
ResNum string `json:"resNum"`
ErrText string `json:"errText"`
Status *int `json:"status"`
}