From 941848793acf2e248d8112e516f06d18a20e9687 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=A4=A7=E5=85=A8?= Date: Tue, 29 Aug 2017 15:30:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BB=BB=E5=8A=A1=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/task.go | 30 +++++++-- jobs/job.go | 39 ++++++------ views/task/copy.html | 144 +++++++++++++++++++++++++++++++++++++++++++ views/task/list.html | 4 ++ 4 files changed, 191 insertions(+), 26 deletions(-) create mode 100644 views/task/copy.html diff --git a/controllers/task.go b/controllers/task.go index a60d6aa..efb0a72 100644 --- a/controllers/task.go +++ b/controllers/task.go @@ -8,14 +8,15 @@ package controllers import ( + "strconv" + "strings" + "time" + "github.com/astaxie/beego" crons "github.com/george518/PPGo_Job/crons" "github.com/george518/PPGo_Job/jobs" "github.com/george518/PPGo_Job/libs" "github.com/george518/PPGo_Job/models" - "strconv" - "strings" - "time" ) type TaskController struct { @@ -37,14 +38,13 @@ func (this *TaskController) List() { } filters := make([]interface{}, 0) - if groupId > 0 && groupId!=99 { + if groupId > 0 && groupId != 99 { filters = append(filters, "group_id", groupId) } result, count := models.TaskGetList(page, this.pageSize, filters...) list := make([]map[string]interface{}, len(result)) - // 分组列表 groups, _ := models.TaskGroupGetList(1, 100) groups_map := make(map[int]string) @@ -183,6 +183,26 @@ func (this *TaskController) Edit() { this.display() } +//复制任务 +func (this *TaskController) Copy() { + + id, _ := this.GetInt("id") + task, err := models.TaskGetById(id) + if err != nil { + this.showMsg(err.Error()) + } + // 分组列表 + groups, _ := models.TaskGroupGetList(1, 100) + this.Data["groups"] = groups + //服务器分组 + servers, _ := models.TaskServerGetList(1, 100) + this.Data["servers"] = servers + + this.Data["task"] = task + this.Data["pageTitle"] = "复制任务" + this.display() +} + // 任务执行日志列表 func (this *TaskController) Logs() { taskId, _ := this.GetInt("id") diff --git a/jobs/job.go b/jobs/job.go index c855d08..a5b7af6 100644 --- a/jobs/job.go +++ b/jobs/job.go @@ -10,18 +10,17 @@ package jobs import ( "bytes" "fmt" - "github.com/astaxie/beego" - "github.com/george518/PPGo_Job/models" + "io/ioutil" + "net" "os/exec" "runtime/debug" "time" - "io/ioutil" + + "github.com/astaxie/beego" + "github.com/george518/PPGo_Job/models" "golang.org/x/crypto/ssh" - "net" ) - - type Job struct { id int // 任务ID logId int64 // 日志记录ID @@ -32,13 +31,12 @@ type Job struct { Concurrent bool // 同一个任务是否允许并行执行 } - func NewJobFromTask(task *models.Task) (*Job, error) { if task.Id < 1 { return nil, fmt.Errorf("ToJob: 缺少id") } //本地程序执行 - if(task.ServerId==0) { + if task.ServerId == 0 { job := NewCommandJob(task.Id, task.TaskName, task.Command) job.task = task job.Concurrent = task.Concurrent == 1 @@ -46,15 +44,15 @@ func NewJobFromTask(task *models.Task) (*Job, error) { } server, _ := models.TaskServerGetById(task.ServerId) - if(server.Type==0){ + if server.Type == 0 { //密码验证登录服务器 - job := RemoteCommandJobByPassword(task.Id, task.TaskName, task.Command,server) + job := RemoteCommandJobByPassword(task.Id, task.TaskName, task.Command, server) job.task = task job.Concurrent = task.Concurrent == 1 return job, nil } - job := RemoteCommandJob(task.Id, task.TaskName, task.Command,server) + job := RemoteCommandJob(task.Id, task.TaskName, task.Command, server) job.task = task job.Concurrent = task.Concurrent == 1 return job, nil @@ -80,8 +78,9 @@ func NewCommandJob(id int, name string, command string) *Job { } return job } + //远程执行任务 密钥验证 -func RemoteCommandJob(id int,name string,command string,servers *models.TaskServer) *Job { +func RemoteCommandJob(id int, name string, command string, servers *models.TaskServer) *Job { job := &Job{ id: id, name: name, @@ -90,12 +89,12 @@ func RemoteCommandJob(id int,name string,command string,servers *models.TaskServ key, err := ioutil.ReadFile(servers.PrivateKeySrc) if err != nil { - return "","",err,false + return "", "", err, false } // Create the Signer for this private key. signer, err := ssh.ParsePrivateKey(key) if err != nil { - return "","",err,false + return "", "", err, false } addr := fmt.Sprintf("%s:%d", servers.ServerIp, servers.Port) config := &ssh.ClientConfig{ @@ -112,12 +111,12 @@ func RemoteCommandJob(id int,name string,command string,servers *models.TaskServ // Connect to the remote server and perform the SSH handshake.47.93.220.5 client, err := ssh.Dial("tcp", addr, config) if err != nil { - return "","",err,false + return "", "", err, false } session, err := client.NewSession() if err != nil { - return "","",err,false + return "", "", err, false } defer session.Close() @@ -131,7 +130,7 @@ func RemoteCommandJob(id int,name string,command string,servers *models.TaskServ //session.Output(command) if err := session.Run(command); err != nil { - return "","",err,false + return "", "", err, false } isTimeout := false return b.String(), c.String(), err, isTimeout @@ -139,7 +138,7 @@ func RemoteCommandJob(id int,name string,command string,servers *models.TaskServ return job } -func RemoteCommandJobByPassword(id int,name string,command string,servers *models.TaskServer) *Job{ +func RemoteCommandJobByPassword(id int, name string, command string, servers *models.TaskServer) *Job { var ( auth []ssh.AuthMethod addr string @@ -179,7 +178,6 @@ func RemoteCommandJobByPassword(id int,name string,command string,servers *model return "", "", err, false } - var b bytes.Buffer var c bytes.Buffer session.Stdout = &b @@ -187,7 +185,7 @@ func RemoteCommandJobByPassword(id int,name string,command string,servers *model //session.Output(command) if err := session.Run(command); err != nil { - return "","",err,false + return "", "", err, false } isTimeout := false return b.String(), c.String(), err, isTimeout @@ -196,7 +194,6 @@ func RemoteCommandJobByPassword(id int,name string,command string,servers *model return job } - func (j *Job) Status() int { return j.status } diff --git a/views/task/copy.html b/views/task/copy.html new file mode 100644 index 0000000..e2ef477 --- /dev/null +++ b/views/task/copy.html @@ -0,0 +1,144 @@ + +
+
+ +
+ +
+ +
+ + + +
+
+
+ +
+ +
+
+ +
+
+ + +
+ +
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+ +
+ + +
+
+ 设为“是”的话,如果该任务在上一个时间点还没执行完,则略过不执行 +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+ + +
+ +
+ +
+
+ 单位秒,不设置的话,默认超时时间为1天 +
+
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/views/task/list.html b/views/task/list.html index d89cd8b..a6a7b50 100644 --- a/views/task/list.html +++ b/views/task/list.html @@ -105,6 +105,10 @@ 日志 + + + 复制 + {{end}}