Commit 87e820f9 authored by lihailei's avatar lihailei

add response status_code.

parent 3aba6405
......@@ -76,3 +76,29 @@ func (c *RpcCtx) ReplyData() ([]byte, error) {
}
return data, nil
}
func (c *RpcCtx) ReplyInterface() (interface{}, error) {
rpc, err := jsonrpc.NewJSONClient(c.Addr)
if err != nil {
clog.Error(fmt.Sprintf("NewJsonClient have err:%v", err.Error()))
return nil, err
}
err = rpc.Call(c.Method, c.Params, c.Res)
if err != nil {
clog.Error(fmt.Sprintf("rpc.Call have err:%v", err.Error()))
return nil, err
}
// maybe format rpc result
var result interface{}
if c.cb != nil {
result, err = c.cb(c.Res)
if err != nil {
clog.Error(fmt.Sprintf("rpc.CallBack have err:%v", err.Error()))
return nil, err
}
} else {
result = c.Res
}
return result, nil
}
package common
const (
Code_10000 = "10000"
Code_10001 = "10001"
Code_10002 = "10002"
//code_10003="10003"
)
const (
MsgOk = "MsgOK"
MsgErrorResponseTimeOut = "Response timeout"
MsgErrorRequestParam = "Request Parameter error"
MsgErrorReplyData = "ReplyData error"
)
var MessageType = map[string]string{
Code_10000: "MsgOK",
Code_10001: "MsgError:Parameter error",
Code_10002: "MsgError:Response timeout",
}
......@@ -6,6 +6,7 @@ import (
"net"
"os"
"path"
"sync/atomic"
"time"
"github.com/pkg/sftp"
......@@ -276,8 +277,10 @@ func StartAll(servers ServerList) {
RemoteExec(cmdInfo)
}
}
func StopAll(servers ServerList) {
//执行速度快,不需要多起多协程工作
func StopAll(servers ServerList) int64 {
var errNum int64
//多协程停止部署
reqC := make(chan struct{}, len(servers.ServerList))
for _, s := range servers.ServerList {
cmdInfo := &CmdInfo{
hostIp: s.HostIp,
......@@ -287,8 +290,18 @@ func StopAll(servers ServerList) {
cmd: fmt.Sprintf("ps -ef | grep chain33 | grep -v grep| awk '{print $2}' | xargs kill -9"),
remoteDir: s.RemoteDir,
}
RemoteExec(cmdInfo)
go func() {
err := RemoteExec(cmdInfo)
if err != nil {
atomic.AddInt64(&errNum, 1)
}
reqC <- struct{}{}
}()
}
for i := 0; i < len(servers.ServerList); i++ {
<-reqC
}
return errNum
}
func ClearAll(servers ServerList) {
for _, s := range servers.ServerList {
......
package common
import (
"encoding/json"
"fmt"
)
type Response struct {
Status_code string `json:"status_code"`
Message interface{} `json:"message"`
Result interface{} `json:"result"`
}
func MarshaResponse(code string, message interface{}, Result interface{}) ([]byte, error) {
var res Response
if m, ok := message.(string); ok {
res.Message = m
}
res.Status_code = code
res.Result = Result
data, err := json.MarshalIndent(res, "", " ")
if err != nil {
clog.Error(fmt.Sprintf("MarshalIndent have err:%v", err.Error()))
return nil, err
}
return data, nil
}
......@@ -6,8 +6,8 @@ import (
//"gitlab.33.cn/chain33/chain33/types"
. "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"
. "gitlab.33.cn/lihailei/chain33_sdk/src/models"
"encoding/json"
"fmt"
......@@ -45,7 +45,8 @@ func (c *ServerController) DeployChain() {
err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList)
if err != nil {
clog.Error(fmt.Sprintf("unmarshal have err:%s", err.Error()))
c.Ctx.ResponseWriter.WriteHeader(400)
data, _ := MarshaResponse(Code_10001, MsgErrorRequestParam, "")
c.Ctx.ResponseWriter.Write(data)
return
} else {
//TODO:这里应该做异步响应,返回一个taskId
......@@ -63,9 +64,12 @@ func (c *ServerController) DeployChain() {
return
}
go StartAll(serverList)
go ChainCheck(serverList,task)
c.Data["json"] = task
c.ServeJSON()
go ChainCheck(serverList, task)
data, _ := MarshaResponse(Code_10000, "The deployment task has started.", task)
c.Ctx.ResponseWriter.Write(data)
//c.Data["json"] = task
//c.ServeJSON()
}
}
......@@ -87,11 +91,13 @@ func (c *ServerController) StopChain() {
err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList)
if err != nil {
clog.Error(fmt.Sprintf("unmarshal have err:%s", err.Error()))
c.Ctx.ResponseWriter.WriteHeader(400)
data, _ := MarshaResponse(Code_10001, err.Error(), "")
c.Ctx.ResponseWriter.Write(data)
return
} else {
go StopAll(serverList)
c.Ctx.ResponseWriter.WriteHeader(200)
errNum := StopAll(serverList)
data, _ := MarshaResponse(Code_10000, fmt.Sprintf("%d machines stopped failing.", errNum), "")
c.Ctx.ResponseWriter.Write(data)
}
}
......@@ -113,10 +119,12 @@ func (c *ServerController) ClearChain() {
err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList)
if err != nil {
clog.Error(fmt.Sprintf("unmarshal have err:%s", err.Error()))
c.Ctx.ResponseWriter.WriteHeader(400)
data, _ := MarshaResponse(Code_10001, err.Error(), "")
c.Ctx.ResponseWriter.Write(data)
return
} else {
go ClearAll(serverList)
c.Ctx.ResponseWriter.WriteHeader(200)
data, _ := MarshaResponse(Code_10000, "Chain33 related files have been cleared.", "")
c.Ctx.ResponseWriter.Write(data)
}
}
......@@ -31,7 +31,7 @@ func (c *TaskController) GetTaskStatus() {
data, err := GetData(taskId)
if err != nil {
clog.Error("getData err:",err.Error())
clog.Error("getData err:", err.Error())
c.Data["json"] = err.Error()
c.ServeJSON()
} else {
......
package healthcheck
import (
"fmt"
. "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) {
......@@ -23,7 +23,7 @@ func ChainCheck(serverList ServerList, task *Task) {
server.Port,
}
ok, err := RemoteViewProcIsExist("chain33", *sshInfo)
fmt.Println("value========:",ok)
fmt.Println("value========:", ok)
if ok && err == nil {
atomic.AddInt64(&count, 1)
}
......@@ -38,13 +38,13 @@ func ChainCheck(serverList ServerList, task *Task) {
//fmt.Println("len():",len(serverList.ServerList))
if count == int64(len(serverList.ServerList)) {
task.TaskStatus = TASK_SUCESS
fmt.Println("task:",task)
fmt.Println("task:", task)
err := PutData(task)
if err == nil {
fmt.Println("putData sucess!")
break
}
fmt.Println("err==========:",err.Error())
fmt.Println("err==========:", err.Error())
}
if i == 19 {
task.TaskStatus = TASK_FAIL
......
package models
type Response struct {
Status_code string `json:"statu_code"`
Message interface{} `json:"message"`
Result interface{} `json:"result"`
}
......@@ -13,8 +13,8 @@ import (
var (
dialTimeout = 5 * time.Second
requestTimeout = 10 * time.Second
endpoints = []string{"10.39.0.6:2379",}
EtcdURL = "http://localhost:2379"
endpoints = []string{"10.39.0.6:2379"}
EtcdURL = "http://localhost:2379"
)
func GetEtcdURL() string {
......@@ -52,8 +52,8 @@ func MarshalToString(data interface{}) (string, error) {
func PutData(data interface{}) error {
cli, err := clientv3.New(
clientv3.Config{
Endpoints:[]string{"localhost:2379"},
DialTimeout:dialTimeout,
Endpoints: []string{"localhost:2379"},
DialTimeout: dialTimeout,
})
if err != nil {
return err
......@@ -75,8 +75,8 @@ func PutData(data interface{}) error {
func GetData(key string) ([]byte, error) {
cli, err := clientv3.New(
clientv3.Config{
Endpoints:[]string{"localhost:2379"},
DialTimeout:dialTimeout,
Endpoints: []string{"localhost:2379"},
DialTimeout: dialTimeout,
})
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