94 lines
2.1 KiB
Go
94 lines
2.1 KiB
Go
package psnet
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"time"
|
|
|
|
"be.ems/lib/core/utils/ctx"
|
|
"be.ems/lib/log"
|
|
"be.ems/lib/services"
|
|
"be.ems/lib/wsinfo"
|
|
"be.ems/restagent/config"
|
|
"github.com/gorilla/websocket"
|
|
"github.com/shirou/gopsutil/process"
|
|
)
|
|
|
|
var (
|
|
// websockte通信
|
|
UriWs = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/ws"
|
|
// 停止进程
|
|
UriStop = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/stop"
|
|
|
|
// 检查ip端口请求
|
|
UriPing = config.DefaultUriPrefix + "/monitor/{apiVersion}/psnet/ping"
|
|
)
|
|
|
|
// 进程管理
|
|
var wsUpgrade = websocket.Upgrader{
|
|
CheckOrigin: func(r *http.Request) bool {
|
|
return true
|
|
},
|
|
}
|
|
|
|
// ProcessWs
|
|
func ProcessWs(w http.ResponseWriter, r *http.Request) {
|
|
ws, err := wsUpgrade.Upgrade(w, r, nil)
|
|
if err != nil {
|
|
return
|
|
}
|
|
wsClient := wsinfo.NewWsClient("processClient", ws)
|
|
go wsClient.Read()
|
|
go wsClient.Write()
|
|
}
|
|
|
|
// 停止进程 {"PID":30040}
|
|
func StopProcess(w http.ResponseWriter, r *http.Request) {
|
|
// json 請求參數獲取
|
|
var bodyArgs struct {
|
|
PID int32 `json:"PID" validate:"required"`
|
|
}
|
|
err := ctx.ShouldBindJSON(r, &bodyArgs)
|
|
if err != nil {
|
|
log.Error("io.ReadAll is failed:", err)
|
|
services.ResponseErrorWithJson(w, 400, err.Error())
|
|
return
|
|
}
|
|
|
|
proc, err := process.NewProcess(bodyArgs.PID)
|
|
if err != nil {
|
|
services.ResponseErrorWithJson(w, 400, err.Error())
|
|
return
|
|
}
|
|
if err := proc.Kill(); err != nil {
|
|
services.ResponseErrorWithJson(w, 400, err.Error())
|
|
return
|
|
}
|
|
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 := ctx.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)
|
|
|
|
}
|