12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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)
- }
- }
|