diff --git a/.gitignore b/.gitignore index 878df222a4535295dfeb7798e8e256de3c349d30..482d459d21680f7357c531bb990b43521455209a 100644 --- a/.gitignore +++ b/.gitignore @@ -31,5 +31,6 @@ yarn-error.log* /log # Local config +agent config.yaml config.json diff --git a/pkg/app/agent/main.go b/pkg/app/agent/main.go index 700476c78deea9953ae9b2b488a5a1fcb5d5c453..3c68f9e9c1917b47926b0fea43b16955a67d2521 100644 --- a/pkg/app/agent/main.go +++ b/pkg/app/agent/main.go @@ -28,7 +28,7 @@ func main() { client := &network.SocketClient{ MessageProcesser: protocol.NewMessageProcesser(), } - if err := client.Connect("172.30.30.91:8879"); err != nil { + if err := client.Connect("192.168.160.128:8879"); err != nil { fmt.Println("connect server failed, error:", err) os.Exit(-1) } @@ -115,4 +115,30 @@ func regitsterHandler(c *network.SocketClient) { } return c.Send(resp_msg) }) + c.BindHandler(protocol.CPUInfo, func(c *network.SocketClient, msg *protocol.Message) error { + fmt.Println("process agent info command:", msg.String()) + + cpuinfo := uos.GetCPUInfo() + + resp_msg := &protocol.Message{ + UUID: msg.UUID, + Type: msg.Type, + Status: 0, + Data: cpuinfo, + } + return c.Send(resp_msg) + }) + c.BindHandler(protocol.MemoryInfo, func(c *network.SocketClient, msg *protocol.Message) error { + fmt.Println("process agent info command:", msg.String()) + + memoryinfo := uos.GetMemoryConfig() + + resp_msg := &protocol.Message{ + UUID: msg.UUID, + Type: msg.Type, + Status: 0, + Data: memoryinfo, + } + return c.Send(resp_msg) + }) } diff --git a/pkg/app/server/agentmanager/agent.go b/pkg/app/server/agentmanager/agent.go index 33418090143c333395efb7e49ea77a05b2c185a4..722daedceed9cea90849db3c8a4152301820c5d3 100644 --- a/pkg/app/server/agentmanager/agent.go +++ b/pkg/app/server/agentmanager/agent.go @@ -163,6 +163,38 @@ func (a *Agent) GetOSInfo() (interface{}, error) { return resp_message.Data, nil } +// 远程获取agent端的CPU信息 +func (a *Agent) GetCPUInfo() (interface{}, error) { + msg := &protocol.Message{ + UUID: uuid.New().String(), + Type: protocol.CPUInfo, + Data: struct{}{}, + } + + resp_message, err := a.sendMessage(msg, true, 0) + if err != nil { + logger.Error("failed to run script on agent") + return nil, err + } + return resp_message.Data, nil +} + +// 远程获取agent端的内存信息 +func (a *Agent) GetMemoryInfo() (interface{}, error) { + msg := &protocol.Message{ + UUID: uuid.New().String(), + Type: protocol.MemoryInfo, + Data: struct{}{}, + } + + resp_message, err := a.sendMessage(msg, true, 0) + if err != nil { + logger.Error("failed to run script on agent") + return nil, err + } + return resp_message.Data, nil +} + // 远程获取agent端的系统信息 func (a *Agent) AgentInfo() (interface{}, error) { msg := &protocol.Message{ diff --git a/pkg/app/server/main.go b/pkg/app/server/main.go index ae4518c65bd265e427f0679994008c9b0ae6b2f4..43e13a9420dc1aeb546df1811a208bd7d9a78b55 100644 --- a/pkg/app/server/main.go +++ b/pkg/app/server/main.go @@ -6,6 +6,7 @@ import ( "openeluer.org/PilotGo/PilotGo/pkg/app/server/agentmanager" "openeluer.org/PilotGo/PilotGo/pkg/app/server/network" + "openeluer.org/PilotGo/PilotGo/pkg/cmd" "openeluer.org/PilotGo/PilotGo/pkg/config" "openeluer.org/PilotGo/PilotGo/pkg/logger" ) @@ -31,17 +32,18 @@ func main() { // 启动agent socket server go func() { - server.Run("172.30.30.91:8879") + server.Run("192.168.160.128:8879") }() // 此处启动前端及REST http server go func() { - // err = cmd.Start(conf) - // if err != nil { - // logger.Info("server start failed:%s", err.Error()) - // os.Exit(-1) - // } - network.HttpServerStart("172.30.30.91:8080") + // 连接数据库及启动router + err = cmd.Start(conf) + if err != nil { + logger.Info("server start failed:%s", err.Error()) + os.Exit(-1) + } + // network.HttpServerStart("192.168.160.128:8084") }() select {} diff --git a/pkg/app/server/network/handlers/cpu.go b/pkg/app/server/network/handlers/cpu.go new file mode 100644 index 0000000000000000000000000000000000000000..3cc0759338d3be9febe9682bcb1d163512825ee2 --- /dev/null +++ b/pkg/app/server/network/handlers/cpu.go @@ -0,0 +1,24 @@ +package handlers + +import ( + "github.com/gin-gonic/gin" + "openeluer.org/PilotGo/PilotGo/pkg/app/server/agentmanager" + "openeluer.org/PilotGo/PilotGo/pkg/common/response" +) + +func CPUInfoHandler(c *gin.Context) { + uuid := c.Query("uuid") + + agent := agentmanager.GetAgent(uuid) + if agent == nil { + response.Fail(c, nil, "获取uuid失败!") + return + } + + cpu_info, err := agent.GetCPUInfo() + if err != nil { + response.Fail(c, nil, "获取系统CPU信息失败!") + return + } + response.Success(c, gin.H{"CPU_info": cpu_info}, "Success") +} diff --git a/pkg/app/server/network/handlers/memory.go b/pkg/app/server/network/handlers/memory.go new file mode 100644 index 0000000000000000000000000000000000000000..354ac25b1b43b20f02a57f89d14b06fa7963f879 --- /dev/null +++ b/pkg/app/server/network/handlers/memory.go @@ -0,0 +1,24 @@ +package handlers + +import ( + "github.com/gin-gonic/gin" + "openeluer.org/PilotGo/PilotGo/pkg/app/server/agentmanager" + "openeluer.org/PilotGo/PilotGo/pkg/common/response" +) + +func MemoryInfoHandler(c *gin.Context) { + uuid := c.Query("uuid") + + agent := agentmanager.GetAgent(uuid) + if agent == nil { + response.Fail(c, nil, "获取uuid失败!") + return + } + + memory_info, err := agent.GetMemoryInfo() + if err != nil { + response.Fail(c, nil, "获取系统内存信息失败!") + return + } + response.Success(c, gin.H{"memory_info": memory_info}, "Success") +} diff --git a/pkg/app/server/network/handlers/os.go b/pkg/app/server/network/handlers/os.go index fafb06f6cfddcd6a6a593ddd42e2ac74eaaa53c2..72889165324f93fcae755162b4f2e7dc5244aa79 100644 --- a/pkg/app/server/network/handlers/os.go +++ b/pkg/app/server/network/handlers/os.go @@ -1,10 +1,9 @@ package handlers import ( - "net/http" - "github.com/gin-gonic/gin" "openeluer.org/PilotGo/PilotGo/pkg/app/server/agentmanager" + "openeluer.org/PilotGo/PilotGo/pkg/common/response" ) func OSInfoHandler(c *gin.Context) { @@ -12,13 +11,14 @@ func OSInfoHandler(c *gin.Context) { agent := agentmanager.GetAgent(uuid) if agent == nil { - c.JSON(http.StatusOK, `{"status":-1}`) + response.Fail(c, nil, "获取uuid失败!") + return } os_info, err := agent.GetOSInfo() if err != nil { - c.JSON(http.StatusOK, `{"status":-1}`) + response.Fail(c, nil, "获取系统信息失败!") + return } - - c.JSON(http.StatusOK, os_info) + response.Success(c, gin.H{"os_info": os_info}, "Success") } diff --git a/pkg/common/response/response.go b/pkg/common/response/response.go index 1840b048297c873055b7ea78bc814b91df8ceb39..3476b543c4e8bfef10338a1ee0078f6ac2f6a977 100644 --- a/pkg/common/response/response.go +++ b/pkg/common/response/response.go @@ -7,8 +7,9 @@ package response */ import ( - "github.com/gin-gonic/gin" "net/http" + + "github.com/gin-gonic/gin" ) func Response(c *gin.Context, httpStatus int, code int, data gin.H, msg string) { @@ -23,5 +24,5 @@ func Success(c *gin.Context, data gin.H, msg string) { } func Fail(c *gin.Context, data gin.H, msg string) { - Response(c, http.StatusOK, 400, data, msg) + Response(c, http.StatusBadRequest, 400, data, msg) } diff --git a/pkg/model/common.go b/pkg/model/common.go index d4fc95623e22948c84369b28e94cc83f92c767e7..7796df8cbc1da702df3c3fdb730b01ce0642e33e 100644 --- a/pkg/model/common.go +++ b/pkg/model/common.go @@ -58,6 +58,7 @@ func crudAll(p *PaginationQ, queryTx *gorm.DB, list interface{}) (uint, error) { // 拼装json 分页数据 func JsonPagination(c *gin.Context, list interface{}, total uint, query *PaginationQ) { c.AbortWithStatusJSON(200, gin.H{ + "code": 200, "ok": true, "data": list, "total": total, diff --git a/pkg/protocol/message.go b/pkg/protocol/message.go index fc0b60de3cd58aa53572251896a29bef1a30404b..0ad5720aed7888e52f86883ae71258b3aeb2bdba 100644 --- a/pkg/protocol/message.go +++ b/pkg/protocol/message.go @@ -34,6 +34,12 @@ const ( AgentInfo = 11 // os信息获取 OsInfo = 12 + //CPU信息数据获取 + CPUInfo = 13 + //内存信息数据获取 + MemoryInfo = 14 + //磁盘信息数据获取 + DiskInfo = 15 ) type Message struct { diff --git a/pkg/router/router.go b/pkg/router/router.go index 25101391587310c17875de499c26fd2d891acd9b..47b2f9e46143421b120d6298f757d4994a54c518 100644 --- a/pkg/router/router.go +++ b/pkg/router/router.go @@ -27,6 +27,9 @@ func SetupRouter() *gin.Engine { group.GET("/agent_info", handlers.AgentInfoHandler) group.GET("/agent_list", handlers.AgentListHandler) group.GET("/run_script", handlers.RunScript) + group.GET("/os_info", handlers.OSInfoHandler) + group.GET("/cpu_info", handlers.CPUInfoHandler) + group.GET("/memory_info", handlers.MemoryInfoHandler) } user := router.Group("user") diff --git a/pkg/utils/os/cpu.go b/pkg/utils/os/cpu.go index bdf8d971bd7cea010d824f1bbd51ec479b4aa4b9..3c852b587cc88ac834b666097e30b0758afc9b69 100644 --- a/pkg/utils/os/cpu.go +++ b/pkg/utils/os/cpu.go @@ -49,3 +49,11 @@ func GetPhysicalCPU() int { } return cpunum } + +func GetCPUInfo() *CPUInfo { + cpuinfo := &CPUInfo{ + CpuName: GetCPUName(), + CpuNum: GetPhysicalCPU(), + } + return cpuinfo +} diff --git a/pkg/utils/os/memory.go b/pkg/utils/os/memory.go index aace7789ec5592535529882dba0e275e9509fad3..ce2360952c68aabd4cde5f9aeffef22358a664c7 100644 --- a/pkg/utils/os/memory.go +++ b/pkg/utils/os/memory.go @@ -103,7 +103,7 @@ func bytesToInt(bys []byte) int64 { } -func GetMemoryConfig() MemoryConfig { +func GetMemoryConfig() *MemoryConfig { cmd := exec.Command("/bin/sh", "-c", "cat /proc/meminfo") stdout, err := cmd.StdoutPipe() if err != nil { @@ -114,7 +114,7 @@ func GetMemoryConfig() MemoryConfig { } //使用带缓冲的读取器 outputBuf := bufio.NewReader(stdout) - m := MemoryConfig{} + m := &MemoryConfig{} for { //一次获取一行,_ 获取当前行是否被读完 output, _, err := outputBuf.ReadLine() @@ -126,7 +126,7 @@ func GetMemoryConfig() MemoryConfig { break } a, b := reserveRead(output) - moduleMatch(string(a), bytesToInt(b), &m) + moduleMatch(string(a), bytesToInt(b), m) } return m