增加主机连接测试
parent
22069aa156
commit
157e899e06
|
@ -16,11 +16,11 @@ var (
|
||||||
errUnavailable = errors.New("无法连接远程服务器")
|
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
|
tryTimes := 60
|
||||||
i := 0
|
i := 0
|
||||||
for i < tryTimes {
|
for i < tryTimes {
|
||||||
output, err := exec(ip, port, taskReq)
|
output, err := Exec(ip, port, taskReq)
|
||||||
if err != errUnavailable {
|
if err != errUnavailable {
|
||||||
return output, err
|
return output, err
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ func Exec(ip string, port int, taskReq *pb.TaskRequest) (string, error) {
|
||||||
return "", errUnavailable
|
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() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
logger.Error("panic#rpc/client.go:Exec#", err)
|
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) {
|
func parseGRPCError(err error, conn *grpc.ClientConn, connClosed *bool) (string, error) {
|
||||||
switch grpc.Code(err) {
|
switch grpc.Code(err) {
|
||||||
case codes.Unavailable:
|
case codes.Unavailable, codes.Internal:
|
||||||
conn.Close()
|
conn.Close()
|
||||||
*connClosed = true
|
*connClosed = true
|
||||||
return "", errUnavailable
|
return "", errUnavailable
|
||||||
|
|
|
@ -14,6 +14,8 @@ import (
|
||||||
"github.com/go-macaron/binding"
|
"github.com/go-macaron/binding"
|
||||||
"github.com/ouqiang/gocron/modules/rpc/grpcpool"
|
"github.com/ouqiang/gocron/modules/rpc/grpcpool"
|
||||||
"strings"
|
"strings"
|
||||||
|
"github.com/ouqiang/gocron/modules/rpc/client"
|
||||||
|
"github.com/ouqiang/gocron/modules/rpc/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Index(ctx *macaron.Context) {
|
func Index(ctx *macaron.Context) {
|
||||||
|
@ -160,6 +162,27 @@ func Remove(ctx *macaron.Context) string {
|
||||||
return json.Success("操作成功", nil)
|
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) {
|
func parseQueryParams(ctx *macaron.Context) (models.CommonMap) {
|
||||||
var params models.CommonMap = models.CommonMap{}
|
var params models.CommonMap = models.CommonMap{}
|
||||||
|
|
|
@ -71,6 +71,7 @@ func Register(m *macaron.Macaron) {
|
||||||
m.Get("/edit/:id", host.Edit)
|
m.Get("/edit/:id", host.Edit)
|
||||||
m.Post("/store", binding.Bind(host.HostForm{}), host.Store)
|
m.Post("/store", binding.Bind(host.HostForm{}), host.Store)
|
||||||
m.Get("", host.Index)
|
m.Get("", host.Index)
|
||||||
|
m.Get("/ping/:id", host.Ping)
|
||||||
m.Post("/remove/:id", host.Remove)
|
m.Post("/remove/:id", host.Remove)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,7 @@ func (h *RPCHandler) Run(taskModel models.TaskHost) (result string, err error)
|
||||||
taskRequest.Timeout = int32(taskModel.Timeout)
|
taskRequest.Timeout = int32(taskModel.Timeout)
|
||||||
taskRequest.Command = taskModel.Command
|
taskRequest.Command = taskModel.Command
|
||||||
|
|
||||||
return rpcClient.Exec(taskModel.Name, taskModel.Port, taskRequest)
|
return rpcClient.ExecWithRetry(taskModel.Name, taskModel.Port, taskRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
<button class="ui positive button" onclick="util.removeConfirm('/host/remove/{{{.Id}}}')">删除</button><br>
|
<button class="ui positive button" onclick="util.removeConfirm('/host/remove/{{{.Id}}}')">删除</button><br>
|
||||||
<div style="margin-top: 5px;">
|
<div style="margin-top: 5px;">
|
||||||
<a class="ui twitter button" href="/task?host_id={{{.Id}}}">查看任务</a>
|
<a class="ui twitter button" href="/task?host_id={{{.Id}}}">查看任务</a>
|
||||||
|
<button class="ui blue button" @click="ping({{{.Id}}})">连接测试</button>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -63,4 +64,23 @@
|
||||||
</div>
|
</div>
|
||||||
</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" . }}}
|
{{{ template "common/footer" . }}}
|
Loading…
Reference in New Issue