增加主机连接测试

pull/21/merge
ouqiang 2017-06-08 21:25:42 +08:00
parent 22069aa156
commit 157e899e06
5 changed files with 49 additions and 5 deletions

View File

@ -16,11 +16,11 @@ var (
errUnavailable = errors.New("无法连接远程服务器")
)
func Exec(ip string, port int, taskReq *pb.TaskRequest) (string, error) {
func ExecWithRetry(ip string, port int, taskReq *pb.TaskRequest) (string, error) {
tryTimes := 60
i := 0
for i < tryTimes {
output, err := exec(ip, port, taskReq)
output, err := Exec(ip, port, taskReq)
if err != errUnavailable {
return output, err
}
@ -31,7 +31,7 @@ func Exec(ip string, port int, taskReq *pb.TaskRequest) (string, error) {
return "", errUnavailable
}
func exec(ip string, port int, taskReq *pb.TaskRequest) (string, error) {
func Exec(ip string, port int, taskReq *pb.TaskRequest) (string, error) {
defer func() {
if err := recover(); err != nil {
logger.Error("panic#rpc/client.go:Exec#", err)
@ -69,7 +69,7 @@ func exec(ip string, port int, taskReq *pb.TaskRequest) (string, error) {
func parseGRPCError(err error, conn *grpc.ClientConn, connClosed *bool) (string, error) {
switch grpc.Code(err) {
case codes.Unavailable:
case codes.Unavailable, codes.Internal:
conn.Close()
*connClosed = true
return "", errUnavailable

View File

@ -14,6 +14,8 @@ import (
"github.com/go-macaron/binding"
"github.com/ouqiang/gocron/modules/rpc/grpcpool"
"strings"
"github.com/ouqiang/gocron/modules/rpc/client"
"github.com/ouqiang/gocron/modules/rpc/proto"
)
func Index(ctx *macaron.Context) {
@ -160,6 +162,27 @@ func Remove(ctx *macaron.Context) string {
return json.Success("操作成功", nil)
}
func Ping(ctx *macaron.Context) string {
id := ctx.ParamsInt(":id")
hostModel := new(models.Host)
err := hostModel.Find(id)
json := utils.JsonResponse{}
if err != nil || hostModel.Id <= 0{
return json.CommonFailure("主机不存在", err)
}
taskReq := &rpc.TaskRequest{}
taskReq.Command = "echo hello"
taskReq.Timeout = 10
output, err := client.Exec(hostModel.Name, hostModel.Port, taskReq)
if err != nil {
return json.CommonFailure("连接失败-" + err.Error() + " " + output, err)
}
return json.Success("连接成功", nil)
}
// 解析查询参数
func parseQueryParams(ctx *macaron.Context) (models.CommonMap) {
var params models.CommonMap = models.CommonMap{}

View File

@ -71,6 +71,7 @@ func Register(m *macaron.Macaron) {
m.Get("/edit/:id", host.Edit)
m.Post("/store", binding.Bind(host.HostForm{}), host.Store)
m.Get("", host.Index)
m.Get("/ping/:id", host.Ping)
m.Post("/remove/:id", host.Remove)
})

View File

@ -176,7 +176,7 @@ func (h *RPCHandler) Run(taskModel models.TaskHost) (result string, err error)
taskRequest.Timeout = int32(taskModel.Timeout)
taskRequest.Command = taskModel.Command
return rpcClient.Exec(taskModel.Name, taskModel.Port, taskRequest)
return rpcClient.ExecWithRetry(taskModel.Name, taskModel.Port, taskRequest)
}

View File

@ -53,6 +53,7 @@
<button class="ui positive button" onclick="util.removeConfirm('/host/remove/{{{.Id}}}')"></button><br>
<div style="margin-top: 5px;">
<a class="ui twitter button" href="/task?host_id={{{.Id}}}"></a>
<button class="ui blue button" @click="ping({{{.Id}}})"></button>
</div>
</td>
</tr>
@ -63,4 +64,23 @@
</div>
</div>
<script type="text/javascript">
var Vue = new Vue({
el: '.ui.striped.table',
methods: {
ping: function(id) {
swal({
title: '',
text: "连接中.......",
type: 'info',
showConfirmButton: false
});
util.get("/host/ping/" + id, function(code, message) {
swal('', '', 'success');
})
}
}
});
</script>
{{{ template "common/footer" . }}}