|
|
package monkey
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
"os/exec"
|
|
|
"strings"
|
|
|
|
|
|
"github.com/spf13/cast"
|
|
|
)
|
|
|
|
|
|
type DockerContainer struct {
|
|
|
ID string `json:"id"`
|
|
|
Name string `json:"name"`
|
|
|
Device string `json:"device"`
|
|
|
}
|
|
|
|
|
|
// 根据任务id获取关联容器,由于后续可能支持一个任务绑定多个设备执行,所以返回数组
|
|
|
func GetTaskFromDocker(task_id int) []DockerContainer {
|
|
|
var list []DockerContainer
|
|
|
cmd := exec.Command("docker", "ps")
|
|
|
output, err := cmd.Output()
|
|
|
if err != nil {
|
|
|
fmt.Println(err)
|
|
|
return list
|
|
|
}
|
|
|
|
|
|
lines := strings.Split(string(output), "\n")
|
|
|
for i, line := range lines {
|
|
|
if i == 0 {
|
|
|
continue // skip header line
|
|
|
}
|
|
|
fields := strings.Fields(line)
|
|
|
if len(fields) >= 7 {
|
|
|
// fmt.Printf("Container ID: %s, Name: %s\n", fields[0], fields[len(fields)-1])
|
|
|
var c DockerContainer
|
|
|
c.ID = fields[0]
|
|
|
c.Name = fields[len(fields)-1]
|
|
|
_strs := strings.Split(c.Name, "_")
|
|
|
c.Device = _strs[len(_strs)-1]
|
|
|
if strings.Contains(c.Name, "monkey_task_"+cast.ToString(task_id)+"_") {
|
|
|
list = append(list, c)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return list
|
|
|
}
|
|
|
|
|
|
func StopDockerContainer(container_name string) bool {
|
|
|
cmd := exec.Command("docker", "stop", "-t", "0", container_name)
|
|
|
out, err := cmd.CombinedOutput()
|
|
|
if err != nil {
|
|
|
fmt.Println("[docker] Error stopping container:", err)
|
|
|
return true
|
|
|
}
|
|
|
fmt.Println("[docker] Container stopped successfully:", string(out))
|
|
|
return true
|
|
|
}
|