Sfoglia il codice sorgente

feat: 新增了管理端需要的类,修复了 LimitRange 构造方法的错误。

刘一也 4 anni fa
parent
commit
9676ae9068

+ 15 - 0
api/src/main/java/cn/seecoder/api/k8s/model/LimitRange.java

@@ -49,6 +49,21 @@ public class LimitRange extends K8sAbstractObject<V1LimitRange>{
     public LimitRange(V1LimitRange v1LimitRange){
         super(v1LimitRange);
 
+        V1LimitRangeSpec spec = v1LimitRange.getSpec();
+        V1LimitRangeItem v1LimitRangeItem = spec.getLimits().get(0);
+        defaultCpu = v1LimitRangeItem.getDefault().get("cpu").toSuffixedString();
+        defaultMemory = v1LimitRangeItem.getDefault().get("memory").toSuffixedString();
+        defaultRequestCpu = v1LimitRangeItem.getDefaultRequest().get("cpu").toSuffixedString();
+        defaultRequestMemory = v1LimitRangeItem.getDefaultRequest().get("memory").toSuffixedString();
+        minCpu = v1LimitRangeItem.getMin().get("cpu").toSuffixedString();
+        minMemory = v1LimitRangeItem.getMin().get("memory").toSuffixedString();
+        maxCpu = v1LimitRangeItem.getMax().get("cpu").toSuffixedString();
+        maxMemory = v1LimitRangeItem.getMax().get("memory").toSuffixedString();
+        type = v1LimitRangeItem.getType();
+
+        V1ObjectMeta metadata = v1LimitRange.getMetadata();
+        name = metadata.getName();
+        namespace = metadata.getNamespace();
     }
 
     private V1LimitRangeSpec toV1LimitRangeSpec() {

+ 46 - 0
web/src/main/java/cn/seecoder/web/controller/devmanage/DevmanageController.java

@@ -0,0 +1,46 @@
+package cn.seecoder.web.controller.devmanage;
+
+import cn.seecoder.web.model.vo.Response;
+import cn.seecoder.web.model.vo.devmanage.DeploymentVO;
+import cn.seecoder.web.model.vo.user.UserVO;
+import cn.seecoder.web.service.devmanage.DevmanageService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/devmanage")
+public class DevmanageController {
+    private final DevmanageService devmanageService;
+
+    @GetMapping("/deployment")
+    public ResponseEntity<Response<List<DeploymentVO>>> getPagedDeployment(@RequestParam Integer pageNo, @RequestParam Integer pageSize) {
+        return ResponseEntity.ok().body(Response.buildSuccess(devmanageService.getPagedDeployments(pageNo, pageSize)));
+    }
+
+    @GetMapping("/deployment")
+    public ResponseEntity<Response<List<DeploymentVO>>> searchPagedDeployments(@RequestParam String keyword, @RequestParam Integer pageNo, @RequestParam Integer pageSize) {
+        return ResponseEntity.ok().body(Response.buildSuccess(devmanageService.searchPagedDeployments(keyword, pageNo, pageSize)));
+    }
+
+    @GetMapping("/owner/namespace")
+    public ResponseEntity<Response<UserVO>> getOwnerOfNamespace(@RequestParam String namespace) {
+        return ResponseEntity.ok().body(Response.buildSuccess(devmanageService.getOwnerOfNamespace(namespace)));
+    }
+
+    @GetMapping("/owner/deployment")
+    public ResponseEntity<Response<UserVO>> getOwnerOfDeployment(@RequestParam String deployName) {
+        return ResponseEntity.ok().body(Response.buildSuccess(devmanageService.getOwnerOfDeployment(deployName)));
+    }
+
+    @GetMapping("/pages")
+    public ResponseEntity<Response<Integer>> getTotalPages(@RequestParam Integer pageSize) {
+        return ResponseEntity.ok().body(Response.buildSuccess(devmanageService.getTotalPageCount(pageSize)));
+    }
+}

+ 17 - 0
web/src/main/java/cn/seecoder/web/dao/pipeline/DeploymentMapper.java

@@ -28,6 +28,23 @@ public interface DeploymentMapper {
     @Select("select * from deployment where pipeline_id = #{pipelineId}")
     DeploymentPO selectByPipelineId(Integer pipelineId);
 
+    @Select("select * from deployment where namespace like CONCAT('%', #{keyword}, '%') or " +
+            "deploy_name like CONCAT('%', #{keyword}, '%') " +
+            "limit #{pageSize} * (#{pageNo} - 1), #{pageSize}")
+    List<DeploymentPO> searchDeployments(String keyword, Integer pageNo, Integer pageSize);
+
+    @Select("select * from deployment where namespace = #{namespace}")
+    DeploymentPO selectByNamespace(String namespace);
+
+    @Select("select * from deployment where deploy_name = #{deployName}")
+    DeploymentPO selectByDeployName(String deployName);
+
+    @Select("select * from deployment limit #{pageSize} * (#{pageNo} - 1), #{pageSize}")
+    List<DeploymentPO> selectPagedDeployments(Integer pageNo, Integer pageSize);
+
+    @Select("select count(*) from deployment")
+    Integer selectTotalItemCount();
+
     @Delete("delete from deployment where pipeline_id = #{pipelineId}")
     void delete(Integer pipelineId);
 

+ 28 - 0
web/src/main/java/cn/seecoder/web/model/vo/devmanage/DeploymentVO.java

@@ -0,0 +1,28 @@
+package cn.seecoder.web.model.vo.devmanage;
+
+import cn.seecoder.web.model.po.pipeline.DeploymentPO;
+import lombok.Data;
+
+import java.text.SimpleDateFormat;
+import java.time.ZoneId;
+import java.util.TimeZone;
+
+@Data
+public class DeploymentVO {
+
+    private Integer id;
+    private Integer pipelineId;
+    private String namespace;
+    private String deployName;
+    private String deployedTime;
+
+    public DeploymentVO(DeploymentPO deploymentPO) {
+        this.id = deploymentPO.getId();
+        this.pipelineId = deploymentPO.getPipelineId();
+        this.namespace = deploymentPO.getNamespace();
+        this.deployName = deploymentPO.getDeployName();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        simpleDateFormat.setTimeZone(TimeZone.getTimeZone(ZoneId.of("+8")));
+        this.deployedTime = simpleDateFormat.format(deploymentPO.getDeployedTime());
+    }
+}

+ 14 - 0
web/src/main/java/cn/seecoder/web/service/devmanage/DevmanageService.java

@@ -0,0 +1,14 @@
+package cn.seecoder.web.service.devmanage;
+
+import cn.seecoder.web.model.vo.devmanage.DeploymentVO;
+import cn.seecoder.web.model.vo.user.UserVO;
+
+import java.util.List;
+
+public interface DevmanageService {
+    List<DeploymentVO> getPagedDeployments(Integer pageNo, Integer pageSize);
+    List<DeploymentVO> searchPagedDeployments(String keyword, Integer pageNo, Integer pageSize);
+    UserVO getOwnerOfNamespace(String namespace);
+    UserVO getOwnerOfDeployment(String deployName);
+    Integer getTotalPageCount(Integer pageSize);
+}

+ 94 - 0
web/src/main/java/cn/seecoder/web/service/impl/devmanage/DevmanageServiceImpl.java

@@ -0,0 +1,94 @@
+package cn.seecoder.web.service.impl.devmanage;
+
+import cn.seecoder.web.dao.pipeline.DeploymentMapper;
+import cn.seecoder.web.dao.pipeline.PipelineRecordMapper;
+import cn.seecoder.web.dao.user.UserMapper;
+import cn.seecoder.web.model.po.pipeline.DeploymentPO;
+import cn.seecoder.web.model.po.pipeline.PipelineRecordPO;
+import cn.seecoder.web.model.po.user.UserPO;
+import cn.seecoder.web.model.vo.devmanage.DeploymentVO;
+import cn.seecoder.web.model.vo.user.UserVO;
+import cn.seecoder.web.service.devmanage.DevmanageService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+public class DevmanageServiceImpl implements DevmanageService {
+    private final DeploymentMapper deploymentMapper;
+    private final PipelineRecordMapper pipelineRecordMapper;
+    private final UserMapper userMapper;
+    private static final int[] validPageSizes = new int[]{5, 10, 20};
+
+    @Transactional(readOnly = true)
+    @Override
+    public List<DeploymentVO> getPagedDeployments(Integer pageNo, Integer pageSize) {
+        if (isInvalidPageSize(pageSize)) {
+            return new ArrayList<>();
+        }
+        List<DeploymentPO> deploymentPOList = deploymentMapper.selectPagedDeployments(pageNo, pageSize);
+        List<DeploymentVO> deploymentVOList = new ArrayList<>();
+        for (DeploymentPO po: deploymentPOList) {
+            deploymentVOList.add(new DeploymentVO(po));
+        }
+        return deploymentVOList;
+    }
+
+    @Override
+    public List<DeploymentVO> searchPagedDeployments(String keyword, Integer pageNo, Integer pageSize) {
+        if (isInvalidPageSize(pageSize)) {
+            return new ArrayList<>();
+        }
+        List<DeploymentPO> deploymentPOList = deploymentMapper.searchDeployments(keyword, pageNo, pageSize);
+        List<DeploymentVO> deploymentVOList = new ArrayList<>();
+        for (DeploymentPO po: deploymentPOList) {
+            deploymentVOList.add(new DeploymentVO(po));
+        }
+        return deploymentVOList;
+    }
+
+    @Transactional(readOnly = true)
+    @Override
+    public UserVO getOwnerOfNamespace(String namespace) {
+        DeploymentPO deploymentPO = deploymentMapper.selectByNamespace(namespace);
+        return new UserVO(getUserPO(deploymentPO));
+    }
+
+    @Transactional(readOnly = true)
+    @Override
+    public UserVO getOwnerOfDeployment(String deployName) {
+        DeploymentPO deploymentPO = deploymentMapper.selectByDeployName(deployName);
+        return new UserVO(getUserPO(deploymentPO));
+    }
+
+    @Transactional(readOnly = true)
+    @Override
+    public Integer getTotalPageCount(Integer pageSize) {
+        Integer totalItemCount = deploymentMapper.selectTotalItemCount();
+        return totalItemCount / pageSize + (totalItemCount % pageSize == 0 ? 0 : 1);
+    }
+
+    private boolean isInvalidPageSize(Integer pageSize) {
+        for (int validPageSize: validPageSizes) {
+            if (validPageSize == pageSize) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private UserPO getUserPO(DeploymentPO deploymentPO) {
+        Integer pipelineId = deploymentPO.getPipelineId();
+        List<PipelineRecordPO> pipelineRecordPOS = pipelineRecordMapper.selectByPipelineId(pipelineId);
+        if (pipelineRecordPOS.size() == 0) {
+            return null;
+        } else {
+            Integer userId = pipelineRecordPOS.get(0).getUserId();
+            return userMapper.select(userId);
+        }
+    }
+}