LingxinMeng 1 yıl önce
ebeveyn
işleme
93dc1a396d

+ 20 - 15
aarch64/pjisuv/common/config/c_cloud.go

@@ -9,6 +9,10 @@ import (
 	"time"
 )
 
+type MonitorStruct struct {
+	Url string `yaml:"url"`
+}
+
 type platform struct {
 	UrlDeviceAuth string `yaml:"url-device-auth"`
 	UrlTaskPoll   string `yaml:"url-task-poll"`
@@ -41,21 +45,22 @@ type trigger struct {
 }
 
 type cloudConfig struct {
-	FullCollect           bool         `yaml:"full-collect"`
-	ConfigRefreshInterval int          `yaml:"config-refresh-interval"` // 配置刷新时间间隔
-	BagNumber             int          `yaml:"bag-number"`
-	TimeWindowSendGap     int          `yaml:"time-window-send-gap"` // 主节点向从节点发送窗口的最小时间间隔
-	TimeToLabelJsonPath   string       `yaml:"time-to-label-json-path"`
-	BagDataDir            string       `yaml:"bag-data-dir"`
-	BagCopyDir            string       `yaml:"bag-copy-dir"`
-	TriggersDir           string       `yaml:"triggers-dir"`
-	TcpPort               string       `yaml:"tcp-port"`
-	RpcPort               string       `yaml:"rpc-port"`
-	Triggers              []trigger    `yaml:"triggers"`
-	Hosts                 []hostStruct `yaml:"hosts"`
-	Ros                   ros          `yaml:"ros"`
-	Platform              platform     `yaml:"platform"`
-	Disk                  disk         `yaml:"disk"`
+	FullCollect           bool          `yaml:"full-collect"`
+	ConfigRefreshInterval int           `yaml:"config-refresh-interval"` // 配置刷新时间间隔
+	BagNumber             int           `yaml:"bag-number"`
+	TimeWindowSendGap     int           `yaml:"time-window-send-gap"` // 主节点向从节点发送窗口的最小时间间隔
+	TimeToLabelJsonPath   string        `yaml:"time-to-label-json-path"`
+	BagDataDir            string        `yaml:"bag-data-dir"`
+	BagCopyDir            string        `yaml:"bag-copy-dir"`
+	TriggersDir           string        `yaml:"triggers-dir"`
+	TcpPort               string        `yaml:"tcp-port"`
+	RpcPort               string        `yaml:"rpc-port"`
+	Triggers              []trigger     `yaml:"triggers"`
+	Hosts                 []hostStruct  `yaml:"hosts"`
+	Ros                   ros           `yaml:"ros"`
+	Platform              platform      `yaml:"platform"`
+	Disk                  disk          `yaml:"disk"`
+	Monitor               MonitorStruct `yaml:"monitor"`
 }
 
 var (

+ 27 - 0
aarch64/pjisuv/common/config/c_resource.go

@@ -1,5 +1,32 @@
 package config
 
+import (
+	"cicv-data-closedloop/common/config/c_log"
+	"cicv-data-closedloop/common/util"
+	"time"
+)
+
+var log = c_log.GlobalLogger
+
+// SendResourceUsage 保存资源占用情况
 func SendResourceUsage() {
 
+	for {
+		time.Sleep(time.Duration(2) * time.Second)
+		responseString, err := util.HttpPostJsonResponseString(
+			CloudConfig.Monitor.Url,
+			map[string]string{
+				"totalCpuUsage":    util.ToString(util.GetCpuPercent()),
+				"totalMemoryUsage": util.ToString(util.GetMemoryPercent()),
+				"top10Process":     util.ToString(util.GetTop10()),
+				"deviceNumber":     LocalConfig.EquipmentNo,
+				"socIp":            LocalConfig.Node.Ip,
+			},
+		)
+		if err != nil {
+			log.Errorf("发送数据监控信息报错%v,响应信息为:%v", err, responseString)
+		}
+		log.Infof("发送数据监控信息成功,响应信息为:%v", responseString)
+	}
+
 }

+ 2 - 0
aarch64/pjisuv/common/config/yaml/pjisuv3-cloud-config.yaml

@@ -1,4 +1,6 @@
 ---
+monitor:
+  url: http://36.110.106.142:12341/web_server/monitor/insert
 platform:
   url-device-auth: http://1.202.169.139:8081/device/auth
   url-task-poll: http://1.202.169.139:8081/device/task/poll

+ 2 - 0
aarch64/pjisuv/common/config/yaml/pjisuv8-cloud-config.yaml

@@ -1,4 +1,6 @@
 ---
+monitor:
+  url: http://36.110.106.142:12341/web_server/monitor/insert
 platform:
   url-device-auth: http://1.202.169.139:8081/device/auth
   url-task-poll: http://1.202.169.139:8081/device/task/poll

+ 2 - 0
aarch64/pjisuv/common/config/yaml/pjisuv95-cloud-config.yaml

@@ -1,4 +1,6 @@
 ---
+monitor:
+  url: http://36.110.106.142:12341/web_server/monitor/insert
 platform:
   url-device-auth: http://1.202.169.139:8081/device/auth
   url-task-poll: http://1.202.169.139:8081/device/task/poll

+ 50 - 0
common/util/u_resource.go

@@ -1,15 +1,65 @@
 package util
 
 import (
+	"fmt"
 	"github.com/shirou/gopsutil/cpu"
 	"github.com/shirou/gopsutil/disk"
 	"github.com/shirou/gopsutil/mem"
+	"github.com/shirou/gopsutil/process"
 	"os/exec"
+	"sort"
 	"strconv"
 	"strings"
 	"time"
 )
 
+func GetTop10() []string {
+	// 获取所有进程的CPU占用率
+	processes, err := process.Processes()
+	if err != nil {
+		fmt.Println("Error:", err)
+		return nil
+	}
+
+	// 创建一个用于存储进程CPU占用率的映射
+	cpuPercent := make(map[int32]float64)
+
+	// 获取每个进程的CPU占用率
+	for _, p := range processes {
+		pid := p.Pid
+		cpuPercent[pid], err = p.CPUPercent()
+		if err != nil {
+			continue
+		}
+	}
+
+	// 根据CPU占用率对进程进行排序
+	sortedPids := make([]int32, 0, len(cpuPercent))
+	for pid := range cpuPercent {
+		sortedPids = append(sortedPids, pid)
+	}
+	sort.Slice(sortedPids, func(i, j int) bool {
+		return cpuPercent[sortedPids[i]] > cpuPercent[sortedPids[j]]
+	})
+
+	// 输出前10个CPU占用率最高的进程名称
+	fmt.Println("Top 10 processes by CPU usage:")
+	var top10 []string
+	for i, pid := range sortedPids {
+		if i >= 10 {
+			break
+		}
+		p, err := process.NewProcess(pid)
+		if err != nil {
+			continue
+		}
+		name, _ := p.Name()
+		top10 = append(top10, name)
+		fmt.Printf("%d. %s (PID: %d, CPU Usage: %.2f%%)\n", i+1, name, pid, cpuPercent[pid])
+	}
+	return top10
+}
+
 // GetCpuPercent cpu总占用率
 func GetCpuPercent() float64 {
 	percent, _ := cpu.Percent(time.Second, false)