From aebc257444a1acaf8929096a326d3fdb0ce1c5cc Mon Sep 17 00:00:00 2001 From: Creling Date: Sat, 27 Feb 2021 16:33:27 +0800 Subject: [PATCH 1/7] fix: correct minor typos in disk usage statistic --- service/monitor/monitor.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/service/monitor/monitor.go b/service/monitor/monitor.go index 16ad4d0..4453318 100644 --- a/service/monitor/monitor.go +++ b/service/monitor/monitor.go @@ -35,7 +35,13 @@ func GetHost() *model.Host { } mv, _ := mem.VirtualMemory() ms, _ := mem.SwapMemory() - u, _ := disk.Usage("/") + u, _ := disk.Partitions(false) + var total uint64 = 0 + for _, dev := range u { + usage, _ := disk.Usage(dev.Mountpoint) + total += usage.Total + } + fmt.Println(total) var ip ipDotSbGeoIP resp, err := http.Get("https://api-ipv4.ip.sb/geoip") if err == nil { @@ -54,7 +60,7 @@ func GetHost() *model.Host { PlatformVersion: hi.PlatformVersion, CPU: cpus, MemTotal: mv.Total, - DiskTotal: u.Total, + DiskTotal: total, SwapTotal: ms.Total, Arch: hi.KernelArch, Virtualization: hi.VirtualizationSystem, @@ -77,13 +83,18 @@ func GetState(delay int64) *model.HostState { cpuPercent = cp[0] } // Disk - u, _ := disk.Usage("/") + u, _ := disk.Partitions(false) + var used uint64 = 0 + for _, dev := range u { + usage, _ := disk.Usage(dev.Mountpoint) + used += usage.Used + } return &model.HostState{ CPU: cpuPercent, MemUsed: mv.Used, SwapUsed: ms.Used, - DiskUsed: u.Used, + DiskUsed: used, NetInTransfer: atomic.LoadUint64(&netInTransfer), NetOutTransfer: atomic.LoadUint64(&netOutTransfer), NetInSpeed: atomic.LoadUint64(&netInSpeed), From 31d4e1eaf9142158c273a736af64f41145542fa2 Mon Sep 17 00:00:00 2001 From: Creling Date: Sat, 27 Feb 2021 17:03:51 +0800 Subject: [PATCH 2/7] fix: correct minor typos --- service/monitor/monitor.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/service/monitor/monitor.go b/service/monitor/monitor.go index 4453318..933cf0a 100644 --- a/service/monitor/monitor.go +++ b/service/monitor/monitor.go @@ -36,12 +36,11 @@ func GetHost() *model.Host { mv, _ := mem.VirtualMemory() ms, _ := mem.SwapMemory() u, _ := disk.Partitions(false) - var total uint64 = 0 + var total uint64 for _, dev := range u { usage, _ := disk.Usage(dev.Mountpoint) total += usage.Total } - fmt.Println(total) var ip ipDotSbGeoIP resp, err := http.Get("https://api-ipv4.ip.sb/geoip") if err == nil { @@ -84,7 +83,7 @@ func GetState(delay int64) *model.HostState { } // Disk u, _ := disk.Partitions(false) - var used uint64 = 0 + var used uint64 for _, dev := range u { usage, _ := disk.Usage(dev.Mountpoint) used += usage.Used From 0db87b6f82ec6f532053a33da67836529eeb465d Mon Sep 17 00:00:00 2001 From: naiba Date: Sat, 27 Feb 2021 17:24:54 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=F0=9F=94=A8=20chore:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- script/install.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 95a0edf..43d9a72 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 哪吒监控 -![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=管理面板%20v0.4.9&logo=github&style=for-the-badge) ![Agent release](https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge) ![shell](https://img.shields.io/badge/安装脚本-v0.4.6-brightgreen?style=for-the-badge&logo=linux) +![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=管理面板%20v0.4.9&logo=github&style=for-the-badge) ![Agent release](https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge) ![shell](https://img.shields.io/badge/安装脚本-v0.4.7-brightgreen?style=for-the-badge&logo=linux) :trollface: 哪吒监控 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。 diff --git a/script/install.sh b/script/install.sh index d693912..be17ff5 100755 --- a/script/install.sh +++ b/script/install.sh @@ -10,7 +10,7 @@ NZ_BASE_PATH="/opt/nezha" NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_AGENT_SERVICE="/etc/systemd/system/nezha-agent.service" -NZ_VERSION="v0.4.6" +NZ_VERSION="v0.4.7" red='\033[0;31m' green='\033[0;32m' @@ -149,12 +149,12 @@ install_dashboard() { command -v docker-compose >/dev/null 2>&1 if [[ $? != 0 ]]; then echo -e "正在安装 Docker Compose" - wget -O /usr/local/bin/docker-compose "https://${GITHUB_URL}/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" >/dev/null 2>&1 && - chmod +x /usr/local/bin/docker-compose + wget -O /usr/local/bin/docker-compose "https://${GITHUB_URL}/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" >/dev/null 2>&1 if [[ $? != 0 ]]; then echo -e "${red}下载脚本失败,请检查本机能否连接 ${GITHUB_URL}${plain}" return 0 fi + chmod +x /usr/local/bin/docker-compose echo -e "${green}Docker Compose${plain} 安装成功" fi From 8cd3612d074c0ae5a32bfede94afbd086a1b5c18 Mon Sep 17 00:00:00 2001 From: naiba Date: Sat, 27 Feb 2021 18:07:28 +0800 Subject: [PATCH 4/7] Revert "fix: correct minor typos" This reverts commit 31d4e1eaf9142158c273a736af64f41145542fa2. --- service/monitor/monitor.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/service/monitor/monitor.go b/service/monitor/monitor.go index 933cf0a..4453318 100644 --- a/service/monitor/monitor.go +++ b/service/monitor/monitor.go @@ -36,11 +36,12 @@ func GetHost() *model.Host { mv, _ := mem.VirtualMemory() ms, _ := mem.SwapMemory() u, _ := disk.Partitions(false) - var total uint64 + var total uint64 = 0 for _, dev := range u { usage, _ := disk.Usage(dev.Mountpoint) total += usage.Total } + fmt.Println(total) var ip ipDotSbGeoIP resp, err := http.Get("https://api-ipv4.ip.sb/geoip") if err == nil { @@ -83,7 +84,7 @@ func GetState(delay int64) *model.HostState { } // Disk u, _ := disk.Partitions(false) - var used uint64 + var used uint64 = 0 for _, dev := range u { usage, _ := disk.Usage(dev.Mountpoint) used += usage.Used From 2133973579223a76df302b61d169851b23ec2798 Mon Sep 17 00:00:00 2001 From: naiba Date: Sat, 27 Feb 2021 18:56:59 +0800 Subject: [PATCH 5/7] Revert "fix: correct minor typos in disk usage statistic" This reverts commit aebc257444a1acaf8929096a326d3fdb0ce1c5cc. --- service/monitor/monitor.go | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/service/monitor/monitor.go b/service/monitor/monitor.go index 4453318..16ad4d0 100644 --- a/service/monitor/monitor.go +++ b/service/monitor/monitor.go @@ -35,13 +35,7 @@ func GetHost() *model.Host { } mv, _ := mem.VirtualMemory() ms, _ := mem.SwapMemory() - u, _ := disk.Partitions(false) - var total uint64 = 0 - for _, dev := range u { - usage, _ := disk.Usage(dev.Mountpoint) - total += usage.Total - } - fmt.Println(total) + u, _ := disk.Usage("/") var ip ipDotSbGeoIP resp, err := http.Get("https://api-ipv4.ip.sb/geoip") if err == nil { @@ -60,7 +54,7 @@ func GetHost() *model.Host { PlatformVersion: hi.PlatformVersion, CPU: cpus, MemTotal: mv.Total, - DiskTotal: total, + DiskTotal: u.Total, SwapTotal: ms.Total, Arch: hi.KernelArch, Virtualization: hi.VirtualizationSystem, @@ -83,18 +77,13 @@ func GetState(delay int64) *model.HostState { cpuPercent = cp[0] } // Disk - u, _ := disk.Partitions(false) - var used uint64 = 0 - for _, dev := range u { - usage, _ := disk.Usage(dev.Mountpoint) - used += usage.Used - } + u, _ := disk.Usage("/") return &model.HostState{ CPU: cpuPercent, MemUsed: mv.Used, SwapUsed: ms.Used, - DiskUsed: used, + DiskUsed: u.Used, NetInTransfer: atomic.LoadUint64(&netInTransfer), NetOutTransfer: atomic.LoadUint64(&netOutTransfer), NetInSpeed: atomic.LoadUint64(&netInSpeed), From dbf62991a540dde7e2c843a37c52890d39ab0cad Mon Sep 17 00:00:00 2001 From: naiba Date: Sat, 27 Feb 2021 19:24:19 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=F0=9F=9A=B8=20chore:=20refactor=20CPU=20mo?= =?UTF-8?q?del=20string?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- cmd/playground/main.go | 28 ++++++++++++++++++++++++---- model/host.go | 16 +--------------- service/dao/dao.go | 2 +- service/monitor/monitor.go | 20 +++++++++++++++++--- 5 files changed, 44 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 43d9a72..7d92ecb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 哪吒监控 -![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=管理面板%20v0.4.9&logo=github&style=for-the-badge) ![Agent release](https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge) ![shell](https://img.shields.io/badge/安装脚本-v0.4.7-brightgreen?style=for-the-badge&logo=linux) +![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=管理面板%20v0.4.10&logo=github&style=for-the-badge) ![Agent release](https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge) ![shell](https://img.shields.io/badge/安装脚本-v0.4.7-brightgreen?style=for-the-badge&logo=linux) :trollface: 哪吒监控 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。 diff --git a/cmd/playground/main.go b/cmd/playground/main.go index 388e53c..2baeaaa 100644 --- a/cmd/playground/main.go +++ b/cmd/playground/main.go @@ -12,15 +12,17 @@ import ( "github.com/go-ping/ping" "github.com/naiba/nezha/pkg/utils" + "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/disk" + "github.com/shirou/gopsutil/v3/host" ) func main() { // icmp() // tcpping() // httpWithSSLInfo() - // diskinfo() - cmdExec() + sysinfo() + // cmdExec() } func tcpping() { @@ -34,8 +36,26 @@ func tcpping() { fmt.Println(time.Now().Sub(start).Microseconds(), float32(time.Now().Sub(start).Microseconds())/1000.0) } -func diskinfo() { - // 硬盘信息 +func sysinfo() { + hi, _ := host.Info() + var cpuType string + if hi.VirtualizationSystem != "" { + cpuType = "Virtual" + } else { + cpuType = "Physical" + } + cpuModelCount := make(map[string]int) + ci, _ := cpu.Info() + for i := 0; i < len(ci); i++ { + cpuModelCount[ci[i].ModelName]++ + } + var cpus []string + for model, count := range cpuModelCount { + cpus = append(cpus, fmt.Sprintf("%s %d %s Core", model, count, cpuType)) + } + log.Println(cpus) + os.Exit(0) + // 硬盘信息,不使用的原因是会重复统计 Linux、Mac dparts, _ := disk.Partitions(false) for _, part := range dparts { u, _ := disk.Usage(part.Mountpoint) diff --git a/model/host.go b/model/host.go index 3e1ebcb..6e4431e 100644 --- a/model/host.go +++ b/model/host.go @@ -1,8 +1,6 @@ package model import ( - "fmt" - pb "github.com/naiba/nezha/proto" ) @@ -85,22 +83,10 @@ func (h *Host) PB() *pb.Host { } func PB2Host(h *pb.Host) Host { - - cpuCount := make(map[string]int, 0) - cpus := h.GetCpu() - for _, u := range cpus { - cpuCount[u]++ - } - - var distCpu []string - for u, num := range cpuCount { - distCpu = append(distCpu, fmt.Sprintf("%sx%d", u, num)) - } - return Host{ Platform: h.GetPlatform(), PlatformVersion: h.GetPlatformVersion(), - CPU: distCpu, + CPU: h.GetCpu(), MemTotal: h.GetMemTotal(), DiskTotal: h.GetDiskTotal(), SwapTotal: h.GetSwapTotal(), diff --git a/service/dao/dao.go b/service/dao/dao.go index 2a64c3f..9ae7b39 100644 --- a/service/dao/dao.go +++ b/service/dao/dao.go @@ -13,7 +13,7 @@ import ( pb "github.com/naiba/nezha/proto" ) -var Version = "v0.4.9" // !!记得修改 README 重的 badge 版本!! +var Version = "v0.4.10" // !!记得修改 README 重的 badge 版本!! const ( SnapshotDelay = 3 diff --git a/service/monitor/monitor.go b/service/monitor/monitor.go index 16ad4d0..11a7bd9 100644 --- a/service/monitor/monitor.go +++ b/service/monitor/monitor.go @@ -28,10 +28,20 @@ var netInSpeed, netOutSpeed, netInTransfer, netOutTransfer, lastUpdate uint64 func GetHost() *model.Host { hi, _ := host.Info() - var cpus []string + var cpuType string + if hi.VirtualizationSystem != "" { + cpuType = "Virtual" + } else { + cpuType = "Physical" + } + cpuModelCount := make(map[string]int) ci, _ := cpu.Info() for i := 0; i < len(ci); i++ { - cpus = append(cpus, fmt.Sprintf("%v-%vC%vT", ci[i].ModelName, ci[i].Cores, ci[i].Stepping)) + cpuModelCount[ci[i].ModelName]++ + } + var cpus []string + for model, count := range cpuModelCount { + cpus = append(cpus, fmt.Sprintf("%s %d %s Core", model, count, cpuType)) } mv, _ := mem.VirtualMemory() ms, _ := mem.SwapMemory() @@ -47,7 +57,11 @@ func GetHost() *model.Host { if err == nil { defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) - ip.IP = fmt.Sprintf("ip(v4: %s, v6: %s)", ip.IP, body) + if ip.IP == "" { + ip.IP = string(body) + } else { + ip.IP = fmt.Sprintf("ip(v4: %s, v6: %s)", ip.IP, body) + } } return &model.Host{ Platform: hi.OS, From 8f7346141a88ed919343670a106dc97789b926f3 Mon Sep 17 00:00:00 2001 From: naiba Date: Sun, 28 Feb 2021 23:58:04 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=F0=9F=90=9B=20fixed=20#105?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- model/server.go | 8 +++++++- model/server_test.go | 27 +++++++++++++++++++++++++++ resource/template/common/menu.html | 2 +- service/dao/dao.go | 2 +- service/rpc/nezha.go | 2 +- 6 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 model/server_test.go diff --git a/README.md b/README.md index 7d92ecb..39f24e7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 哪吒监控 -![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=管理面板%20v0.4.10&logo=github&style=for-the-badge) ![Agent release](https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge) ![shell](https://img.shields.io/badge/安装脚本-v0.4.7-brightgreen?style=for-the-badge&logo=linux) +![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=管理面板%20v0.4.11&logo=github&style=for-the-badge) ![Agent release](https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge) ![shell](https://img.shields.io/badge/安装脚本-v0.4.7-brightgreen?style=for-the-badge&logo=linux) :trollface: 哪吒监控 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。 diff --git a/model/server.go b/model/server.go index f759d96..9dc5bf9 100644 --- a/model/server.go +++ b/model/server.go @@ -1,6 +1,7 @@ package model import ( + "encoding/json" "fmt" "html/template" "time" @@ -25,5 +26,10 @@ type Server struct { } func (s Server) Marshal() template.JS { - return template.JS(fmt.Sprintf(`{"ID":%d,"Name":"%s","Secret":"%s","DisplayIndex":%d,"Tag":"%s","Note":"%s"}`, s.ID, s.Name, s.Secret, s.DisplayIndex, s.Tag, s.Note)) + name, _ := json.Marshal(s.Name) + tag, _ := json.Marshal(s.Tag) + note, _ := json.Marshal(s.Note) + secret, _ := json.Marshal(s.Secret) + return template.JS(fmt.Sprintf(`{"ID":%d,"Name":%s,"Secret":%s,"DisplayIndex":%d,"Tag":%s,"Note":%s}`, + s.ID, name, secret, s.DisplayIndex, tag, note)) } diff --git a/model/server_test.go b/model/server_test.go new file mode 100644 index 0000000..6fa5abd --- /dev/null +++ b/model/server_test.go @@ -0,0 +1,27 @@ +package model + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestServerMarshal(t *testing.T) { + patterns := []string{ + "asd > asd", + "asd \" asd", + "asd } asd", + } + + for i := 0; i < len(patterns); i++ { + server := Server{ + Name: patterns[i], + Tag: patterns[i], + } + serverStr := string(server.Marshal()) + var serverRestore Server + assert.Nil(t, json.Unmarshal([]byte(serverStr), &serverRestore)) + assert.Equal(t, server, serverRestore) + } +} diff --git a/resource/template/common/menu.html b/resource/template/common/menu.html index 373eb81..063463d 100644 --- a/resource/template/common/menu.html +++ b/resource/template/common/menu.html @@ -40,7 +40,7 @@ {{else}} - 登录 + 登录 {{end}} diff --git a/service/dao/dao.go b/service/dao/dao.go index 9ae7b39..41d9a9b 100644 --- a/service/dao/dao.go +++ b/service/dao/dao.go @@ -13,7 +13,7 @@ import ( pb "github.com/naiba/nezha/proto" ) -var Version = "v0.4.10" // !!记得修改 README 重的 badge 版本!! +var Version = "v0.4.11" // !!记得修改 README 重的 badge 版本!! const ( SnapshotDelay = 3 diff --git a/service/rpc/nezha.go b/service/rpc/nezha.go index f6b4316..2546ae5 100644 --- a/service/rpc/nezha.go +++ b/service/rpc/nezha.go @@ -26,7 +26,7 @@ func (s *NezhaHandler) ReportTask(c context.Context, r *pb.TaskResult) (*pb.Rece var errMsg string if strings.HasPrefix(r.GetData(), "SSL证书错误:") { // 排除超时错误 - if !strings.HasSuffix(r.GetData(), "i/o timeout") { + if !strings.HasSuffix(r.GetData(), "timeout") { errMsg = r.GetData() } } else {