Commit fc94b850 authored by lihailei's avatar lihailei

add task module.

parent 7eb356fa
...@@ -47,10 +47,10 @@ type CmdInfo struct { ...@@ -47,10 +47,10 @@ type CmdInfo struct {
remoteDir string remoteDir string
} }
type SshInfo struct { type SshInfo struct {
userName string UserName string
passWord string PassWord string
hostIp string HostIp string
port int Port int
} }
type tomlConfig struct { type tomlConfig struct {
Title string Title string
...@@ -183,17 +183,18 @@ func RemoteExec(cmdInfo *CmdInfo) error { ...@@ -183,17 +183,18 @@ func RemoteExec(cmdInfo *CmdInfo) error {
//远程查看进程是否存在 //远程查看进程是否存在
func RemoteViewProcIsExist(procName string, ssh SshInfo) (bool, 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 { if err != nil {
return false, err return false, err
} }
defer session.Close() defer session.Close()
cmd := fmt.Sprintf("ps -ef | grep %s | grep -v grep| awk '{print $2}'", procName) cmd := fmt.Sprintf("ps -ef | grep %s | grep -v grep| awk '{print $2}'", procName)
data, err := session.Output(cmd) data, err := session.Output(cmd)
fmt.Println(string(data))
if string(data) != "" && err == nil { if string(data) != "" && err == nil {
return true, err return true, nil
} }
return false, nil return false, err
} }
func remoteScp(si *ScpInfo, reqnum chan struct{}) { func remoteScp(si *ScpInfo, reqnum chan struct{}) {
defer func() { defer func() {
......
...@@ -7,6 +7,7 @@ import ( ...@@ -7,6 +7,7 @@ import (
. "gitlab.33.cn/lihailei/chain33_sdk/src/common" . "gitlab.33.cn/lihailei/chain33_sdk/src/common"
"gitlab.33.cn/lihailei/chain33_sdk/src/common/crypto" "gitlab.33.cn/lihailei/chain33_sdk/src/common/crypto"
. "gitlab.33.cn/lihailei/chain33_sdk/src/models" . "gitlab.33.cn/lihailei/chain33_sdk/src/models"
. "gitlab.33.cn/lihailei/chain33_sdk/src/healthcheck"
"encoding/json" "encoding/json"
"fmt" "fmt"
...@@ -61,7 +62,8 @@ func (c *ServerController) DeployChain() { ...@@ -61,7 +62,8 @@ func (c *ServerController) DeployChain() {
c.Ctx.ResponseWriter.WriteHeader(500) c.Ctx.ResponseWriter.WriteHeader(500)
return return
} }
//go StartAll(serverList) go StartAll(serverList)
go ChainCheck(serverList,task)
c.Data["json"] = task c.Data["json"] = task
c.ServeJSON() c.ServeJSON()
} }
......
...@@ -31,6 +31,7 @@ func (c *TaskController) GetTaskStatus() { ...@@ -31,6 +31,7 @@ func (c *TaskController) GetTaskStatus() {
data, err := GetData(taskId) data, err := GetData(taskId)
if err != nil { if err != nil {
clog.Error("getData err:",err.Error())
c.Data["json"] = err.Error() c.Data["json"] = err.Error()
c.ServeJSON() c.ServeJSON()
} else { } else {
......
package healthcheck 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 ( ...@@ -6,9 +6,15 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3"
"golang.org/x/net/context"
"time"
"fmt"
) )
var ( var (
dialTimeout = 5 * time.Second
requestTimeout = 10 * time.Second
endpoints = []string{"10.39.0.6:2379",}
EtcdURL = "http://localhost:2379" EtcdURL = "http://localhost:2379"
) )
...@@ -45,14 +51,20 @@ func MarshalToString(data interface{}) (string, error) { ...@@ -45,14 +51,20 @@ func MarshalToString(data interface{}) (string, error) {
//通用存储接口封装,可根据不同类型,进行相应的kv存储 //通用存储接口封装,可根据不同类型,进行相应的kv存储
func PutData(data interface{}) error { func PutData(data interface{}) error {
cli, err := clientv3.NewFromURL(GetEtcdURL()) cli, err := clientv3.New(
defer cli.Close() clientv3.Config{
Endpoints:[]string{"localhost:2379"},
DialTimeout:dialTimeout,
})
if err != nil { if err != nil {
return err return err
} }
defer cli.Close()
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
if task, ok := data.(*Task); ok { if task, ok := data.(*Task); ok {
str, _ := MarshalToString(task) str, _ := MarshalToString(task)
_, err := cli.Put(cli.Ctx(), task.TaskID, str) _, err := cli.Put(ctx, task.TaskID, str)
cancel()
if err != nil { if err != nil {
return err return err
} }
...@@ -62,12 +74,18 @@ func PutData(data interface{}) error { ...@@ -62,12 +74,18 @@ func PutData(data interface{}) error {
//不关注具体类型,只返回字节数组,由调用者自己进行反序列化 //不关注具体类型,只返回字节数组,由调用者自己进行反序列化
func GetData(key string) ([]byte, error) { func GetData(key string) ([]byte, error) {
cli, err := clientv3.NewFromURL(GetEtcdURL()) cli, err := clientv3.New(
defer cli.Close() clientv3.Config{
Endpoints:[]string{"localhost:2379"},
DialTimeout:dialTimeout,
})
if err != nil { if err != nil {
return nil, err 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 { if err != nil {
return nil, err 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