Переглянути джерело

添加服务器资源监控相关功能增删查

zhaojinyu 2 тижнів тому
батько
коміт
df011b34e3

+ 6 - 0
base-modules/service-system/service-system-biz/pom.xml

@@ -64,6 +64,12 @@
             <artifactId>json</artifactId>
             <version>20210307</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.13.3</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 48 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysServerMonitorController.java

@@ -0,0 +1,48 @@
+package com.usky.system.controller.web;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.system.domain.SysServerMonitor;
+import com.usky.system.service.SysServerMonitorService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.time.LocalDateTime;
+
+@RestController
+@RequestMapping("/monitor")
+public class SysServerMonitorController {
+
+    @Autowired
+    private SysServerMonitorService sysServerMonitorService;
+
+    @PostMapping("/insert")
+    public Object insert(@RequestBody SysServerMonitor monitor) {
+        // 确保 readTime 字段被赋值
+        monitor.setReadTime(LocalDateTime.now());
+
+        // 确保 createBy 字段被赋值
+        monitor.setCreateBy("admin"); // 示例:设置为当前用户信息
+
+        // 确保 createTime 字段被赋值
+        monitor.setCreateTime(LocalDateTime.now());
+
+        monitor.serializeGpuUsageInfo();
+        monitor.serializeDiskUsageInfo();
+        return sysServerMonitorService.insert(monitor);
+    }
+
+    @GetMapping("/list")
+    public CommonPage<SysServerMonitor> list(@RequestParam(value = "serverIp", required = false) String serverIp,
+                                             @RequestParam(value = "startTime", required = false) String startTime,
+                                             @RequestParam(value = "endTime", required = false) String endTime,
+                                             @RequestParam(value = "page", defaultValue = "1") int page,
+                                             @RequestParam(value = "size", defaultValue = "10") int size) {
+        LocalDateTime start = startTime != null ? LocalDateTime.parse(startTime) : null;
+        LocalDateTime end = endTime != null ? LocalDateTime.parse(endTime) : null;
+        return sysServerMonitorService.selectByCondition(serverIp, start, end, page, size);
+    }
+
+    @DeleteMapping("/deleteById")
+    public Object deleteById(Long id) {
+        return sysServerMonitorService.deleteById(id);
+    }
+}

+ 72 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysServerMonitor.java

@@ -0,0 +1,72 @@
+package com.usky.system.domain;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+public class SysServerMonitor {
+    private Long id;
+    private LocalDateTime readTime;
+    private String serverIp;
+    private String serverAlias;
+    private Double cpuUsage;
+    private Double memorySize;
+    private Double memoryUsed;
+    private Double memoryUsage;
+    private String gpuUsageInfoSerialized; // 数据库中存储的 JSON 字符串
+    private String diskUsageInfoSerialized; // 数据库中存储的 JSON 字符串
+    private transient List<Map<String, Object>> gpuUsageInfo; // 用于接收 JSON 数组
+    private transient List<Map<String, Object>> diskUsageInfo; // 用于接收 JSON 数组
+    private String createBy;
+    private LocalDateTime createTime;
+
+    // Getter 和 Setter 方法
+    public Long getId() { return id; }
+    public void setId(Long id) { this.id = id; }
+    public LocalDateTime getReadTime() { return readTime; }
+    public void setReadTime(LocalDateTime readTime) { this.readTime = readTime; }
+    public String getServerIp() { return serverIp; }
+    public void setServerIp(String serverIp) { this.serverIp = serverIp; }
+    public String getServerAlias() { return serverAlias; }
+    public void setServerAlias(String serverAlias) { this.serverAlias = serverAlias; }
+    public Double getCpuUsage() { return cpuUsage; }
+    public void setCpuUsage(Double cpuUsage) { this.cpuUsage = cpuUsage; }
+    public Double getMemorySize() { return memorySize; }
+    public void setMemorySize(Double memorySize) { this.memorySize = memorySize; }
+    public Double getMemoryUsed() { return memoryUsed; }
+    public void setMemoryUsed(Double memoryUsed) { this.memoryUsed = memoryUsed; }
+    public Double getMemoryUsage() { return memoryUsage; }
+    public void setMemoryUsage(Double memoryUsage) { this.memoryUsage = memoryUsage; }
+    public String getGpuUsageInfoSerialized() { return gpuUsageInfoSerialized; }
+    public void setGpuUsageInfoSerialized(String gpuUsageInfoSerialized) { this.gpuUsageInfoSerialized = gpuUsageInfoSerialized; }
+    public String getDiskUsageInfoSerialized() { return diskUsageInfoSerialized; }
+    public void setDiskUsageInfoSerialized(String diskUsageInfoSerialized) { this.diskUsageInfoSerialized = diskUsageInfoSerialized; }
+    public List<Map<String, Object>> getGpuUsageInfo() { return gpuUsageInfo; }
+    public void setGpuUsageInfo(List<Map<String, Object>> gpuUsageInfo) { this.gpuUsageInfo = gpuUsageInfo; }
+    public List<Map<String, Object>> getDiskUsageInfo() { return diskUsageInfo; }
+    public void setDiskUsageInfo(List<Map<String, Object>> diskUsageInfo) { this.diskUsageInfo = diskUsageInfo; }
+    public String getCreateBy() { return createBy; }
+    public void setCreateBy(String createBy) { this.createBy = createBy; }
+    public LocalDateTime getCreateTime() { return createTime; }
+    public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
+
+    // 序列化方法
+    public void serializeGpuUsageInfo() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        try {
+            this.gpuUsageInfoSerialized = objectMapper.writeValueAsString(this.gpuUsageInfo);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void serializeDiskUsageInfo() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        try {
+            this.diskUsageInfoSerialized = objectMapper.writeValueAsString(this.diskUsageInfo);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 30 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysServerMonitorMapper.java

@@ -0,0 +1,30 @@
+package com.usky.system.mapper;
+
+import com.usky.system.domain.SysServerMonitor;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+public interface SysServerMonitorMapper {
+
+    // 插入监控数据
+    int insert(SysServerMonitor monitor);
+
+    // 查询
+    List<SysServerMonitor> selectByCondition(@Param("serverIp") String serverIp,
+                                             @Param("startTime") LocalDateTime startTime,
+                                             @Param("endTime") LocalDateTime endTime,
+                                             @Param("offset") int offset,
+                                             @Param("limit") int limit);
+
+    // 查询总记录数
+    int countByCondition(@Param("serverIp") String serverIp,
+                         @Param("startTime") LocalDateTime startTime,
+                         @Param("endTime") LocalDateTime endTime);
+
+
+    // 根据 ID 删除监控数据
+    int deleteById(@Param("id") Long id);
+}

+ 32 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysServerMonitorService.java

@@ -0,0 +1,32 @@
+package com.usky.system.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.system.domain.SysServerMonitor;
+import com.usky.system.mapper.SysServerMonitorMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class SysServerMonitorService {
+    @Autowired
+    private SysServerMonitorMapper sysServerMonitorMapper;
+
+    public int insert(SysServerMonitor monitor) {
+        return sysServerMonitorMapper.insert(monitor);
+    }
+
+    public CommonPage<SysServerMonitor> selectByCondition(String serverIp, LocalDateTime startTime, LocalDateTime endTime, int page, int size) {
+        int offset = (page - 1) * size;
+        List<SysServerMonitor> records = sysServerMonitorMapper.selectByCondition(serverIp, startTime, endTime, offset, size);
+        int total = sysServerMonitorMapper.countByCondition(serverIp, startTime, endTime);
+        return new CommonPage<>(records, total, size, page);
+    }
+
+    public int deleteById(Long id) {
+        return sysServerMonitorMapper.deleteById(id);
+    }
+
+}

+ 34 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/typehandler/JsonTypeHandler.java

@@ -0,0 +1,34 @@
+package com.usky.system.typehandler;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.ibatis.type.*;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+@Alias("JsonTypeHandler")
+public class JsonTypeHandler extends BaseTypeHandler<String> {
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
+        ps.setString(i, parameter);
+    }
+
+    @Override
+    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        return rs.getString(columnName);
+    }
+
+    @Override
+    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        return rs.getString(columnIndex);
+    }
+
+    @Override
+    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        return cs.getString(columnIndex);
+    }
+}

