martin 3 anni fa
parent
commit
dfa75378b7

+ 2 - 0
api-common/src/main/java/api/common/pojo/dto/Host.java

@@ -1,6 +1,7 @@
 package api.common.pojo.dto;
 
 import lombok.Data;
+import org.apache.sshd.client.session.ClientSession;
 
 @Data
 public class Host {
@@ -10,5 +11,6 @@ public class Host {
     private String username;
     private String password;
     private String type;
+    private ClientSession clientSession;
 
 }

+ 0 - 24
api-common/src/main/java/api/common/pojo/po/system/SystemServerPO.java

@@ -1,24 +0,0 @@
-package api.common.pojo.po.system;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class SystemServerPO {
-
-    private String id;
-    private String serverId;
-    private String serverAddress;
-    private String serverType;
-    private String cpuUsage;
-    private String memoryUsage;
-    private String memoryAvailable;
-    private String diskUsage;
-    private String diskAvailable;
-    private String taskNumber;
-}

+ 3 - 2
api-common/src/main/java/api/common/util/SshUtil.java

@@ -94,13 +94,14 @@ public class SshUtil {
 
 
     /**
-     * 获取 cpu 使用率
+     * 获取主机名
      */
     public static String hostname(ClientSession session) throws IOException {
-        return SshUtil.execute(session, "hostname");
+        return SshUtil.execute(session, "hostname").replace("\n","");
     }
 
 
+
     /**
      * 获取 cpu 使用率
      */

+ 6 - 2
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/manager/SystemServerManager.java

@@ -8,6 +8,8 @@ import org.apache.ibatis.session.SqlSessionFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 @Component
 public class SystemServerManager {
 
@@ -15,12 +17,14 @@ public class SystemServerManager {
     @Autowired
     private SqlSessionFactory sqlSessionFactory;
 
-    public void batchUpdateByScoreResult(SystemServerPO systemServerPO) {
+    public void replace(List<SystemServerPO> systemServerPOList) {
 
         try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false)) {
             SystemServerMapper systemServerMapper = sqlSession.getMapper(SystemServerMapper.class);
             systemServerMapper.delete();
-            systemServerMapper.insert(systemServerPO);
+            for (SystemServerPO systemServerPO : systemServerPOList) {
+                systemServerMapper.insert(systemServerPO);
+            }
             sqlSession.commit();
         }
     }

+ 7 - 5
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/mappper/SystemServerMapper.java

@@ -2,10 +2,10 @@ package com.css.simulation.resource.monitor.mappper;
 
 import api.common.pojo.po.home.SystemServerPO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 
-
 @Mapper
 public interface SystemServerMapper {
 
@@ -14,9 +14,11 @@ public interface SystemServerMapper {
     void delete();
 
     @Select("insert into system_server(id, server_id, server_address, server_type, memory_usage, memory_available, memory_total,\n" +
-            "                          disk_usage, disk_available, disk_total, cpu_usage, cpu_total, gpu_usage, task_number,\n" +
-            "                          create_time, modify_time, create_user_id, modify_user_id, is_deleted, gpu_total)\n" +
-            "values (#{id})")
-    void insert(SystemServerPO systemServerPO);
+            "                          disk_usage, disk_available, disk_total, cpu_usage, cpu_total, gpu_usage, gpu_total,\n" +
+            "                          task_number, create_time, modify_time, create_user_id, modify_user_id, is_deleted)\n" +
+            "values (#{po.id}, #{po.serverId}, #{po.serverAddress}, #{po.serverType}, #{po.memoryUsage}, #{po.memoryAvailable}, #{po.memoryTotal},\n" +
+            "        #{po.diskUsage}, #{po.diskAvailable}, #{po.diskTotal}, #{po.cpuUsage}, #{po.cpuTotal}, #{po.gpuUsage}, #{po.gpuTotal},\n" +
+            "        #{po.taskNumber}, #{po.createTime}, #{po.modifyTime}, #{po.createUserId}, #{po.modifyUserId}, #{po.isDeleted})")
+    void insert(@Param("po") SystemServerPO systemServerPO);
 
 }

+ 62 - 43
simulation-resource-monitor/src/main/java/com/css/simulation/resource/monitor/scheduler/MyScheduler.java

@@ -4,80 +4,99 @@ import api.common.pojo.dto.Host;
 import api.common.pojo.po.home.SystemServerPO;
 import api.common.util.SshUtil;
 import api.common.util.StringUtil;
-import com.css.simulation.resource.monitor.mappper.SystemServerMapper;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.monitor.manager.SystemServerManager;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.session.ClientSession;
+import org.dom4j.DocumentException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 @Component
-@ConfigurationProperties(prefix = "ssh")
+
 @Data
 @Slf4j
+@ConfigurationProperties(prefix = "ssh")
 public class MyScheduler {
 
     List<Host> hostList;
 
+
     @Autowired
-    SystemServerMapper systemServerManager;
+    SystemServerManager systemServerManager;
 
 
-//    @Scheduled(fixedDelay = 60 * 60 * 1000)
+    //    @Scheduled(fixedDelay = 60 * 60 * 1000)
     @Scheduled(fixedDelay = 2 * 1000)
-    public void server() {
-
-        log.info("MyScheduler-------server 获取服务器信息!");
-
-
-        hostList.forEach(host -> {
-
+    public void server() throws IOException, InterruptedException, DocumentException {
+        List<SystemServerPO> systemServerPOList = new ArrayList<>();
+        for (Host host : hostList) {
+            int taskNumber = 0;
+            SshClient sshClient = SshClient.setUpDefaultClient();
             String ip = host.getHostname();
             Integer port = host.getPort();
             String username = host.getUsername();
             String password = host.getPassword();
             String type = host.getType();
-
-            try {
-                SshClient sshClient = SshUtil.getClient();
-                ClientSession session = SshUtil.getSession(sshClient, ip, username, password);
-                int taskNumber = 0;
-                if ("gpu".equals(type)) {
-                    String podList = SshUtil.execute(session, "kubectl get pod | grep project");
-                    taskNumber = StringUtil.countSubString(podList, "project");
-                }
-
-                SystemServerPO systemServerPO = SystemServerPO.builder()
-                        .id(StringUtil.getRandomUUID())
-                        .serverId(SshUtil.hostname(session))
-                        .serverAddress(ip)
-                        .serverType(type)
-                        .memoryUsage(SshUtil.memoryUsage(session))
-                        .memoryAvailable(SshUtil.memoryAvailable(session))
-                        .memoryTotal(SshUtil.memoryTotal(session))
-                        .diskUsage(SshUtil.diskUsage(session))
-                        .diskAvailable(SshUtil.diskAvailable(session))
-                        .diskTotal(SshUtil.diskTotal(session))
-                        .cpuUsage(SshUtil.cpuUsage(session))
-                        .cpuTotal(SshUtil.cpuTotal(session))
-                        .gpuUsage(SshUtil.gpuUsage(session))
-                        .gpuTotal(SshUtil.gpuTotal(session))
-                        .taskNumber(taskNumber)
-                        .build();
-
-                systemServerManager.insert(systemServerPO);
-            } catch (Exception e) {
-                e.printStackTrace();
+            ClientSession session = SshUtil.getSession(sshClient, ip, username, password);
+            double gpuUsage = 0.0;
+            long gpuTotal = 0L;
+            if ("gpu".equals(type)) {
+                gpuUsage = SshUtil.gpuUsage(session);
+                gpuTotal = SshUtil.gpuTotal(session);
+                String podList = SshUtil.execute(session, "kubectl get pod | grep project");
+                taskNumber = StringUtil.countSubString(podList, "project");
             }
-        });
 
+            SystemServerPO systemServerPO = SystemServerPO.builder()
+                    .id(StringUtil.getRandomUUID())
+                    .serverId(SshUtil.hostname(session))
+                    .serverAddress(ip)
+                    .serverType(type)
+                    .memoryUsage(SshUtil.memoryUsage(session))
+                    .memoryAvailable(SshUtil.memoryAvailable(session))
+                    .memoryTotal(SshUtil.memoryTotal(session))
+                    .diskUsage(SshUtil.diskUsage(session))
+                    .diskAvailable(SshUtil.diskAvailable(session))
+                    .diskTotal(SshUtil.diskTotal(session))
+                    .cpuUsage(SshUtil.cpuUsage(session))
+                    .cpuTotal(SshUtil.cpuTotal(session))
+                    .gpuUsage(gpuUsage)
+                    .gpuTotal(gpuTotal)
+                    .taskNumber(taskNumber)
+                    .build();
+            systemServerPO.setCreateTime(TimeUtil.getNowForMysql());
+            systemServerPO.setCreateUserId("simulation-resource-monitor");
+            systemServerPO.setModifyTime(TimeUtil.getNowForMysql());
+            systemServerPO.setModifyUserId("simulation-resource-monitor");
+            systemServerPO.setModifyTime(TimeUtil.getNowForMysql());
+            systemServerPO.setIsDeleted("0");
+            systemServerPOList.add(systemServerPO);
+            session.close();
+            sshClient.stop();
+        }
+        log.info("MyScheduler-------server 获取服务器信息!" + systemServerPOList);
+        systemServerManager.replace(systemServerPOList);
 
     }
 
+//    @Scheduled(fixedDelay = 2 * 1000)
+//    public void test() throws IOException, DocumentException {
+//        SshClient client = SshUtil.getClient();
+//        ClientSession session = SshUtil.getSession(client, "182.92.203.182", "root", "CICV2022test");
+//        double gpuUsage = SshUtil.gpuUsage(session);
+//        long gpuTotal = SshUtil.gpuTotal(session);
+//        System.out.println(gpuUsage);
+//        System.out.println(gpuTotal);
+//    }
+
 
 }

+ 23 - 12
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SystemServerMapper.java

@@ -33,30 +33,41 @@ public interface SystemServerMapper {
             @Result(column = "server_id", property = "serverId", jdbcType = JdbcType.VARCHAR),
             @Result(column = "server_address", property = "serverAddress", jdbcType = JdbcType.VARCHAR),
             @Result(column = "server_type", property = "serverType", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "cpu_usage", property = "cpuUsage", jdbcType = JdbcType.INTEGER),
-            @Result(column = "memory_usage", property = "memoryUsage", jdbcType = JdbcType.INTEGER),
-            @Result(column = "memory_available", property = "memoryAvailable", jdbcType = JdbcType.DOUBLE),
-            @Result(column = "disk_usage", property = "diskUsage", jdbcType = JdbcType.INTEGER),
-            @Result(column = "disk_available", property = "diskAvailable", jdbcType = JdbcType.DOUBLE),
-            @Result(column = "task_number", property = "taskNumber", jdbcType = JdbcType.INTEGER),
-            @Result(column = "weight", property = "weight", jdbcType = JdbcType.INTEGER),
-            @Result(column = "weight", property = "weight", jdbcType = JdbcType.INTEGER)
+            @Result(column = "memory_usage", property = "memoryUsage", jdbcType = JdbcType.DOUBLE),
+            @Result(column = "memory_available", property = "memoryAvailable", jdbcType = JdbcType.BIGINT),
+            @Result(column = "memory_total", property = "memoryTotal", jdbcType = JdbcType.BIGINT),
+            @Result(column = "disk_usage", property = "diskUsage", jdbcType = JdbcType.DOUBLE),
+            @Result(column = "disk_available", property = "diskAvailable", jdbcType = JdbcType.BIGINT),
+            @Result(column = "disk_total", property = "diskTotal", jdbcType = JdbcType.BIGINT),
+            @Result(column = "cpu_usage", property = "cpuUsage", jdbcType = JdbcType.DOUBLE),
+            @Result(column = "cpu_total", property = "cpuTotal", jdbcType = JdbcType.BIGINT),
+            @Result(column = "gpu_usage", property = "gpuUsage", jdbcType = JdbcType.DOUBLE),
+            @Result(column = "gpu_total", property = "gpuTotal", jdbcType = JdbcType.BIGINT),
+            @Result(column = "task_number", property = "taskNumber", jdbcType = JdbcType.INTEGER)
     })
 
     @Select("select id,\n" +
             "       server_id,\n" +
             "       server_address,\n" +
             "       server_type,\n" +
-            "       cpu_usage,\n" +
             "       memory_usage,\n" +
             "       memory_available,\n" +
+            "       memory_total,\n" +
             "       disk_usage,\n" +
             "       disk_available,\n" +
-            "       task_number,\n" +
-            "       weight,\n" +
-            "       gpu_usage\n" +
+            "       disk_total,\n" +
+            "       cpu_usage,\n" +
+            "       cpu_total,\n" +
+            "       gpu_usage,\n" +
+            "       gpu_total,\n" +
+            "       task_number\n" +
             "from system_server\n" +
             "where is_deleted = '0'")
     List<SystemServerPO> selectAll();
 
+    @Select("select sum(task_number)\n" +
+            "from system_server\n" +
+            "where is_deleted = '0'")
+    Integer selectSumOfTaskNumber();
+
 }

+ 24 - 11
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/HomePageService.java

@@ -16,7 +16,6 @@ import com.css.simulation.resource.scene.mapper.SystemServerMapper;
 import com.css.simulation.resource.system.mapper.UserMapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -46,14 +45,17 @@ public class HomePageService {
         List<SystemServerPO> systemServerPOList = systemServerMapper.selectAll();
 
 
-//        int weightSum = systemServerPOList.stream().mapToInt(SystemServerPO::getWeight).sum();  // 权重之和
+        long memorySum = systemServerPOList.stream().mapToLong(SystemServerPO::getMemoryTotal).sum();  // 内存之和
+        long diskSum = systemServerPOList.stream().mapToLong(SystemServerPO::getDiskTotal).sum();  // 磁盘之和
+        long cpuSum = systemServerPOList.stream().mapToLong(SystemServerPO::getDiskTotal).sum();  // cpu线程数 之和
+        long gpuSum = systemServerPOList.stream().mapToLong(SystemServerPO::getDiskTotal).sum();  // 显存之和
 
         HardwareVO build = HardwareVO.builder()
                 .serverNumber(systemServerPOList.size())
-//                .memoryUsage(systemServerPOList.stream().mapToInt(po -> po.getMemoryUsage() * po.getWeight() / weightSum).sum() + "%")
-//                .diskUsage(systemServerPOList.stream().mapToInt(po -> po.getDiskUsage() * po.getWeight() / weightSum).sum() + "%")
-//                .cpuUsage(systemServerPOList.stream().mapToInt(po -> po.getCpuUsage() * po.getWeight() / weightSum).sum() + "%")
-//                .gpuUsage(systemServerPOList.stream().mapToInt(po -> po.getGpuUsage() * po.getWeight() / weightSum).sum() + "%")
+                .memoryUsage((int) systemServerPOList.stream().mapToDouble(po -> po.getMemoryUsage() * po.getMemoryTotal() / memorySum).sum() + "%")
+                .diskUsage((int) systemServerPOList.stream().mapToDouble(po -> po.getDiskUsage() * po.getDiskTotal() / diskSum).sum() + "%")
+                .cpuUsage((int) systemServerPOList.stream().mapToDouble(po -> po.getCpuUsage() * po.getCpuTotal() / cpuSum).sum() + "%")
+                .gpuUsage((int) systemServerPOList.stream().mapToDouble(po -> po.getGpuUsage() * po.getGpuTotal() / gpuSum).sum() + "%")
                 .build();
 
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, build);
@@ -63,12 +65,13 @@ public class HomePageService {
 
     public ResponseBodyVO<ServiceVO> selectService() {
 
+        List<SystemServerPO> systemServerPOList = systemServerMapper.selectAll();
+
         ServiceVO build = ServiceVO.builder()
                 .userNumber(userMapper.selectCount())
                 .onlineNumber(oauthClientService.online().getInfo())
-                .simulationNodeNumber(1)
-                .simulationLicenseNumber(1)
-                .dynamicsLicenseNumber(1)
+                .simulationLicenseNumber(systemServerMapper.selectSumOfTaskNumber())
+                .dynamicsLicenseNumber(1)   // 待定
                 .build();
 
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, build);
@@ -103,8 +106,18 @@ public class HomePageService {
         List<SystemServerPO> systemServerPOList = systemServerMapper.selectAll();
         List<SystemServerVO> systemServerVOList = new ArrayList<>();
         systemServerPOList.forEach(po -> {
-            SystemServerVO vo = new SystemServerVO();
-            BeanUtils.copyProperties(po, vo);
+            SystemServerVO vo = SystemServerVO.builder()
+                    .id(po.getId())
+                    .serverId(po.getServerId())
+                    .serverAddress(po.getServerAddress())
+                    .serverType(po.getServerType())
+                    .cpuUsage((int) (po.getCpuUsage() * 100))
+                    .memoryUsage((int) (po.getMemoryUsage() * 100))
+                    .memoryAvailable(po.getMemoryAvailable() * 1.0 / 1024.0 / 1024.0)
+                    .diskUsage((int) (po.getDiskUsage() * 100))
+                    .diskAvailable(po.getDiskAvailable() * 1.0 / 1024.0 / 1024.0)
+                    .taskNumber(po.getTaskNumber())
+                    .build();
             systemServerVOList.add(vo);
         });