Commit fc94b850 authored by lihailei's avatar lihailei

add task module.

parent 7eb356fa
......@@ -47,10 +47,10 @@ type CmdInfo struct {
remoteDir string
}
type SshInfo struct {
userName string
passWord string
hostIp string
port int
UserName string
PassWord string
HostIp string
Port int
}
type tomlConfig struct {
Title string
......@@ -183,17 +183,18 @@ func RemoteExec(cmdInfo *CmdInfo) error {
//远程查看进程是否存在
func RemoteViewProcIsExist(procName string, ssh SshInfo) (bool, error) {
session, err := sshconnect(ssh.userName, ssh.passWord, ssh.hostIp, ssh.port)
session, err := sshconnect(ssh.UserName, ssh.PassWord, ssh.HostIp, ssh.Port)
if err != nil {
return false, err
}
defer session.Close()
cmd := fmt.Sprintf("ps -ef | grep %s | grep -v grep| awk '{print $2}'", procName)
data, err := session.Output(cmd)
fmt.Println(string(data))
if string(data) != "" && err == nil {
return true, err
return true, nil
}
return false, nil
return false, err
}
func remoteScp(si *ScpInfo, reqnum chan struct{}) {
defer func() {
......
......@@ -7,6 +7,7 @@ import (
. "gitlab.33.cn/lihailei/chain33_sdk/src/common"
"gitlab.33.cn/lihailei/chain33_sdk/src/common/crypto"
. "gitlab.33.cn/lihailei/chain33_sdk/src/models"
. "gitlab.33.cn/lihailei/chain33_sdk/src/healthcheck"
"encoding/json"
"fmt"
......@@ -61,7 +62,8 @@ func (c *ServerController) DeployChain() {
c.Ctx.ResponseWriter.WriteHeader(500)
return
}
//go StartAll(serverList)
go StartAll(serverList)
go ChainCheck(serverList,task)
c.Data["json"] = task
c.ServeJSON()
}
......
......@@ -31,6 +31,7 @@ func (c *TaskController) GetTaskStatus() {
data, err := GetData(taskId)
if err != nil {
clog.Error("getData err:",err.Error())
c.Data["json"] = err.Error()
c.ServeJSON()
} else {
......
package healthcheck
import (
. "gitlab.33.cn/lihailei/chain33_sdk/src/common"
. "gitlab.33.cn/lihailei/chain33_sdk/src/models"
"sync/atomic"
"time"
"fmt"
)
func ChainCheck(serverList ServerList, task *Task) {
numC := make(chan struct{}, len(serverList.ServerList))
defer close(numC)
for i := 0; i < 20; i++ {
time.Sleep(15 * time.Second)
var count int64
for _, server := range serverList.ServerList {
go func() {
sshInfo := &SshInfo{
server.UserName,
server.PassWord,
server.HostIp,
server.Port,
}
ok, err := RemoteViewProcIsExist("chain33", *sshInfo)
fmt.Println("value========:",ok)
if ok && err == nil {
atomic.AddInt64(&count, 1)
}
numC <- struct{}{}
}()
}
//等待各个机器检查完毕
for i = 0; i < len(serverList.ServerList); i++ {
<-numC
}
//fmt.Println("count:",count)
//fmt.Println("len():",len(serverList.ServerList))
if count == int64(len(serverList.ServerList)) {
task.TaskStatus = TASK_SUCESS
fmt.Println("task:",task)
err := PutData(task)
if err == nil {
fmt.Println("putData sucess!")
break
}
fmt.Println("err==========:",err.Error())
}
if i == 19 {
task.TaskStatus = TASK_FAIL
err := PutData(task)
if err == nil {
break
}
}
}
}
package models
type Response struct {
Status_code string `json:"statu_code"`
Message interface{} `json:"message"`
Result interface{} `json:"result"`
}
......@@ -6,9 +6,15 @@ import (
"encoding/json"
"errors"
"github.com/coreos/etcd/clientv3"
"golang.org/x/net/context"
"time"
"fmt"
)
var (
dialTimeout = 5 * time.Second
requestTimeout = 10 * time.Second
endpoints = []string{"10.39.0.6:2379",}
EtcdURL = "http://localhost:2379"
)
......@@ -45,14 +51,20 @@ func MarshalToString(data interface{}) (string, error) {
//通用存储接口封装,可根据不同类型,进行相应的kv存储
func PutData(data interface{}) error {
cli, err := clientv3.NewFromURL(GetEtcdURL())
defer cli.Close()
cli, err := clientv3.New(
clientv3.Config{
Endpoints:[]string{"localhost:2379"},
DialTimeout:dialTimeout,
})
if err != nil {
return err
}
defer cli.Close()
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
if task, ok := data.(*Task); ok {
str, _ := MarshalToString(task)
_, err := cli.Put(cli.Ctx(), task.TaskID, str)
_, err := cli.Put(ctx, task.TaskID, str)
cancel()
if err != nil {
return err
}
......@@ -62,12 +74,18 @@ func PutData(data interface{}) error {
//不关注具体类型,只返回字节数组,由调用者自己进行反序列化
func GetData(key string) ([]byte, error) {
cli, err := clientv3.NewFromURL(GetEtcdURL())
defer cli.Close()
cli, err := clientv3.New(
clientv3.Config{
Endpoints:[]string{"localhost:2379"},
DialTimeout:dialTimeout,
})
if err != nil {
return nil, err
}
res, err := cli.Get(cli.Ctx(), key)
defer cli.Close()
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
res, err := cli.Get(ctx, key)
cancel()
if err != nil {
return nil, err
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment