267 lines
6.2 KiB
Go
267 lines
6.2 KiB
Go
package admin
|
|
|
|
import (
|
|
"errors"
|
|
"jiacrontab/models"
|
|
"jiacrontab/pkg/proto"
|
|
"strings"
|
|
)
|
|
|
|
func GetJobList(ctx *myctx) {
|
|
|
|
var (
|
|
jobRet proto.QueryCrontabJobRet
|
|
err error
|
|
reqBody GetJobListReqParams
|
|
rpcReqParams proto.QueryJobArgs
|
|
)
|
|
|
|
if err = ctx.Valid(&reqBody); err != nil {
|
|
ctx.respParamError(err)
|
|
return
|
|
}
|
|
|
|
rpcReqParams.Page = reqBody.Page
|
|
rpcReqParams.Pagesize = reqBody.Pagesize
|
|
rpcReqParams.UserID = ctx.claims.UserID
|
|
rpcReqParams.Root = ctx.claims.Root
|
|
rpcReqParams.GroupID = ctx.claims.GroupID
|
|
rpcReqParams.SearchTxt = reqBody.SearchTxt
|
|
|
|
if err := rpcCall(reqBody.Addr, "CrontabJob.List", rpcReqParams, &jobRet); err != nil {
|
|
ctx.respRPCError(err)
|
|
return
|
|
}
|
|
|
|
ctx.respSucc("", map[string]interface{}{
|
|
"list": jobRet.List,
|
|
"page": jobRet.Page,
|
|
"pagesize": jobRet.Pagesize,
|
|
"total": jobRet.Total,
|
|
})
|
|
}
|
|
|
|
func GetRecentLog(ctx *myctx) {
|
|
var (
|
|
err error
|
|
searchRet proto.SearchLogResult
|
|
reqBody GetLogReqParams
|
|
logList []string
|
|
)
|
|
|
|
if err = ctx.Valid(&reqBody); err != nil {
|
|
ctx.respParamError(err)
|
|
return
|
|
}
|
|
|
|
if err = rpcCall(reqBody.Addr, "CrontabJob.Log", proto.SearchLog{
|
|
JobID: reqBody.JobID,
|
|
Offset: reqBody.Offset,
|
|
Pagesize: reqBody.Pagesize,
|
|
Date: reqBody.Date,
|
|
Root: ctx.claims.Root,
|
|
GroupID: ctx.claims.GroupID,
|
|
UserID: ctx.claims.UserID,
|
|
Pattern: reqBody.Pattern,
|
|
IsTail: reqBody.IsTail,
|
|
}, &searchRet); err != nil {
|
|
ctx.respRPCError(err)
|
|
return
|
|
}
|
|
|
|
logList = strings.Split(string(searchRet.Content), "\n")
|
|
|
|
ctx.respSucc("", map[string]interface{}{
|
|
"logList": logList,
|
|
"curAddr": reqBody.Addr,
|
|
"offset": searchRet.Offset,
|
|
"filesize": searchRet.FileSize,
|
|
"pagesize": reqBody.Pagesize,
|
|
})
|
|
}
|
|
|
|
func EditJob(ctx *myctx) {
|
|
var (
|
|
err error
|
|
reply models.CrontabJob
|
|
reqBody EditJobReqParams
|
|
job models.CrontabJob
|
|
)
|
|
|
|
if err = ctx.Valid(&reqBody); err != nil {
|
|
ctx.respBasicError(err)
|
|
return
|
|
}
|
|
|
|
if !ctx.verifyNodePermission(reqBody.Addr) {
|
|
ctx.respNotAllowed()
|
|
return
|
|
}
|
|
|
|
job = models.CrontabJob{
|
|
Name: reqBody.Name,
|
|
Command: reqBody.Command,
|
|
GroupID: ctx.claims.GroupID,
|
|
Code: reqBody.Code,
|
|
TimeArgs: models.TimeArgs{
|
|
Month: reqBody.Month,
|
|
Day: reqBody.Day,
|
|
Hour: reqBody.Hour,
|
|
Minute: reqBody.Minute,
|
|
Weekday: reqBody.Weekday,
|
|
Second: reqBody.Second,
|
|
},
|
|
|
|
UpdatedUserID: ctx.claims.UserID,
|
|
UpdatedUsername: ctx.claims.Username,
|
|
WorkDir: reqBody.WorkDir,
|
|
WorkUser: reqBody.WorkUser,
|
|
WorkIp: reqBody.WorkIp,
|
|
WorkEnv: reqBody.WorkEnv,
|
|
KillChildProcess: reqBody.KillChildProcess,
|
|
RetryNum: reqBody.RetryNum,
|
|
Timeout: reqBody.Timeout,
|
|
TimeoutTrigger: reqBody.TimeoutTrigger,
|
|
MailTo: reqBody.MailTo,
|
|
APITo: reqBody.APITo,
|
|
DingdingTo: reqBody.DingdingTo,
|
|
MaxConcurrent: reqBody.MaxConcurrent,
|
|
DependJobs: reqBody.DependJobs,
|
|
ErrorMailNotify: reqBody.ErrorMailNotify,
|
|
ErrorAPINotify: reqBody.ErrorAPINotify,
|
|
ErrorDingdingNotify: reqBody.ErrorDingdingNotify,
|
|
IsSync: reqBody.IsSync,
|
|
CreatedUserID: ctx.claims.UserID,
|
|
CreatedUsername: ctx.claims.Username,
|
|
}
|
|
|
|
job.ID = reqBody.JobID
|
|
if ctx.claims.Root || ctx.claims.GroupID == models.SuperGroup.ID {
|
|
job.Status = models.StatusJobOk
|
|
} else {
|
|
job.Status = models.StatusJobUnaudited
|
|
}
|
|
|
|
if err = rpcCall(reqBody.Addr, "CrontabJob.Edit", proto.EditCrontabJobArgs{
|
|
Job: job,
|
|
GroupID: ctx.claims.GroupID,
|
|
Root: ctx.claims.Root,
|
|
UserID: ctx.claims.UserID,
|
|
}, &reply); err != nil {
|
|
ctx.respRPCError(err)
|
|
return
|
|
}
|
|
ctx.pubEvent(reply.Name, event_EditCronJob, models.EventSourceName(reqBody.Addr), reqBody)
|
|
ctx.respSucc("", reply)
|
|
}
|
|
|
|
func ActionTask(ctx *myctx) {
|
|
var (
|
|
err error
|
|
ok bool
|
|
method string
|
|
reqBody ActionTaskReqParams
|
|
jobReply []models.CrontabJob
|
|
methods = map[string]string{
|
|
"start": "CrontabJob.Start",
|
|
"stop": "CrontabJob.Stop",
|
|
"delete": "CrontabJob.Delete",
|
|
"batch-exec": "CrontabJob.Execs",
|
|
"kill": "CrontabJob.Kill",
|
|
}
|
|
|
|
eDesc = map[string]string{
|
|
"start": event_StartCronJob,
|
|
"stop": event_StopCronJob,
|
|
"batch-exec": event_ExecCronJob,
|
|
"delete": event_DelCronJob,
|
|
"kill": event_KillCronJob,
|
|
}
|
|
)
|
|
|
|
if err = ctx.Valid(&reqBody); err != nil {
|
|
ctx.respBasicError(err)
|
|
return
|
|
}
|
|
|
|
if method, ok = methods[reqBody.Action]; !ok {
|
|
ctx.respBasicError(errors.New("action无法识别"))
|
|
return
|
|
}
|
|
|
|
if err = rpcCall(reqBody.Addr, method, proto.ActionJobsArgs{
|
|
UserID: ctx.claims.UserID,
|
|
GroupID: ctx.claims.GroupID,
|
|
Root: ctx.claims.Root,
|
|
JobIDs: reqBody.JobIDs,
|
|
}, &jobReply); err != nil {
|
|
ctx.respRPCError(err)
|
|
return
|
|
}
|
|
if len(jobReply) > 0 {
|
|
var targetNames []string
|
|
for _, v := range jobReply {
|
|
targetNames = append(targetNames, v.Name)
|
|
}
|
|
ctx.pubEvent(strings.Join(targetNames, ","), eDesc[reqBody.Action], models.EventSourceName(reqBody.Addr), reqBody)
|
|
}
|
|
ctx.respSucc("", jobReply)
|
|
}
|
|
|
|
func ExecTask(ctx *myctx) {
|
|
var (
|
|
err error
|
|
logList []string
|
|
execJobReply proto.ExecCrontabJobReply
|
|
reqBody JobReqParams
|
|
)
|
|
|
|
if err = ctx.Valid(&reqBody); err != nil {
|
|
ctx.respParamError(err)
|
|
return
|
|
}
|
|
|
|
if err = rpcCall(reqBody.Addr, "CrontabJob.Exec", proto.GetJobArgs{
|
|
UserID: ctx.claims.UserID,
|
|
Root: ctx.claims.Root,
|
|
JobID: reqBody.JobID,
|
|
GroupID: ctx.claims.GroupID,
|
|
}, &execJobReply); err != nil {
|
|
ctx.respRPCError(err)
|
|
return
|
|
}
|
|
logList = strings.Split(string(execJobReply.Content), "\n")
|
|
ctx.pubEvent(execJobReply.Job.Name, event_ExecCronJob, models.EventSourceName(reqBody.Addr), reqBody)
|
|
ctx.respSucc("", logList)
|
|
}
|
|
|
|
func GetJob(ctx *myctx) {
|
|
var (
|
|
reqBody GetJobReqParams
|
|
crontabJob models.CrontabJob
|
|
err error
|
|
)
|
|
|
|
if err = ctx.Valid(&reqBody); err != nil {
|
|
ctx.respParamError(err)
|
|
return
|
|
}
|
|
|
|
if !ctx.verifyNodePermission(reqBody.Addr) {
|
|
ctx.respNotAllowed()
|
|
return
|
|
}
|
|
|
|
if err = rpcCall(reqBody.Addr, "CrontabJob.Get", proto.GetJobArgs{
|
|
UserID: ctx.claims.UserID,
|
|
Root: ctx.claims.Root,
|
|
GroupID: ctx.claims.GroupID,
|
|
JobID: reqBody.JobID,
|
|
}, &crontabJob); err != nil {
|
|
ctx.respRPCError(err)
|
|
return
|
|
}
|
|
|
|
ctx.respSucc("", crontabJob)
|
|
}
|