/
mgr.go
67 lines (59 loc) · 1.22 KB
/
mgr.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package jobmgr
import (
"encoding/json"
"log"
"github.com/gorilla/websocket"
)
/*
Define interface: I_Mgr for handling ssh job and websocket communication
*/
type I_Mgr interface {
SetConn(*websocket.Conn)
ExecuteJob()
}
/*
Implement I_Mgr
*/
type Mgr struct {
Conn *websocket.Conn
Job I_Job
}
/*
Set websocket connection
*/
func (mgr *Mgr) SetConn(conn *websocket.Conn) {
mgr.Conn = conn
}
/*
Create job from job description, which is defined as jobmgr.Job
*/
func (mgr *Mgr) CreateJob(jobData []byte) error {
tmpJob := struct {
Machine Machine
Tasks []Task
}{Machine: Machine{}, Tasks: []Task{}}
err := json.Unmarshal(jobData, &tmpJob)
job := &Job{Machine: &tmpJob.Machine, Tasks: []I_Task{}}
for index, _ := range tmpJob.Tasks {
job.Tasks = append(job.Tasks, &tmpJob.Tasks[index])
}
mgr.Job = job
return err
}
/*
Get job description from websocket
*/
func (mgr *Mgr) getConf() []byte {
_, jobData, err := mgr.Conn.ReadMessage()
if err != nil {
log.Fatal("GetConf", err)
}
return jobData
}
/*
Execute ssh job
*/
func (mgr *Mgr) ExecuteJob() {
mgr.CreateJob(mgr.getConf())
mgr.Job.Execute(mgr.Conn)
}