Commit 87e820f9 authored by lihailei's avatar lihailei

add response status_code.

parent 3aba6405
...@@ -76,3 +76,29 @@ func (c *RpcCtx) ReplyData() ([]byte, error) { ...@@ -76,3 +76,29 @@ func (c *RpcCtx) ReplyData() ([]byte, error) {
} }
return data, nil 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 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 ( ...@@ -6,6 +6,7 @@ import (
"net" "net"
"os" "os"
"path" "path"
"sync/atomic"
"time" "time"
"github.com/pkg/sftp" "github.com/pkg/sftp"
...@@ -276,8 +277,10 @@ func StartAll(servers ServerList) { ...@@ -276,8 +277,10 @@ func StartAll(servers ServerList) {
RemoteExec(cmdInfo) 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 { for _, s := range servers.ServerList {
cmdInfo := &CmdInfo{ cmdInfo := &CmdInfo{
hostIp: s.HostIp, hostIp: s.HostIp,
...@@ -287,8 +290,18 @@ func StopAll(servers ServerList) { ...@@ -287,8 +290,18 @@ func StopAll(servers ServerList) {
cmd: fmt.Sprintf("ps -ef | grep chain33 | grep -v grep| awk '{print $2}' | xargs kill -9"), cmd: fmt.Sprintf("ps -ef | grep chain33 | grep -v grep| awk '{print $2}' | xargs kill -9"),
remoteDir: s.RemoteDir, 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) { func ClearAll(servers ServerList) {
for _, s := range 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 ( ...@@ -6,8 +6,8 @@ import (
//"gitlab.33.cn/chain33/chain33/types" //"gitlab.33.cn/chain33/chain33/types"
. "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/healthcheck" . "gitlab.33.cn/lihailei/chain33_sdk/src/healthcheck"
. "gitlab.33.cn/lihailei/chain33_sdk/src/models"
"encoding/json" "encoding/json"
"fmt" "fmt"
...@@ -45,7 +45,8 @@ func (c *ServerController) DeployChain() { ...@@ -45,7 +45,8 @@ func (c *ServerController) DeployChain() {
err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList) err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList)
if err != nil { if err != nil {
clog.Error(fmt.Sprintf("unmarshal have err:%s", err.Error())) 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 return
} else { } else {
//TODO:这里应该做异步响应,返回一个taskId //TODO:这里应该做异步响应,返回一个taskId
...@@ -63,9 +64,12 @@ func (c *ServerController) DeployChain() { ...@@ -63,9 +64,12 @@ func (c *ServerController) DeployChain() {
return return
} }
go StartAll(serverList) go StartAll(serverList)
go ChainCheck(serverList,task) go ChainCheck(serverList, task)
c.Data["json"] = task
c.ServeJSON() 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() { ...@@ -87,11 +91,13 @@ func (c *ServerController) StopChain() {
err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList) err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList)
if err != nil { if err != nil {
clog.Error(fmt.Sprintf("unmarshal have err:%s", err.Error())) 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 return
} else { } else {
go StopAll(serverList) errNum := StopAll(serverList)
c.Ctx.ResponseWriter.WriteHeader(200) data, _ := MarshaResponse(Code_10000, fmt.Sprintf("%d machines stopped failing.", errNum), "")
c.Ctx.ResponseWriter.Write(data)
} }
} }
...@@ -113,10 +119,12 @@ func (c *ServerController) ClearChain() { ...@@ -113,10 +119,12 @@ func (c *ServerController) ClearChain() {
err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList) err := json.Unmarshal(c.Ctx.Input.RequestBody, &serverList)
if err != nil { if err != nil {
clog.Error(fmt.Sprintf("unmarshal have err:%s", err.Error())) 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 return
} else { } else {
go ClearAll(serverList) 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() { ...@@ -31,7 +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()) 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 ( import (
"fmt"
. "gitlab.33.cn/lihailei/chain33_sdk/src/common" . "gitlab.33.cn/lihailei/chain33_sdk/src/common"
. "gitlab.33.cn/lihailei/chain33_sdk/src/models" . "gitlab.33.cn/lihailei/chain33_sdk/src/models"
"sync/atomic" "sync/atomic"
"time" "time"
"fmt"
) )
func ChainCheck(serverList ServerList, task *Task) { func ChainCheck(serverList ServerList, task *Task) {
...@@ -23,7 +23,7 @@ func ChainCheck(serverList ServerList, task *Task) { ...@@ -23,7 +23,7 @@ func ChainCheck(serverList ServerList, task *Task) {
server.Port, server.Port,
} }
ok, err := RemoteViewProcIsExist("chain33", *sshInfo) ok, err := RemoteViewProcIsExist("chain33", *sshInfo)
fmt.Println("value========:",ok) fmt.Println("value========:", ok)
if ok && err == nil { if ok && err == nil {
atomic.AddInt64(&count, 1) atomic.AddInt64(&count, 1)
} }
...@@ -38,13 +38,13 @@ func ChainCheck(serverList ServerList, task *Task) { ...@@ -38,13 +38,13 @@ func ChainCheck(serverList ServerList, task *Task) {
//fmt.Println("len():",len(serverList.ServerList)) //fmt.Println("len():",len(serverList.ServerList))
if count == int64(len(serverList.ServerList)) { if count == int64(len(serverList.ServerList)) {
task.TaskStatus = TASK_SUCESS task.TaskStatus = TASK_SUCESS
fmt.Println("task:",task) fmt.Println("task:", task)
err := PutData(task) err := PutData(task)
if err == nil { if err == nil {
fmt.Println("putData sucess!") fmt.Println("putData sucess!")
break break
} }
fmt.Println("err==========:",err.Error()) fmt.Println("err==========:", err.Error())
} }
if i == 19 { if i == 19 {
task.TaskStatus = TASK_FAIL 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 ( ...@@ -13,8 +13,8 @@ import (
var ( var (
dialTimeout = 5 * time.Second dialTimeout = 5 * time.Second
requestTimeout = 10 * time.Second requestTimeout = 10 * time.Second
endpoints = []string{"10.39.0.6:2379",} endpoints = []string{"10.39.0.6:2379"}
EtcdURL = "http://localhost:2379" EtcdURL = "http://localhost:2379"
) )
func GetEtcdURL() string { func GetEtcdURL() string {
...@@ -52,8 +52,8 @@ func MarshalToString(data interface{}) (string, error) { ...@@ -52,8 +52,8 @@ func MarshalToString(data interface{}) (string, error) {
func PutData(data interface{}) error { func PutData(data interface{}) error {
cli, err := clientv3.New( cli, err := clientv3.New(
clientv3.Config{ clientv3.Config{
Endpoints:[]string{"localhost:2379"}, Endpoints: []string{"localhost:2379"},
DialTimeout:dialTimeout, DialTimeout: dialTimeout,
}) })
if err != nil { if err != nil {
return err return err
...@@ -75,8 +75,8 @@ func PutData(data interface{}) error { ...@@ -75,8 +75,8 @@ func PutData(data interface{}) error {
func GetData(key string) ([]byte, error) { func GetData(key string) ([]byte, error) {
cli, err := clientv3.New( cli, err := clientv3.New(
clientv3.Config{ clientv3.Config{
Endpoints:[]string{"localhost:2379"}, Endpoints: []string{"localhost:2379"},
DialTimeout:dialTimeout, DialTimeout: dialTimeout,
}) })
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