From 52db9156e8a741d0d4f165e46b3613e52c6b2086 Mon Sep 17 00:00:00 2001 From: chenzhihang <709011834@qq.com> Date: Wed, 19 Mar 2025 11:32:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=AF=E5=88=86=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ComputingResourceController.java | 28 ++++-- .../platform/domain/ComputingResource.java | 4 - .../platform/mapper/ComputingResourceDao.java | 2 - .../platform/mapper/ResourceOccupyDao.java | 7 ++ .../service/ResourceOccupyService.java | 5 + .../service/impl/ExperimentServiceImpl.java | 5 - .../platform/service/impl/RayServiceImpl.java | 1 + .../impl/ResourceOccupyServiceImpl.java | 9 ++ .../service/impl/ServiceServiceImpl.java | 2 +- .../ruoyi/platform/utils/K8sClientUtil.java | 91 +++---------------- .../com/ruoyi/platform/vo/RayParamVo.java | 2 +- .../ComputingResourceDaoMapper.xml | 4 - .../managementPlatform/ResourceOccupy.xml | 10 ++ .../managementPlatform/ServiceDaoMapper.xml | 2 +- .../resources/mapper/system/SysUserMapper.xml | 11 ++- 15 files changed, 77 insertions(+), 106 deletions(-) diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/resources/ComputingResourceController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/resources/ComputingResourceController.java index aac53576..741dd69a 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/resources/ComputingResourceController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/resources/ComputingResourceController.java @@ -3,7 +3,9 @@ package com.ruoyi.platform.controller.resources; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.GenericsAjaxResult; import com.ruoyi.platform.domain.ComputingResource; +import com.ruoyi.platform.domain.ResourceOccupy; import com.ruoyi.platform.service.ComputingResourceService; +import com.ruoyi.platform.service.ResourceOccupyService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.data.domain.Page; @@ -28,6 +30,9 @@ public class ComputingResourceController extends BaseController { @Resource private ComputingResourceService computingResourceService; + @Resource + private ResourceOccupyService resourceOccupyService; + /** * 分页查询 * @@ -36,12 +41,12 @@ public class ComputingResourceController extends BaseController { */ @GetMapping @ApiOperation("分页查询") - public GenericsAjaxResult> queryByPage(ComputingResource computingResource, @RequestParam("page") int page, + public GenericsAjaxResult> queryByPage(ComputingResource computingResource, @RequestParam("page") int page, @RequestParam("size") int size, - @RequestParam(value = "resource_type") String resourceType ) { + @RequestParam(value = "resource_type") String resourceType) { computingResource.setComputingResource(resourceType); - PageRequest pageRequest = PageRequest.of(page,size); - return genericsSuccess(this.computingResourceService.queryByPage(computingResource, pageRequest)); + PageRequest pageRequest = PageRequest.of(page, size); + return genericsSuccess(this.computingResourceService.queryByPage(computingResource, pageRequest)); } /** @@ -53,7 +58,7 @@ public class ComputingResourceController extends BaseController { @GetMapping("{id}") @ApiOperation("根据id查询") public GenericsAjaxResult queryById(@PathVariable("id") Integer id) { - return genericsSuccess(this.computingResourceService.queryById(id)); + return genericsSuccess(this.computingResourceService.queryById(id)); } /** @@ -65,7 +70,7 @@ public class ComputingResourceController extends BaseController { @PostMapping @ApiOperation("新增计算资源") public GenericsAjaxResult add(@RequestBody ComputingResource computingResource) { - return genericsSuccess(this.computingResourceService.insert(computingResource)); + return genericsSuccess(this.computingResourceService.insert(computingResource)); } /** @@ -77,7 +82,7 @@ public class ComputingResourceController extends BaseController { @PutMapping @ApiOperation("编辑计算资源") public GenericsAjaxResult edit(@RequestBody ComputingResource computingResource) { - return genericsSuccess(this.computingResourceService.update(computingResource)); + return genericsSuccess(this.computingResourceService.update(computingResource)); } /** @@ -89,8 +94,15 @@ public class ComputingResourceController extends BaseController { @DeleteMapping("{id}") @ApiOperation("删除计算资源") public GenericsAjaxResult deleteById(@PathVariable("id") Integer id) { - return genericsSuccess(this.computingResourceService.removeById(id)); + return genericsSuccess(this.computingResourceService.removeById(id)); } + @GetMapping("/resouceOccupy") + @ApiOperation("分页查询用户资源使用情况") + public GenericsAjaxResult> queryResourceOccupyByPage(@RequestParam("page") int page, + @RequestParam("size") int size) { + PageRequest pageRequest = PageRequest.of(page, size); + return genericsSuccess(resourceOccupyService.queryByPage(pageRequest)); + } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java index 9a52bd6b..5e7b83b1 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java @@ -68,9 +68,5 @@ public class ComputingResource implements Serializable { @ApiModelProperty(value = "状态标识", notes = "0表示失效,1表示生效") private Integer state; - - @ApiModelProperty(value = "节点") - private String node; - } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ComputingResourceDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ComputingResourceDao.java index 93cdaaf7..b9a5de6d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ComputingResourceDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ComputingResourceDao.java @@ -73,8 +73,6 @@ public interface ComputingResourceDao { */ int update(@Param("computingResource") ComputingResource computingResource); - int updateUsedStateByNode(@Param("node")String node, @Param("usedState") Integer usedState); - /** * 通过主键删除数据 * diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java index 8a92d4b2..cb03d638 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java @@ -2,6 +2,9 @@ package com.ruoyi.platform.mapper; import com.ruoyi.platform.domain.ResourceOccupy; import org.apache.ibatis.annotations.Param; +import org.springframework.data.domain.Pageable; + +import java.util.List; public interface ResourceOccupyDao { @@ -18,4 +21,8 @@ public interface ResourceOccupyDao { int updateUsed(@Param("id") Integer id, @Param("used") Integer used); int updateUnUsed(@Param("id") Integer id, @Param("used") Integer used); + + long count(); + + List queryByPage(@Param("pageable") Pageable pageable); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java index f8aed04b..8395bc75 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java @@ -1,5 +1,9 @@ package com.ruoyi.platform.service; +import com.ruoyi.platform.domain.ResourceOccupy; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; + public interface ResourceOccupyService { Boolean haveResource(Integer computingResourceId) throws Exception; @@ -10,4 +14,5 @@ public interface ResourceOccupyService { void deducing(String taskType, Long taskId); + Page queryByPage(PageRequest pageRequest); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java index 49a233c2..dcdb3b7c 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java @@ -46,9 +46,6 @@ import java.util.*; public class ExperimentServiceImpl implements ExperimentService { @Resource private ExperimentDao experimentDao; - - @Resource - private ExperimentInsDao experimentInsDao; @Resource private ModelsService modelsService; @Resource @@ -74,8 +71,6 @@ public class ExperimentServiceImpl implements ExperimentService { private String argoConvert; @Value("${argo.workflowRun}") private String argoWorkflowRun; - @Value("${argo.workflowStatus}") - private String argoWorkflowStatus; @Value("${git.localPath}") String localPath; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java index 8ea5d473..3afb6ddd 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java @@ -164,6 +164,7 @@ public class RayServiceImpl implements RayService { if (resourceOccupyService.haveResource(ray.getComputingResourceId())) { RayParamVo rayParamVo = new RayParamVo(); BeanUtils.copyProperties(ray, rayParamVo); + rayParamVo.setResource(ray.getComputingResourceId()); rayParamVo.setCodeConfig(JsonUtils.jsonToMap(ray.getCodeConfig())); rayParamVo.setDataset(JsonUtils.jsonToMap(ray.getDataset())); rayParamVo.setModel(JsonUtils.jsonToMap(ray.getModel())); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java index ea0f12c7..12f79edf 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java @@ -8,6 +8,9 @@ import com.ruoyi.platform.mapper.ComputingResourceDao; import com.ruoyi.platform.mapper.ResourceOccupyDao; import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.system.api.model.LoginUser; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -90,4 +93,10 @@ public class ResourceOccupyServiceImpl implements ResourceOccupyService { resourceOccupy.setDeduceLastTime(new Date()); resourceOccupyDao.edit(resourceOccupy); } + + @Override + public Page queryByPage(PageRequest pageRequest) { + long total = resourceOccupyDao.count(); + return new PageImpl<>(resourceOccupyDao.queryByPage(pageRequest), pageRequest, total); + } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java index d046fe25..c43be025 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java @@ -250,7 +250,7 @@ public class ServiceServiceImpl implements ServiceService { HashMap paramMap = new HashMap<>(); paramMap.put("service_name", service.getServiceName()); paramMap.put("description", serviceVersion.getDescription()); - paramMap.put("resource", serviceVersion.getResource()); + paramMap.put("resource", serviceVersion.getComputingResourceId()); paramMap.put("mount_path", serviceVersion.getMountPath()); paramMap.put("replicas", serviceVersion.getReplicas()); paramMap.put("env", JSONObject.parseObject(serviceVersion.getEnvVariables())); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java index a3b73160..31ea6338 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java @@ -2,7 +2,9 @@ package com.ruoyi.platform.utils; import com.alibaba.fastjson2.JSON; import com.ruoyi.platform.constant.Constant; +import com.ruoyi.platform.domain.ComputingResource; import com.ruoyi.platform.domain.DevEnvironment; +import com.ruoyi.platform.mapper.ComputingResourceDao; import com.ruoyi.platform.service.ResourceOccupyService; import io.kubernetes.client.Exec; import io.kubernetes.client.custom.IntOrString; @@ -12,7 +14,9 @@ import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.apis.AppsV1Api; import io.kubernetes.client.openapi.apis.CoreV1Api; import io.kubernetes.client.openapi.models.*; +import io.kubernetes.client.util.ClientBuilder; import io.kubernetes.client.util.Config; +import io.kubernetes.client.util.credentials.AccessTokenAuthentication; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.json.JSONObject; @@ -50,6 +54,9 @@ public class K8sClientUtil { @Resource private ResourceOccupyService resourceOccupyService; + @Resource + private ComputingResourceDao computingResourceDao; + /** * 构建集群POD内通过SA访问的客户端 * loading the in-cluster config, including: @@ -485,7 +492,7 @@ public class K8sClientUtil { //配置资源 - V1ResourceRequirements v1ResourceRequirements = setPodResource(devEnvironment.getStandard()); + V1ResourceRequirements v1ResourceRequirements = setPodResource(devEnvironment.getComputingResourceId()); V1Pod pod = new V1PodBuilder() .withNewMetadata() @@ -688,87 +695,17 @@ public class K8sClientUtil { } - public Integer createDeployment(String dpName, String namespace, Integer replicas, String model, String image, Integer port, String resource, String mountPath - , String envVariables, String codeConfig) { - AppsV1Api api = new AppsV1Api(apiClient); - - //配置标签选择 - HashMap selector = new HashMap<>(); - selector.put("app", dpName); - - //配置资源 - V1ResourceRequirements v1ResourceRequirements = setPodResource(resource); - - //配置环境变量 - List env = new ArrayList<>(); - if (StringUtils.isNotEmpty(envVariables)) { - HashMap envMap = JSON.parseObject(envVariables, HashMap.class); - for (String key : envMap.keySet()) { - V1EnvVar envVar = new V1EnvVar().name(key).value(envMap.get(key)); - env.add(envVar); - } - } - - // 配置卷和卷挂载 -// List volumeMounts = new ArrayList<>(); -// volumeMounts.add(new V1VolumeMount().name("workspace").mountPath(mountPath)); -// volumeMounts.add(new V1VolumeMount().name("minio-pvc").mountPath("/opt/code").subPath(codeConfig).readOnly(true)); -// volumeMounts.add(new V1VolumeMount().name("minio-pvc").mountPath("/opt/model").subPath(model).readOnly(true)); -// -// List volumes = new ArrayList<>(); -// volumes.add(new V1Volume().name("workspace").persistentVolumeClaim(new V1PersistentVolumeClaimVolumeSource().claimName(pvc.getMetadata().getName()))); -// volumes.add(new V1Volume().name("minio-pvc").persistentVolumeClaim(new V1PersistentVolumeClaimVolumeSource().claimName(dataPvcName))); - + V1ResourceRequirements setPodResource(Integer computingResourceId) { + ComputingResource computingResource = computingResourceDao.queryById(computingResourceId); - //创建deployment - V1Deployment deployment = new V1DeploymentBuilder().withNewMetadata() - .withName(dpName) - .endMetadata() - .withNewSpec() - .withReplicas(replicas) - .withSelector(new V1LabelSelector().matchLabels(selector)) - .withNewTemplate() - .withNewMetadata() - .addToLabels("app", dpName) - .endMetadata() - .withNewSpec() - .addNewContainer() - .withName(dpName) - .withImage(image) - .withEnv(env) - .withPorts(new V1ContainerPort().containerPort(port).protocol("TCP")) - .withResources(v1ResourceRequirements) - .endContainer() - .endSpec() - .endTemplate() - .endSpec() - .build(); - - try { - api.createNamespacedDeployment(namespace, deployment, null, null, null); - } catch (ApiException e) { - throw new RuntimeException("创建deployment异常:" + e.getResponseBody()); - } - - V1Service service = createService(namespace, dpName + "-svc", port, selector); - return service.getSpec().getPorts().get(0).getNodePort(); - } - - - V1ResourceRequirements setPodResource(String resource) { //配置pod资源 - JSONObject standardJson = new JSONObject(resource); - JSONObject valueJson = (JSONObject) standardJson.get("value"); - int cpu = (int) valueJson.get("cpu"); - String memory = (String) valueJson.get("memory"); + String memory = computingResource.getMemoryGb().toString(); memory = memory.substring(0, memory.length() - 1).concat("i"); - Integer gpu = (Integer) valueJson.get("gpu"); - HashMap limitMap = new HashMap<>(); - if (gpu != null && gpu != 0) { - limitMap.put("nvidia.com/gpu", new Quantity(String.valueOf(gpu))); + if (computingResource.getGpuNums() != null && computingResource.getGpuNums() != 0) { + limitMap.put("nvidia.com/gpu", new Quantity(String.valueOf(computingResource.getGpuNums()))); } - limitMap.put("cpu", new Quantity(String.valueOf(cpu))); + limitMap.put("cpu", new Quantity(String.valueOf(computingResource.getCpuCores()))); limitMap.put("memory", new Quantity(memory)); limitMap.put("ephemeral-storage", new Quantity("100Gi")); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayParamVo.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayParamVo.java index 86c77018..67e768b4 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayParamVo.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayParamVo.java @@ -44,5 +44,5 @@ public class RayParamVo { private Integer minSamplesRequired; - private String resource; + private Integer resource; } diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml index 25981868..f02849fd 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml @@ -148,10 +148,6 @@ computing_resource = values(computing_resource)standard = values(standard)descri where id = #{computingResource.id} - - update computing_resource set used_state = #{usedState} where node = #{node} - - delete from computing_resource where id = #{id} diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml index b20b9215..ad8a782c 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml @@ -49,4 +49,14 @@ where task_type = #{task_type} and task_id = #{task_id} + + + + \ No newline at end of file diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml index bec944af..5ece071a 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml @@ -86,7 +86,7 @@ diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 085ab4f4..c205566f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -25,6 +25,7 @@ + @@ -59,6 +60,7 @@ u.password, u.git_link_username, u.git_link_password, + u.credit, u.sex, u.status, u.del_flag, @@ -88,7 +90,7 @@