LingxinMeng hace 1 año
padre
commit
95362ed119

+ 1 - 0
amd64/web-server/application.yaml

@@ -15,4 +15,5 @@ mysql:
   password: 1qaz2wsx!
   dbname: dataclosedloop
   charset: utf8
+  sqlfile-dir: D:\code\cicv-data-closedloop\amd64\web-server\sql
 

+ 1 - 0
amd64/web-server/entity/e_monitor.go

@@ -0,0 +1 @@
+package entity

+ 0 - 0
amd64/web-server/entity/e_record.go → amd64/web-server/entity/e_report.go


+ 31 - 31
amd64/web-server/handler/h_monitor.go

@@ -1,45 +1,45 @@
 package handler
 
 import (
-	"cicv-data-closedloop/amd64/web-server/entity"
+	"cicv-data-closedloop/common/config/c_db"
+	"cicv-data-closedloop/common/config/c_log"
 	commonEntity "cicv-data-closedloop/common/entity"
+	"cicv-data-closedloop/common/util"
 	"github.com/gin-gonic/gin"
 	"net/http"
 )
 
-type SaveMonitorRequest struct {
-	CpuTotal    string // cpu总占用
-	MemoryTotal string // 内存总占用
-
+type DeviceMonitor struct {
+	Id               int    `db:"id"`                 // 自增id
+	TotalCpuUsage    string `db:"total_cpu_usage"`    // cpu总占用
+	TotalMemoryUsage string `db:"total_memory_usage"` // 内存总占用
+	Top10Process     string `db:"top10_process"`      // cpu占用前十的进程信息
 }
 
-// SaveMonitor 保存实车上传的监控信息
-func SaveMonitor(c *gin.Context) {
-	//param := new(SaveMonitorRequest)
-	//// 映射到结构体
-	//if err := c.ShouldBindJSON(&param); err != nil {
-	//	c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
-	//	c.JSON(http.StatusBadRequest, commonEntity.Response{
-	//		Code: 500,
-	//		Msg:  "请求体解析失败。",
-	//	})
-	//	return
-	//}
-	var result []entity.Record
-	//for i := 0; i < param.PageSize; i++ {
-	//	result = append(result, entity.Record{
-	//		Team:         "team" + util.NewShortUUID(),
-	//		Topic:        "topic" + util.NewShortUUID(),
-	//		ScoreOnline:  100.0,
-	//		ScoreOffline: 100.0,
-	//		ScoreFinal:   100.0,
-	//		Details:      "sdlkfjsaljfldsakjfkls",
-	//	})
-	//}
-
+// SaveDeviceMonitor 保存实车上传的监控信息
+func SaveDeviceMonitor(c *gin.Context) {
+	param := new(DeviceMonitor)
+	// 映射到结构体
+	if err := c.ShouldBindJSON(&param); err != nil {
+		c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
+		c.JSON(http.StatusBadRequest, commonEntity.Response{
+			Code: 500,
+			Msg:  "请求体解析失败。",
+		})
+		return
+	}
+	// 插入到数据库
+	sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["insert_device_monitor.sql"])
+	if err := c_db.DoTx(sqlTemplate, []any{param.TotalCpuUsage, param.TotalMemoryUsage, param.Top10Process}); err != nil {
+		c_log.GlobalLogger.Error("插入数据报错:", err)
+		c.JSON(http.StatusBadRequest, commonEntity.Response{
+			Code: 500,
+			Msg:  "插入数据报错。",
+		})
+		return
+	}
 	c.JSON(http.StatusOK, commonEntity.Response{
 		Code: 200,
-		Msg:  "分页查询成功。",
-		Data: result,
+		Msg:  "插入数据成功。",
 	})
 }

+ 9 - 7
amd64/web-server/main.go

@@ -24,12 +24,13 @@ type ApplicationYamlStruct struct {
 		Prefix string `yaml:"prefix"`
 	} `yaml:"log"`
 	Mysql struct {
-		Ip       string `yaml:"ip"`
-		Port     string `yaml:"port"`
-		Username string `yaml:"username"`
-		Password string `yaml:"password"`
-		Dbname   string `yaml:"dbname"`
-		Charset  string `yaml:"charset"`
+		Ip         string `yaml:"ip"`
+		Port       string `yaml:"port"`
+		Username   string `yaml:"username"`
+		Password   string `yaml:"password"`
+		Dbname     string `yaml:"dbname"`
+		Charset    string `yaml:"charset"`
+		SqlfileDir string `yaml:"sqlfile-dir"`
 	} `yaml:"mysql"`
 }
 
@@ -54,6 +55,7 @@ func init() {
 		ApplicationYaml.Mysql.Dbname,
 		ApplicationYaml.Mysql.Charset,
 	)
+	c_db.InitSqlFilesMap(ApplicationYaml.Mysql.SqlfileDir)
 }
 
 func main() {
@@ -71,7 +73,7 @@ func main() {
 	reportPrefix.POST("/page", handler.Page) // 分页查询
 	//reportPrefix.POST("/pdf", handler.Hello)  // pdf下载
 	monitorPrefix := projectPrefix.Group("/monitor")
-	monitorPrefix.POST("/save", handler.SaveMonitor)
+	monitorPrefix.POST("/save", handler.SaveDeviceMonitor)
 	// 端口
 	err := router.Run(":" + ApplicationYaml.Web.Port)
 	if err != nil {

+ 2 - 0
amd64/web-server/sql/insert_device_monitor.sql

@@ -0,0 +1,2 @@
+insert into device_monitor(total_cpu_usage, total_memory_usage, top10_process)
+values (?, ?, ?)

+ 24 - 0
common/config/c_db/c_sqlx_config.go → common/config/c_db/c_sqlx_mysql.go

@@ -28,3 +28,27 @@ func InitSqlxMysql(username string, password string, ip string, port string, dbn
 	MysqlDb.SetConnMaxLifetime(0) // 设置连接的最大生存时间为 0(不限制)
 	c_log.GlobalLogger.Info("mysql连接成功。")
 }
+
+func DoTx(sqlTemplate string, params []any) error {
+	// 插入到数据库
+	tx, err := MysqlDb.Beginx()
+	if err != nil {
+		c_log.GlobalLogger.Error("开启事务失败:", err)
+		return err
+	}
+	// 2 在事务中执行操作
+	_, err = tx.Exec(sqlTemplate, params...)
+	if err != nil {
+		c_log.GlobalLogger.Error("执行操作失败,回滚事务:", err)
+		tx.Rollback()
+		return err
+	}
+
+	// 如果所有操作成功,则提交事务
+	err = tx.Commit()
+	if err != nil {
+		c_log.GlobalLogger.Error("提交事务失败:", err)
+		return err
+	}
+	return nil
+}

+ 25 - 0
common/config/c_db/c_sqlx_sqlfile.go

@@ -0,0 +1,25 @@
+package c_db
+
+import (
+	"cicv-data-closedloop/common/config/c_log"
+	"os"
+	"path/filepath"
+)
+
+var SqlFilesMap = map[string]string{}
+
+func InitSqlFilesMap(dir string) {
+	files, err := os.ReadDir(dir)
+	if err != nil {
+		c_log.GlobalLogger.Error("程序退出。加载sql文件错误:", err)
+		os.Exit(-1)
+	}
+
+	for _, file := range files {
+		if !file.IsDir() && filepath.Ext(file.Name()) == ".sql" {
+			filePath := filepath.Join(dir, file.Name())
+			SqlFilesMap[file.Name()] = filePath
+		}
+	}
+	c_log.GlobalLogger.Info("sql文件加载成功:", SqlFilesMap)
+}