mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package machine
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import (
							 | 
						|||
| 
								 | 
							
									"github.com/siddontang/go/log"
							 | 
						|||
| 
								 | 
							
									"io/ioutil"
							 | 
						|||
| 
								 | 
							
									"mayfly-go/base"
							 | 
						|||
| 
								 | 
							
									"mayfly-go/base/utils"
							 | 
						|||
| 
								 | 
							
									"mayfly-go/models"
							 | 
						|||
| 
								 | 
							
									"time"
							 | 
						|||
| 
								 | 
							
								)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								const BasePath = "./machine/shell/"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								const MonitorTemp = "cpuRate:{cpuRate}%,memRate:{memRate}%,sysLoad:{sysLoad}\n"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// shell文件内容缓存,避免每次读取文件
							 | 
						|||
| 
								 | 
							
								var shellCache = make(map[string]string)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func GetProcessByName(cli *Cli, name string) string {
							 | 
						|||
| 
								 | 
							
									return cli.Run(getShellContent("sys_info"))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func GetSystemInfo(cli *Cli) string {
							 | 
						|||
| 
								 | 
							
									return cli.Run(getShellContent("system_info"))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func GetMonitorInfo(cli *Cli) *models.MachineMonitor {
							 | 
						|||
| 
								 | 
							
									mm := new(models.MachineMonitor)
							 | 
						|||
| 
								 | 
							
									res := cli.Run(getShellContent("monitor"))
							 | 
						|||
| 
								 | 
							
									resMap := make(map[string]interface{})
							 | 
						|||
| 
								 | 
							
									utils.ReverStrTemplate(MonitorTemp, res, resMap)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									err := utils.Map2Struct(resMap, mm)
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										log.Error("解析machine monitor: %s", err.Error())
							 | 
						|||
| 
								 | 
							
										return nil
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									mm.MachineId = cli.machine.Id
							 | 
						|||
| 
								 | 
							
									mm.CreateTime = time.Now()
							 | 
						|||
| 
								 | 
							
									return mm
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 获取shell内容
							 | 
						|||
| 
								 | 
							
								func getShellContent(name string) string {
							 | 
						|||
| 
								 | 
							
									cacheShell := shellCache[name]
							 | 
						|||
| 
								 | 
							
									if cacheShell != "" {
							 | 
						|||
| 
								 | 
							
										return cacheShell
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									bytes, err := ioutil.ReadFile(BasePath + name + ".sh")
							 | 
						|||
| 
								 | 
							
									base.ErrIsNil(err, "获取shell文件失败")
							 | 
						|||
| 
								 | 
							
									shellStr := string(bytes)
							 | 
						|||
| 
								 | 
							
									shellCache[name] = shellStr
							 | 
						|||
| 
								 | 
							
									return shellStr
							 | 
						|||
| 
								 | 
							
								}
							 |