diff --git a/features/monitor/monitor/monitor.go b/features/monitor/monitor/monitor.go index a23f03ad..31d150f5 100644 --- a/features/monitor/monitor/monitor.go +++ b/features/monitor/monitor/monitor.go @@ -1,7 +1,6 @@ package monitor import ( - "fmt" "net/http" "sort" "strings" @@ -42,21 +41,21 @@ var ( // IPAddr IP地址 func IPAddr(w http.ResponseWriter, r *http.Request) { - ipAddrs := make(map[string]string) + ipAddrs := []map[string]string{} interfaces, err := net.Interfaces() if err == nil { for _, iface := range interfaces { - var addrs []string + addrs := map[string]string{} for _, v := range iface.Addrs { prefix := strings.Split(v.Addr, "/")[0] if strings.Contains(prefix, "::") { - addrs = append(addrs, fmt.Sprintf("IPv6 %s", prefix)) + addrs["IPv6"] = prefix } if strings.Contains(prefix, ".") { - addrs = append(addrs, fmt.Sprintf("IPv4 %s", prefix)) + addrs["IPv4"] = prefix } } - ipAddrs[iface.Name] = strings.Join(addrs, " / ") + ipAddrs = append(ipAddrs, addrs) } } services.ResponseWithJson(w, 200, ipAddrs) 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)