mirror of
				https://github.com/ehang-io/nps
				synced 2025-10-30 14:31:54 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package tool
 | |
| 
 | |
| import (
 | |
| 	"math"
 | |
| 	"strconv"
 | |
| 	"time"
 | |
| 
 | |
| 	"ehang.io/nps/lib/common"
 | |
| 	"github.com/astaxie/beego"
 | |
| 	"github.com/shirou/gopsutil/v3/cpu"
 | |
| 	"github.com/shirou/gopsutil/v3/load"
 | |
| 	"github.com/shirou/gopsutil/v3/mem"
 | |
| 	"github.com/shirou/gopsutil/v3/net"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	ports        []int
 | |
| 	ServerStatus []map[string]interface{}
 | |
| )
 | |
| 
 | |
| func StartSystemInfo() {
 | |
| 	if b, err := beego.AppConfig.Bool("system_info_display"); err == nil && b {
 | |
| 		ServerStatus = make([]map[string]interface{}, 0, 1500)
 | |
| 		go getSeverStatus()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func InitAllowPort() {
 | |
| 	p := beego.AppConfig.String("allow_ports")
 | |
| 	ports = common.GetPorts(p)
 | |
| }
 | |
| 
 | |
| func TestServerPort(p int, m string) (b bool) {
 | |
| 	if m == "p2p" || m == "secret" {
 | |
| 		return true
 | |
| 	}
 | |
| 	if p > 65535 || p < 0 {
 | |
| 		return false
 | |
| 	}
 | |
| 	if len(ports) != 0 {
 | |
| 		if !common.InIntArr(ports, p) {
 | |
| 			return false
 | |
| 		}
 | |
| 	}
 | |
| 	if m == "udp" {
 | |
| 		b = common.TestUdpPort(p)
 | |
| 	} else {
 | |
| 		b = common.TestTcpPort(p)
 | |
| 	}
 | |
| 	return
 | |
| }
 | |
| 
 | |
| func getSeverStatus() {
 | |
| 	for {
 | |
| 		if len(ServerStatus) < 10 {
 | |
| 			time.Sleep(time.Second)
 | |
| 		} else {
 | |
| 			time.Sleep(time.Minute)
 | |
| 		}
 | |
| 		cpuPercet, _ := cpu.Percent(0, true)
 | |
| 		var cpuAll float64
 | |
| 		for _, v := range cpuPercet {
 | |
| 			cpuAll += v
 | |
| 		}
 | |
| 		m := make(map[string]interface{})
 | |
| 		loads, _ := load.Avg()
 | |
| 		m["load1"] = loads.Load1
 | |
| 		m["load5"] = loads.Load5
 | |
| 		m["load15"] = loads.Load15
 | |
| 		m["cpu"] = math.Round(cpuAll / float64(len(cpuPercet)))
 | |
| 		swap, _ := mem.SwapMemory()
 | |
| 		m["swap_mem"] = math.Round(swap.UsedPercent)
 | |
| 		vir, _ := mem.VirtualMemory()
 | |
| 		m["virtual_mem"] = math.Round(vir.UsedPercent)
 | |
| 		conn, _ := net.ProtoCounters(nil)
 | |
| 		io1, _ := net.IOCounters(false)
 | |
| 		time.Sleep(time.Millisecond * 500)
 | |
| 		io2, _ := net.IOCounters(false)
 | |
| 		if len(io2) > 0 && len(io1) > 0 {
 | |
| 			m["io_send"] = (io2[0].BytesSent - io1[0].BytesSent) * 2
 | |
| 			m["io_recv"] = (io2[0].BytesRecv - io1[0].BytesRecv) * 2
 | |
| 		}
 | |
| 		t := time.Now()
 | |
| 		m["time"] = strconv.Itoa(t.Hour()) + ":" + strconv.Itoa(t.Minute()) + ":" + strconv.Itoa(t.Second())
 | |
| 
 | |
| 		for _, v := range conn {
 | |
| 			m[v.Protocol] = v.Stats["CurrEstab"]
 | |
| 		}
 | |
| 		if len(ServerStatus) >= 1440 {
 | |
| 			ServerStatus = ServerStatus[1:]
 | |
| 		}
 | |
| 		ServerStatus = append(ServerStatus, m)
 | |
| 	}
 | |
| }
 | 
