go-common/app/admin/ep/merlin/service/task.go
2019-04-22 18:49:16 +08:00

152 lines
4.3 KiB
Go

package service
import (
"context"
"go-common/app/admin/ep/merlin/model"
"go-common/library/log"
)
func (s *Service) taskGetExpiredMachinesIntoTask() {
machines, err := s.dao.FindExpiredMachine()
if err != nil {
log.Error("Task get expired machines into task (%v)", err)
return
}
if machines != nil {
log.Info("machines will be expired on tomorrow and add into task")
s.dao.InsertDeleteMachinesTasks(machines)
}
}
// 定时发邮件通知将要过期机器
func (s *Service) taskSendTaskMailMachinesWillExpired() {
var (
machines []*model.Machine
err error
)
if machines, err = s.dao.FindExpiredMachineByDay(s.c.Scheduler.ExpiredDate); err != nil {
log.Error("Task send task mail machines will expired (%v)", err)
return
}
for _, machine := range machines {
log.Info("Machine named [%s] will be expired on next week and send a mail", machine.Name)
if machine.DelayStatus == model.DelayStatusInit {
s.dao.UpdateMachineDelayStatus(machine.ID, model.DelayStatusAuto)
}
if err = s.SendMail(model.MailTypeMachineWillExpired, machine); err != nil {
log.Error("Send mail failed (%v)", err)
}
}
}
// 定时删除过期机器
func (s *Service) taskDeleteExpiredMachines() {
var (
tasks []*model.Task
instance *model.ReleaseInstance
err error
machine *model.Machine
)
if tasks, err = s.dao.FindDeleteMachineTasks(); err != nil {
log.Error("Task delete expired machines error (%v)", err)
return
}
for _, taskEle := range tasks {
if instance, err = s.DelMachine(context.TODO(), taskEle.MachineID, "机器删除"); err != nil {
log.Error("Task delete expired machines error (%v)", err)
continue
}
if instance.InstanceReleaseStatus != model.SuccessDeletePaasMachines {
if machine, err = s.dao.QueryMachine(taskEle.MachineID); err != nil {
log.Error("Task delete expired machines error (%v)", err)
continue
}
if err = s.SendMail(model.MailTypeTaskDeleteMachineFailed, machine); err != nil {
log.Error("Send mail failed (%v)", err)
}
s.dao.UpdateTaskStatusByTaskID(taskEle.ID, model.TaskFailed)
}
}
}
func (s *Service) taskMachineStatus() {
var (
pathAndPodNames map[string][]string
machineStatuses map[string]bool
createdPodNames []string
creatingPodNames []string
creatingMachines []*model.Machine
err error
c = context.TODO()
)
if pathAndPodNames, err = s.dao.QueryPathAndPodNamesMapping(); err != nil {
log.Error("Query creating machines in db err(%v)", err)
return
}
if len(pathAndPodNames) == 0 {
return
}
log.Info("Get pathAndPodNames(%v) from Service Tree", pathAndPodNames)
if machineStatuses, err = s.TreeMachinesIsExist(c, pathAndPodNames); err != nil {
log.Error("Query service tree machine status err(%v)", err)
return
}
for k, v := range machineStatuses {
if v {
createdPodNames = append(createdPodNames, k)
} else {
creatingPodNames = append(creatingPodNames, k)
}
}
if len(createdPodNames) > 0 {
if s.dao.UpdateMachineStatusByPodNames(createdPodNames, model.BootMachineInMerlin); err != nil {
log.Error("update creating machines to boot in db err(%v)", err)
return
}
}
if len(creatingPodNames) <= 0 {
return
}
if creatingMachines, err = s.dao.QueryMachinesByPodNames(creatingPodNames); err != nil {
log.Error("Query creating machines in db err(%v)", err)
return
}
for _, m := range creatingMachines {
log.Info("Create machine(%v) deadline exceeded", m)
if _, err = s.verifyPassStatus(c, m, false); err != nil {
log.Error("Del verify machine(%v) in db err(%v)", m, err)
continue
}
if _, err = s.dao.DelPaasMachine(c, m.ToPaasQueryAndDelMachineRequest()); err != nil {
log.Error("Del creating machine(%v) in db err(%v)", m, err)
continue
}
}
}
// 同步ios移动设备状态
func (s *Service) taskSyncMobileDeviceList() {
s.SyncMobileDeviceList(context.Background())
}
// 定时清理由于回调失败,而在进行中的快照
func (s *Service) taskUpdateSnapshotStatusInDoing() {
var (
err error
snapshotRecords []*model.SnapshotRecord
)
if snapshotRecords, err = s.dao.FindSnapshotStatusInDoingOver2Hours(); err != nil {
return
}
for _, snapshotRecord := range snapshotRecords {
if err = s.dao.UpdateSnapshotRecordStatus(snapshotRecord.MachineID, model.SnapShotFailed); err != nil {
continue
}
}
}