+ 62 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysServerMonitorMapper.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.system.mapper.SysServerMonitorMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.system.domain.SysServerMonitor">
+        <id column="id" property="id" />
+        <result column="read_time" property="readTime" />
+        <result column="server_ip" property="serverIp" />
+        <result column="server_alias" property="serverAlias" />
+        <result column="cpu_usage" property="cpuUsage" />
+        <result column="memory_size" property="memorySize" />
+        <result column="memory_used" property="memoryUsed" />
+        <result column="memory_usage" property="memoryUsage" />
+        <result column="gpu_usage_info" property="gpuUsageInfoSerialized" typeHandler="com.usky.system.typehandler.JsonTypeHandler"/>
+        <result column="disk_usage_info" property="diskUsageInfoSerialized" typeHandler="com.usky.system.typehandler.JsonTypeHandler"/>
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+    </resultMap>
+
+    <!-- 插入监控数据 -->
+    <insert id="insert" parameterType="com.usky.system.domain.SysServerMonitor">
+        INSERT INTO sys_server_monitor (
+            read_time, server_ip, server_alias, cpu_usage, memory_size, memory_used, memory_usage,
+            gpu_usage_info, disk_usage_info, create_by, create_time
+        ) VALUES (
+                     #{readTime}, #{serverIp}, #{serverAlias}, #{cpuUsage}, #{memorySize}, #{memoryUsed}, #{memoryUsage},
+                     #{gpuUsageInfoSerialized}, #{diskUsageInfoSerialized}, #{createBy}, #{createTime}
+                 )
+    </insert>
+
+    <!-- 查询所有监控数据 -->
+    <select id="selectByCondition" resultMap="BaseResultMap">
+        SELECT * FROM sys_server_monitor
+        <where>
+            <if test="serverIp != null and serverIp != ''">
+                AND server_ip = #{serverIp}
+            </if>
+            <if test="startTime != null and endTime != null">
+                AND read_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+        LIMIT #{limit} OFFSET #{offset}
+    </select>
+
+    <select id="countByCondition" resultType="int">
+        SELECT COUNT(*) FROM sys_server_monitor
+        <where>
+            <if test="serverIp != null and serverIp != ''">
+                AND server_ip = #{serverIp}
+            </if>
+            <if test="startTime != null and endTime != null">
+                AND read_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+    </select>
+
+    <!-- 根据 ID 删除监控数据 -->
+    <delete id="deleteById" parameterType="long">
+        DELETE FROM sys_server_monitor WHERE id = #{id}
+    </delete>
+</mapper>