/************************************************************
** @Description: controllers
** @Author: haodaquan
** @Date: 2018-06-11 21:11
** @Last Modified by: haodaquan
** @Last Modified time: 2018-06-11 21:11
*************************************************************/
package controllers
import (
"fmt"
"github.com/george518/PPGo_Job/libs"
"strconv"
"strings"
"time"
"github.com/astaxie/beego"
"github.com/george518/PPGo_Job/crons"
"github.com/george518/PPGo_Job/jobs"
"github.com/george518/PPGo_Job/models"
)
type TaskController struct {
BaseController
}
func (self *TaskController) List() {
self.Data["pageTitle"] = "任务管理"
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
self.Data["groupId"] = 0
//arr := strings.Split(self.Ctx.GetCookie("groupid"), "|")
//if len(arr) > 0 {
// self.Data["groupId"], _ = strconv.Atoi(arr[0])
//}
self.display()
}
func (self *TaskController) AuditList() {
self.Data["pageTitle"] = "任务审核"
self.display()
}
func (self *TaskController) Add() {
self.Data["pageTitle"] = "新增任务"
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
self.Data["isAdmin"] = self.userId
self.Data["adminInfo"] = AllAdminInfo("")
self.display()
}
func (self *TaskController) Edit() {
self.Data["pageTitle"] = "编辑任务"
id, _ := self.GetInt("id")
task, err := models.TaskGetById(id)
if err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
if task.Status == 1 {
self.ajaxMsg("运行状态无法编辑任务,请先暂停任务", MSG_ERR)
}
self.Data["task"] = task
self.Data["adminInfo"] = AllAdminInfo("")
// 分组列表
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
self.Data["isAdmin"] = self.userId
var notifyUserIds []int
if task.NotifyUserIds != "0" {
notifyUserIdsStr := strings.Split(task.NotifyUserIds, ",")
for _, v := range notifyUserIdsStr {
i, _ := strconv.Atoi(v)
notifyUserIds = append(notifyUserIds, i)
}
}
self.Data["notify_user_ids"] = notifyUserIds
server_ids := strings.Split(task.ServerIds, ",")
var server_ids_arr []int
for _, sv := range server_ids {
i, _ := strconv.Atoi(sv)
server_ids_arr = append(server_ids_arr, i)
}
self.Data["service_ids"] = server_ids_arr
notifyTplList, _, err := models.NotifyTplGetByTplTypeList(task.NotifyType)
tplList := make([]map[string]interface{}, len(notifyTplList))
if err == nil {
for k, v := range notifyTplList {
row := make(map[string]interface{})
row["id"] = v.Id
row["tpl_name"] = v.TplName
row["tpl_type"] = v.TplType
tplList[k] = row
}
}
self.Data["notifyTpl"] = tplList
self.display()
}
func (self *TaskController) Copy() {
self.Data["pageTitle"] = "复制任务"
self.Data["adminInfo"] = AllAdminInfo("")
id, _ := self.GetInt("id")
task, err := models.TaskGetById(id)
if err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
if task.Status == 1 {
self.ajaxMsg("运行状态无法编辑任务,请先暂停任务", MSG_ERR)
}
self.Data["task"] = task
self.Data["adminInfo"] = AllAdminInfo("")
// 分组列表
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
self.Data["isAdmin"] = self.userId
var notifyUserIds []int
if task.NotifyUserIds != "0" {
notifyUserIdsStr := strings.Split(task.NotifyUserIds, ",")
for _, v := range notifyUserIdsStr {
i, _ := strconv.Atoi(v)
notifyUserIds = append(notifyUserIds, i)
}
}
self.Data["notify_user_ids"] = notifyUserIds
server_ids := strings.Split(task.ServerIds, ",")
var server_ids_arr []int
for _, sv := range server_ids {
i, _ := strconv.Atoi(sv)
server_ids_arr = append(server_ids_arr, i)
}
self.Data["service_ids"] = server_ids_arr
notifyTplList, _, err := models.NotifyTplGetByTplTypeList(task.NotifyType)
tplList := make([]map[string]interface{}, len(notifyTplList))
if err == nil {
for k, v := range notifyTplList {
row := make(map[string]interface{})
row["id"] = v.Id
row["tpl_name"] = v.TplName
row["tpl_type"] = v.TplType
tplList[k] = row
}
}
self.Data["notifyTpl"] = tplList
self.display()
}
func (self *TaskController) Detail() {
self.Data["pageTitle"] = "任务详细"
id, _ := self.GetInt("id")
task, err := models.TaskGetById(id)
if err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
TextStatus := []string{
" 暂停",
" 运行中",
" 待审核",
" 审核失败",
}
self.Data["TextStatus"] = TextStatus[task.Status]
self.Data["CreateTime"] = beego.Date(time.Unix(task.CreateTime, 0), "Y-m-d H:i:s")
self.Data["UpdateTime"] = beego.Date(time.Unix(task.UpdateTime, 0), "Y-m-d H:i:s")
self.Data["task"] = task
// 分组列表
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
serverName := ""
if task.ServerIds == "0" {
serverName = "本地服务器
"
} else {
serverIdSli := strings.Split(task.ServerIds, ",")
for _, v := range serverIdSli {
if v == "0" {
serverName = "本地服务器
"
}
}
servers, n := models.TaskServerGetByIds(task.ServerIds)
if n > 0 {
for _, server := range servers {
fmt.Println(server.Status)
if server.Status != 0 {
serverName += server.ServerName + "
"
} else {
serverName += server.ServerName + "
"
}
}
} else {
serverName += "服务器异常!!"
}
}
//执行策略
self.Data["ServerType"] = "同时执行"
if task.ServerType == 1 {
self.Data["ServerType"] = "轮询执行"
}
//任务分组
groupName := "默认分组"
if task.GroupId > 0 {
group, err := models.TaskGroupGetById(task.GroupId)
if err == nil {
groupName = group.GroupName
}
}
self.Data["GroupName"] = groupName
//创建人和修改人
createName := "未知"
updateName := "未知"
if task.CreateId > 0 {
admin, err := models.AdminGetById(task.CreateId)
if err == nil {
createName = admin.RealName
}
}
if task.UpdateId > 0 {
admin, err := models.AdminGetById(task.UpdateId)
if err == nil {
updateName = admin.RealName
}
}
//是否出错通知
self.Data["adminInfo"] = []*AdminInfo{}
if task.NotifyUserIds != "0" && task.NotifyUserIds != "" {
self.Data["adminInfo"] = AllAdminInfo(task.NotifyUserIds)
}
self.Data["CreateName"] = createName
self.Data["UpdateName"] = updateName
self.Data["serverName"] = serverName
self.Data["NotifyTplName"] = "未知"
if task.IsNotify == 1 {
notifyTpl, err := models.NotifyTplGetById(task.NotifyTplId)
if err == nil {
self.Data["NotifyTplName"] = notifyTpl.TplName
}
}
self.display()
}
func (self *TaskController) AjaxSave() {
task_id, _ := self.GetInt("id")
if task_id == 0 {
task := new(models.Task)
task.CreateId = self.userId
task.GroupId, _ = self.GetInt("group_id")
task.TaskName = strings.TrimSpace(self.GetString("task_name"))
task.Description = strings.TrimSpace(self.GetString("description"))
task.Concurrent, _ = self.GetInt("concurrent")
task.ServerIds = strings.TrimSpace(self.GetString("server_ids"))
task.CronSpec = strings.TrimSpace(self.GetString("cron_spec"))
task.Command = strings.TrimSpace(self.GetString("command"))
task.Timeout, _ = self.GetInt("timeout")
task.IsNotify, _ = self.GetInt("is_notify")
task.ServerType, _ = self.GetInt("server_type")
task.NotifyType, _ = self.GetInt("notify_type")
task.NotifyTplId, _ = self.GetInt("notify_tpl_id")
task.NotifyUserIds = strings.TrimSpace(self.GetString("notify_user_ids"))
if task.IsNotify == 1 && task.NotifyTplId <= 0 {
self.ajaxMsg("请选择通知模板", MSG_ERR)
}
msg, isBan := checkCommand(task.Command)
if !isBan {
self.ajaxMsg("含有禁止命令:"+msg, MSG_ERR)
}
task.CreateTime = time.Now().Unix()
task.UpdateTime = time.Now().Unix()
task.Status = 2 //审核中
if self.userId == 1 {
task.Status = 0 //审核中,超级管理员不需要
}
if task.TaskName == "" || task.CronSpec == "" || task.Command == "" {
self.ajaxMsg("请填写完整信息", MSG_ERR)
}
if _, err := cron.Parse(task.CronSpec); err != nil {
self.ajaxMsg("cron表达式无效", MSG_ERR)
}
if _, err := models.TaskAdd(task); err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
self.ajaxMsg("", MSG_OK)
}
task, _ := models.TaskGetById(task_id)
//修改
task.Id = task_id
task.UpdateTime = time.Now().Unix()
task.TaskName = strings.TrimSpace(self.GetString("task_name"))
task.Description = strings.TrimSpace(self.GetString("description"))
task.GroupId, _ = self.GetInt("group_id")
task.Concurrent, _ = self.GetInt("concurrent")
task.ServerIds = strings.TrimSpace(self.GetString("server_ids"))
task.CronSpec = strings.TrimSpace(self.GetString("cron_spec"))
task.Command = strings.TrimSpace(self.GetString("command"))
task.Timeout, _ = self.GetInt("timeout")
task.ServerType, _ = self.GetInt("server_type")
task.IsNotify, _ = self.GetInt("is_notify")
task.NotifyType, _ = self.GetInt("notify_type")
task.NotifyTplId, _ = self.GetInt("notify_tpl_id")
task.NotifyUserIds = strings.TrimSpace(self.GetString("notify_user_ids"))
task.UpdateId = self.userId
task.Status = 2 //审核中,超级管理员不需要
if task.IsNotify == 1 && task.NotifyTplId <= 0 {
self.ajaxMsg("请选择通知模板", MSG_ERR)
}
if self.userId == 1 {
task.Status = 0
}
msg, isBan := checkCommand(task.Command)
if !isBan {
self.ajaxMsg("含有禁止命令:"+msg, MSG_ERR)
}
if _, err := cron.Parse(task.CronSpec); err != nil {
self.ajaxMsg("cron表达式无效", MSG_ERR)
}
if err := task.Update(); err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
self.ajaxMsg("", MSG_OK)
}
//检查是否含有禁用命令
func checkCommand(command string) (string, bool) {
filters := make([]interface{}, 0)
filters = append(filters, "status", 0)
ban, _ := models.BanGetList(1, 1000, filters...)
for _, v := range ban {
if strings.Contains(command, v.Code) {
return v.Code, false
}
}
return "", true
}
func (self *TaskController) AjaxAudit() {
taskId, _ := self.GetInt("id")
if taskId == 0 {
self.ajaxMsg("任务不存在", MSG_ERR)
}
res := changeStatus(taskId, 0, self.userId)
if !res {
self.ajaxMsg("审核失败", MSG_ERR)
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxNopass() {
taskId, _ := self.GetInt("id")
if taskId == 0 {
self.ajaxMsg("任务不存在", MSG_ERR)
}
res := changeStatus(taskId, 3, self.userId)
if !res {
self.ajaxMsg("操作失败", MSG_ERR)
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxStart() {
taskId, _ := self.GetInt("id")
if taskId == 0 {
self.ajaxMsg("任务不存在", MSG_ERR)
}
task, err := models.TaskGetById(taskId)
if err != nil {
self.ajaxMsg("查不到该任务", MSG_ERR)
}
if task.Status != 0 {
self.ajaxMsg("任务状态有误", MSG_ERR)
}
jobArr, err := jobs.NewJobFromTask(task)
if err != nil {
self.ajaxMsg("创建任务失败", MSG_ERR)
}
for _, job := range jobArr {
if jobs.AddJob(task.CronSpec, job) {
task.Status = 1
task.Update()
}
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxPause() {
taskId, _ := self.GetInt("id")
if taskId == 0 {
self.ajaxMsg("任务不存在", MSG_ERR)
}
task, err := models.TaskGetById(taskId)
if err != nil {
self.ajaxMsg("查不到该任务", MSG_ERR)
}
//移出任务
TaskServerIdsArr := strings.Split(task.ServerIds, ",")
for _, server_id := range TaskServerIdsArr {
server_id_int, _ := strconv.Atoi(server_id)
jobKey := libs.JobKey(task.Id, server_id_int)
jobs.RemoveJob(jobKey)
}
task.Status = 0
task.Update()
self.ajaxMsg("", MSG_OK)
}
// 立即执行
func (self *TaskController) AjaxRun() {
id, _ := self.GetInt("id")
task, err := models.TaskGetById(id)
if err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
jobArr, err := jobs.NewJobFromTask(task)
if err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
for _, job := range jobArr {
job.Run()
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxBatchStart() {
idArr := self.GetStrings("ids")
ids := strings.Split(idArr[0], ",")
if len(ids) < 1 {
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
}
for _, v := range ids {
id, _ := strconv.Atoi(v)
if id < 1 {
continue
}
if task, err := models.TaskGetById(id); err == nil {
jobArr, err := jobs.NewJobFromTask(task)
if err == nil {
for _, job := range jobArr {
jobs.AddJob(task.CronSpec, job)
}
task.Status = 1
task.Update()
}
}
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxBatchPause() {
idArr := self.GetStrings("ids")
ids := strings.Split(idArr[0], ",")
if len(ids) < 1 {
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
}
for _, v := range ids {
id, _ := strconv.Atoi(v)
if id < 1 {
continue
}
task, err := models.TaskGetById(id)
//移出任务
TaskServerIdsArr := strings.Split(task.ServerIds, ",")
for _, server_id := range TaskServerIdsArr {
server_id_int, _ := strconv.Atoi(server_id)
jobKey := libs.JobKey(task.Id, server_id_int)
jobs.RemoveJob(jobKey)
}
if err == nil {
task.Status = 0
task.Update()
}
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxBatchDel() {
idArr := self.GetStrings("ids")
ids := strings.Split(idArr[0], ",")
if len(ids) < 1 {
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
}
for _, v := range ids {
id, _ := strconv.Atoi(v)
if id < 1 {
continue
}
task, _ := models.TaskGetById(id)
//移出任务
TaskServerIdsArr := strings.Split(task.ServerIds, ",")
for _, server_id := range TaskServerIdsArr {
server_id_int, _ := strconv.Atoi(server_id)
jobKey := libs.JobKey(task.Id, server_id_int)
jobs.RemoveJob(jobKey)
}
models.TaskDel(id)
models.TaskLogDelByTaskId(id)
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxBatchAudit() {
idArr := self.GetStrings("ids")
ids := strings.Split(idArr[0], ",")
if len(ids) < 1 {
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
}
for _, v := range ids {
id, _ := strconv.Atoi(v)
if id < 1 {
continue
}
changeStatus(id, 0, self.userId)
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) AjaxBatchNoPass() {
idArr := self.GetStrings("ids")
ids := strings.Split(idArr[0], ",")
if len(ids) < 1 {
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
}
for _, v := range ids {
id, _ := strconv.Atoi(v)
if id < 1 {
continue
}
changeStatus(id, 3, self.userId)
}
self.ajaxMsg("", MSG_OK)
}
func changeStatus(taskId, status, userId int) bool {
if taskId == 0 {
return false
}
task, _ := models.TaskGetById(taskId)
//修改
task.Id = taskId
task.UpdateTime = time.Now().Unix()
task.UpdateId = userId
task.Status = status //0,1,2,3,9
if err := task.Update(); err != nil {
return false
}
return true
}
func (self *TaskController) AjaxDel() {
id, _ := self.GetInt("id")
task, _ := models.TaskGetById(id)
task.UpdateTime = time.Now().Unix()
task.UpdateId = self.userId
task.Status = -1
task.Id = id
//TODO 查询服务器是否用于定时任务
if err := task.Update(); err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
self.ajaxMsg("操作成功", MSG_OK)
}
func (self *TaskController) AjaxNotifyType() {
notifyType, _ := self.GetInt("notify_type")
result, count, _ := models.NotifyTplGetByTplTypeList(notifyType)
list := make([]map[string]interface{}, len(result))
for k, v := range result {
row := make(map[string]interface{})
row["id"] = v.Id
row["tpl_name"] = v.TplName
row["tpl_type"] = v.TplType
list[k] = row
}
self.ajaxList("成功", MSG_OK, count, list)
}
func (self *TaskController) Table() {
//列表
page, err := self.GetInt("page")
if err != nil {
page = 1
}
limit, err := self.GetInt("limit")
if err != nil {
limit = 30
}
groupId, _ := self.GetInt("group_id", 0)
//0-全部,-1如果存在,n,如果不存在,0
//if groupId == -1 {
// groupId = 0
// arr := strings.Split(self.Ctx.GetCookie("groupid"), "|")
// if len(arr) > 0 {
// groupId, _ = strconv.Atoi(arr[0])
// }
//}
//if groupId > 0 {
// self.Ctx.SetCookie("groupid", strconv.Itoa(groupId)+"|job")
//}
status, _ := self.GetInt("status")
taskName := strings.TrimSpace(self.GetString("task_name"))
StatusText := []string{
"",
"",
"",
"",
}
taskGroup := taskGroupLists(self.taskGroups, self.userId)
self.pageSize = limit
//查询条件
filters := make([]interface{}, 0)
if status == 2 {
//审核中,审核失败
ids := []int{2, 3}
filters = append(filters, "status__in", ids)
} else {
ids := []int{0, 1}
filters = append(filters, "status__in", ids)
}
//搜索全部
if groupId == 0 {
if self.userId != 1 {
groups := strings.Split(self.taskGroups, ",")
groupsIds := make([]int, 0)
for _, v := range groups {
id, _ := strconv.Atoi(v)
groupsIds = append(groupsIds, id)
}
filters = append(filters, "group_id__in", groupsIds)
}
} else if groupId > 0 {
filters = append(filters, "group_id", groupId)
}
if taskName != "" {
filters = append(filters, "task_name__icontains", taskName)
}
result, count := models.TaskGetList(page, self.pageSize, filters...)
list := make([]map[string]interface{}, len(result))
for k, v := range result {
row := make(map[string]interface{})
row["id"] = v.Id
groupName := "默认分组"
if name, ok := taskGroup[v.GroupId]; ok {
groupName = name
}
row["group_name"] = groupName
row["task_name"] = StatusText[v.Status] + " " + groupName + "-" + " " + v.TaskName
row["description"] = v.Description
//row["status_text"] = StatusText[v.Status]
row["status"] = v.Status
row["pre_time"] = beego.Date(time.Unix(v.PrevTime, 0), "Y-m-d H:i:s")
row["execute_times"] = v.ExecuteTimes
row["cron_spec"] = v.CronSpec
TaskServerIdsArr := strings.Split(v.ServerIds, ",")
serverId := 0
if len(TaskServerIdsArr) > 1 {
serverId, _ = strconv.Atoi(TaskServerIdsArr[0])
}
jobskey := libs.JobKey(v.Id, serverId)
e := jobs.GetEntryById(jobskey)
if e != nil {
row["next_time"] = beego.Date(e.Next, "Y-m-d H:i:s")
row["prev_time"] = "-"
if e.Prev.Unix() > 0 {
row["prev_time"] = beego.Date(e.Prev, "Y-m-d H:i:s")
} else if v.PrevTime > 0 {
row["prev_time"] = beego.Date(time.Unix(v.PrevTime, 0), "Y-m-d H:i:s")
}
row["running"] = 1
} else {
row["next_time"] = "-"
if v.PrevTime > 0 {
row["prev_time"] = beego.Date(time.Unix(v.PrevTime, 0), "Y-m-d H:i:s")
} else {
row["prev_time"] = "-"
}
row["running"] = 0
}
list[k] = row
}
self.ajaxList("成功", MSG_OK, count, list)
}
func (self *TaskController) ApiTask() {
task_id, _ := self.GetInt("id")
if task_id == 0 {
task := new(models.Task)
task.CreateId, _ = self.GetInt("create_id")
task.GroupId, _ = self.GetInt("group_id")
task.TaskName = strings.TrimSpace(self.GetString("task_name"))
task.Description = strings.TrimSpace(self.GetString("description"))
task.Concurrent, _ = self.GetInt("concurrent")
task.ServerIds = strings.TrimSpace(self.GetString("server_ids"))
task.CronSpec = strings.TrimSpace(self.GetString("cron_spec"))
task.Command = strings.TrimSpace(self.GetString("command"))
task.Timeout, _ = self.GetInt("timeout")
task.IsNotify, _ = self.GetInt("is_notify")
task.NotifyType, _ = self.GetInt("notify_type")
task.NotifyTplId, _ = self.GetInt("notify_tpl_id")
task.NotifyUserIds = strings.TrimSpace(self.GetString("notify_user_ids"))
if task.IsNotify == 1 && task.NotifyTplId <= 0 {
self.ajaxMsg("请选择通知模板", MSG_ERR)
}
msg, isBan := checkCommand(task.Command)
if !isBan {
self.ajaxMsg("含有禁止命令:"+msg, MSG_ERR)
}
task.CreateTime = time.Now().Unix()
task.UpdateTime = time.Now().Unix()
task.Status = 0 //接口不需要审核
if task.TaskName == "" || task.CronSpec == "" || task.Command == "" {
self.ajaxMsg("请填写完整信息", MSG_ERR)
}
var id int64
var err error
if _, err = cron.Parse(task.CronSpec); err != nil {
self.ajaxMsg("cron表达式无效", MSG_ERR)
}
if id, err = models.TaskAdd(task); err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
task_id = int(id)
self.ajaxMsg(task_id, MSG_OK)
}
task, _ := models.TaskGetById(task_id)
if task.Status == 1 {
self.ajaxMsg("运行状态无法编辑任务,请先暂停任务", MSG_ERR)
}
//修改
task.Id = task_id
task.UpdateTime = time.Now().Unix()
task.TaskName = strings.TrimSpace(self.GetString("task_name"))
task.Description = strings.TrimSpace(self.GetString("description"))
task.GroupId, _ = self.GetInt("group_id")
task.Concurrent, _ = self.GetInt("concurrent")
task.ServerIds = strings.TrimSpace(self.GetString("server_ids"))
task.CronSpec = strings.TrimSpace(self.GetString("cron_spec"))
task.Command = strings.TrimSpace(self.GetString("command"))
task.Timeout, _ = self.GetInt("timeout")
task.IsNotify, _ = self.GetInt("is_notify")
task.NotifyType, _ = self.GetInt("notify_type")
task.NotifyTplId, _ = self.GetInt("notify_tpl_id")
task.NotifyUserIds = strings.TrimSpace(self.GetString("notify_user_ids"))
task.UpdateId, _ = self.GetInt("update_id")
task.Status = 0 //接口不需要
if task.IsNotify == 1 && task.NotifyTplId <= 0 {
self.ajaxMsg("请选择通知模板", MSG_ERR)
}
msg, isBan := checkCommand(task.Command)
if !isBan {
self.ajaxMsg("含有禁止命令:"+msg, MSG_ERR)
}
if _, err := cron.Parse(task.CronSpec); err != nil {
self.ajaxMsg("cron表达式无效", MSG_ERR)
}
if err := task.Update(); err != nil {
self.ajaxMsg(err.Error(), MSG_ERR)
}
self.ajaxMsg(task_id, MSG_OK)
}
func (self *TaskController) ApiStart() {
taskId, _ := self.GetInt("id")
if taskId == 0 {
self.ajaxMsg("任务不存在", MSG_ERR)
}
task, err := models.TaskGetById(taskId)
if err != nil {
self.ajaxMsg("查不到该任务", MSG_ERR)
}
if task.Status != 0 {
self.ajaxMsg("任务状态有误", MSG_ERR)
}
jobArr, err := jobs.NewJobFromTask(task)
if err != nil {
self.ajaxMsg("创建任务失败", MSG_ERR)
}
for _, job := range jobArr {
if jobs.AddJob(task.CronSpec, job) {
task.Status = 1
task.Update()
}
}
self.ajaxMsg("", MSG_OK)
}
func (self *TaskController) ApiPause() {
taskId, _ := self.GetInt("id")
if taskId == 0 {
self.ajaxMsg("任务不存在", MSG_ERR)
}
task, err := models.TaskGetById(taskId)
if err != nil {
self.ajaxMsg("查不到该任务", MSG_ERR)
}
//移出任务
TaskServerIdsArr := strings.Split(task.ServerIds, ",")
for _, server_id := range TaskServerIdsArr {
server_id_int, _ := strconv.Atoi(server_id)
jobKey := libs.JobKey(task.Id, server_id_int)
jobs.RemoveJob(jobKey)
}
task.Status = 0
task.Update()
self.ajaxMsg("", MSG_OK)
}