diff --git a/features/monitor/psnet/psnet.go b/features/monitor/psnet/psnet.go index fb4646c5..3dfa56b0 100644 --- a/features/monitor/psnet/psnet.go +++ b/features/monitor/psnet/psnet.go @@ -1,7 +1,10 @@ package psnet import ( + "fmt" + "net" "net/http" + "time" "ems.agt/lib/log" "ems.agt/lib/services" @@ -16,6 +19,9 @@ var ( UriWs = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/ws" // 停止进程 UriStop = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/stop" + + // 检查ip端口请求 + UriPing = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/ping" ) // 进程管理 @@ -60,3 +66,27 @@ func StopProcess(w http.ResponseWriter, r *http.Request) { } services.ResponseStatusOK200Null(w) } + +// 检查ip端口请求 +func Ping(w http.ResponseWriter, r *http.Request) { + // json 請求參數獲取 + var bodyArgs struct { + Host string `json:"host" validate:"required"` + Port string `json:"port" validate:"required"` + } + err := services.ShouldBindJSON(r, &bodyArgs) + if err != nil { + log.Error("io.ReadAll is failed:", err) + services.ResponseErrorWithJson(w, 400, err.Error()) + return + } + + conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%s", bodyArgs.Host, bodyArgs.Port), 3*time.Second) + if err != nil { + services.ResponseErrorWithJson(w, 400, err.Error()) + return + } + defer conn.Close() + services.ResponseStatusOK200Null(w) + +} diff --git a/lib/routes/routes.go b/lib/routes/routes.go index 40af722b..b1a72d1c 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -223,6 +223,7 @@ func init() { // 进程网络 Register("GET", psnet.UriWs, psnet.ProcessWs, nil) Register("POST", psnet.UriStop, psnet.StopProcess, nil) + Register("POST", psnet.UriPing, psnet.Ping, nil) // 主机CPU内存监控 Register("POST", monitor.UriLoad, monitor.LoadMonitor, nil)