diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java index fc1aa78c..67457175 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java @@ -131,6 +131,8 @@ public class SysUser extends BaseEntity { private String gitLinkPassword; + private Float credit; + public SysUser() { } @@ -315,6 +317,14 @@ public class SysUser extends BaseEntity { return gitLinkPassword; } + public void setCredit(Float credit) { + this.credit = credit; + } + + public Float getCredit() { + return credit; + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java index fd86febd..80480fca 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java @@ -49,4 +49,12 @@ public class Constant { public final static String Asset_Type_Image = "image"; public final static String Asset_Type_Code = "code"; public final static String Asset_Type_Service = "service"; + + // 任务类型 + public final static String TaskType_Dev = "dev_environment"; + public final static String TaskType_Workflow = "workflow"; + public final static String TaskType_AutoMl = "auto_ml"; + public final static String TaskType_Ray = "ray"; + public final static String TaskType_ActiveLearn = "active_learn"; + public final static String TaskType_Service = "service"; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java index 0a3b608d..f7451a23 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java @@ -61,7 +61,7 @@ public class DevEnvironmentController extends BaseController { * @return 新增结果 */ @PostMapping - public GenericsAjaxResult add(@RequestBody DevEnvironmentVo devEnvironmentVo) { + public GenericsAjaxResult add(@RequestBody DevEnvironmentVo devEnvironmentVo) throws Exception { return genericsSuccess(this.devEnvironmentService.insert(devEnvironmentVo)); } @@ -72,7 +72,7 @@ public class DevEnvironmentController extends BaseController { * @return 编辑结果 */ @PutMapping - public GenericsAjaxResult edit(@RequestBody DevEnvironment devEnvironment) { + public GenericsAjaxResult edit(@RequestBody DevEnvironment devEnvironment) throws Exception { return genericsSuccess(this.devEnvironmentService.update(devEnvironment)); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java index 6234820b..2772cd5b 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java @@ -6,9 +6,7 @@ import com.ruoyi.common.core.web.domain.GenericsAjaxResult; import com.ruoyi.platform.domain.DevEnvironment; import com.ruoyi.platform.service.JupyterService; import com.ruoyi.platform.service.NewDatasetService; -import com.ruoyi.platform.vo.NewDatasetVo; import com.ruoyi.platform.vo.PodStatusVo; -import com.ruoyi.platform.vo.VersionVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -19,8 +17,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; @RestController @RequestMapping("/jupyter") @@ -30,6 +26,7 @@ public class JupyterController extends BaseController { private JupyterService jupyterService; @Resource private NewDatasetService newDatasetService; + @GetMapping(value = "/getURL") @ApiOperation("得到访问地址") public GenericsAjaxResult getURL() throws IOException { @@ -47,7 +44,7 @@ public class JupyterController extends BaseController { @ApiOperation("根据开发环境id启动jupyter pod") @ApiResponse public GenericsAjaxResult runJupyter(@PathVariable("id") Integer id) throws Exception { - return genericsSuccess(this.jupyterService.runJupyterService(id)); + return genericsSuccess(this.jupyterService.runJupyterService(id)); } @@ -68,7 +65,7 @@ public class JupyterController extends BaseController { @ApiOperation("查询jupyter pod状态") @ApiResponse public GenericsAjaxResult getStatus(DevEnvironment devEnvironment) throws Exception { - return genericsSuccess(this.jupyterService.getJupyterStatus(devEnvironment)); + return genericsSuccess(this.jupyterService.getJupyterStatus(devEnvironment)); } 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/controller/service/ServiceController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java index de372f21..e18d0899 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java @@ -61,7 +61,7 @@ public class ServiceController extends BaseController { @PostMapping("/serviceVersion") @ApiOperation("新增服务版本") - public GenericsAjaxResult addServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) { + public GenericsAjaxResult addServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) throws Exception { return genericsSuccess(serviceService.addServiceVersion(serviceVersionVo)); } @@ -73,7 +73,7 @@ public class ServiceController extends BaseController { @PutMapping("/serviceVersion") @ApiOperation("编辑服务版本") - public GenericsAjaxResult editServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) { + public GenericsAjaxResult editServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) throws Exception { return genericsSuccess(serviceService.editServiceVersion(serviceVersionVo)); } 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 d0551fa8..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 @@ -3,9 +3,10 @@ package com.ruoyi.platform.domain; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; -import java.util.Date; import java.io.Serializable; +import java.util.Date; /** * (ComputingResource)实体类 @@ -14,13 +15,17 @@ import java.io.Serializable; * @since 2023-11-29 14:23:01 */ @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data public class ComputingResource implements Serializable { private static final long serialVersionUID = -42500298368776666L; -/** + /** * 主键 */ -@ApiModelProperty(value = "编号", notes = "唯一标识符") -private Integer id; + @ApiModelProperty(value = "编号", notes = "唯一标识符") + private Integer id; + + @ApiModelProperty("资源id") + private Integer resourceId; @ApiModelProperty("计算资源的描述") private String computingResource; @@ -31,6 +36,24 @@ private Integer id; @ApiModelProperty("资源的详细描述") private String description; + @ApiModelProperty("cpu核数") + private Integer cpuCores; + + @ApiModelProperty("内存大小GB") + private Integer memoryGb; + + @ApiModelProperty("显存大小GB") + private Integer gpuMemoryGb; + + @ApiModelProperty("GPU个数") + private Integer gpuNums; + + @ApiModelProperty("积分/小时") + private Float creditPerHour; + + @ApiModelProperty("标签") + private String labels; + @ApiModelProperty(value = "创建者的用户名", example = "admin") private String createBy; @@ -45,101 +68,5 @@ private Integer id; @ApiModelProperty(value = "状态标识", notes = "0表示失效,1表示生效") private Integer state; - - @ApiModelProperty(value = "占用情况(1-占用,0-未占用)") - private Integer usedState; - - @ApiModelProperty(value = "节点") - private String node; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getComputingResource() { - return computingResource; - } - - public void setComputingResource(String computingResource) { - this.computingResource = computingResource; - } - - - - public String getStandard() { - return standard; - } - - public void setStandard(String standard) { - this.standard = standard; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public String getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(String updateBy) { - this.updateBy = updateBy; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public Integer getState() { - return state; - } - - public void setState(Integer state) { - this.state = state; - } - - public Integer getUsedState() { - return usedState; - } - - public void setUsedState(Integer usedState) { - this.usedState = usedState; - } - - public String getNode() { - return node; - } - - public void setNode(String node) { - this.node = node; - } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java index cb4ebf3c..90a67719 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java @@ -2,6 +2,7 @@ package com.ruoyi.platform.domain; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; +import lombok.Data; import java.util.Date; import java.io.Serializable; @@ -13,6 +14,7 @@ import java.io.Serializable; * @since 2024-06-03 15:17:37 */ @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data public class DevEnvironment implements Serializable { private static final long serialVersionUID = 936999018935545992L; /** @@ -31,6 +33,9 @@ public class DevEnvironment implements Serializable { * 计算资源 */ private String computingResource; + + private Integer computingResourceId; + /** * 资源规格 */ @@ -80,134 +85,5 @@ public class DevEnvironment implements Serializable { */ private Integer state; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getComputingResource() { - return computingResource; - } - - public void setComputingResource(String computingResource) { - this.computingResource = computingResource; - } - - public String getStandard() { - return standard; - } - - public void setStandard(String standard) { - this.standard = standard; - } - - public String getEnvVariable() { - return envVariable; - } - - public void setEnvVariable(String envVariable) { - this.envVariable = envVariable; - } - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - public String getDataset() { - return dataset; - } - - public void setDataset(String dataset) { - this.dataset = dataset; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getAltField2() { - return altField2; - } - - public void setAltField2(String altField2) { - this.altField2 = altField2; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public String getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(String updateBy) { - this.updateBy = updateBy; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public Integer getState() { - return state; - } - - public void setState(Integer state) { - this.state = state; - } - } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java index 674c6e34..ebf06de2 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java @@ -67,6 +67,8 @@ public class Ray { private String resource; + private Integer computingResourceId; + private Integer state; private String createBy; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java new file mode 100644 index 00000000..bdb92893 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java @@ -0,0 +1,25 @@ +package com.ruoyi.platform.domain; + +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data +public class Resource { + @ApiModelProperty(value = "编号", notes = "唯一标识符") + private Integer id; + + @ApiModelProperty("类型") + private String type; + + @ApiModelProperty("gpu") + private String gpu; + + @ApiModelProperty("总数") + private Integer total; + + @ApiModelProperty("已被占用的数量") + private Integer used; +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java new file mode 100644 index 00000000..4a030c5c --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java @@ -0,0 +1,39 @@ +package com.ruoyi.platform.domain; + +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@Data +public class ResourceOccupy { + @ApiModelProperty(value = "编号", notes = "唯一标识符") + private Integer id; + + @ApiModelProperty("用户") + private Long userId; + + @ApiModelProperty("计算资源") + private Integer computingResourceId; + + @ApiModelProperty("积分/小时") + private Float creditPerHour; + + @ApiModelProperty("上一次扣分时间") + private Date deduceLastTime; + + @ApiModelProperty("状态") + private Integer state; + + @ApiModelProperty("开始时间") + private Date startTime; + + @ApiModelProperty("任务类型") + private String taskType; + + @ApiModelProperty("类型id") + private Long taskId; +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java index 0ca0b8ed..0afa77cc 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java @@ -26,6 +26,8 @@ public class ServiceVersion implements Serializable { private String resource; + private Integer computingResourceId; + private Integer replicas; private String mountPath; 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/DevEnvironmentDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java index e4f4bbe7..0c1df5fe 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java @@ -46,24 +46,6 @@ public interface DevEnvironmentDao { */ int insert(@Param("devEnvironment") DevEnvironment devEnvironment); - /** - * 批量新增数据(MyBatis原生foreach方法) - * - * @param entities List 实例对象列表 - * @return 影响行数 - */ - int insertBatch(@Param("entities") List entities); - - /** - * 批量新增或按主键更新数据(MyBatis原生foreach方法) - * - * @param entities List 实例对象列表 - * - * @return 影响行数 - * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参 - */ - int insertOrUpdateBatch(@Param("entities") List entities); - /** * 修改数据 * @@ -80,5 +62,6 @@ public interface DevEnvironmentDao { */ int deleteById(Integer id); + List getRunning(); } 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 new file mode 100644 index 00000000..cb03d638 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java @@ -0,0 +1,28 @@ +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 { + + Boolean haveResource(@Param("id") Integer id, @Param("need") Integer need); + + int save(@Param("resourceOccupy") ResourceOccupy resourceOccupy); + + int edit(@Param("resourceOccupy") ResourceOccupy resourceOccupy); + + ResourceOccupy getResourceOccupyByTask(@Param("taskType") String taskType, @Param("taskId") Long taskId); + + int deduceCredit(@Param("credit") Float credit, @Param("userId") Long userId); + + 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/mapper/ServiceDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java index b359812c..6b65a33d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java @@ -36,4 +36,6 @@ public interface ServiceDao { Service getServiceByName(@Param("serviceName") String serviceName); ServiceVersion getSvByVersion(@Param("version") String version, @Param("serviceId") Long serviceId); + + List getRunning(); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java index 23d03164..86f21d65 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java @@ -6,6 +6,7 @@ import com.ruoyi.platform.domain.RayIns; import com.ruoyi.platform.mapper.RayDao; import com.ruoyi.platform.mapper.RayInsDao; import com.ruoyi.platform.service.RayInsService; +import com.ruoyi.platform.service.ResourceOccupyService; import org.apache.commons.lang3.StringUtils; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -25,6 +26,9 @@ public class RayInsStatusTask { @Resource private RayDao rayDao; + @Resource + private ResourceOccupyService resourceOccupyService; + private List rayIds = new ArrayList<>(); @Scheduled(cron = "0/30 * * * * ?") // 每30S执行一次 @@ -38,6 +42,11 @@ public class RayInsStatusTask { //当原本状态为null或非终止态时才调用argo接口 try { rayIns = rayInsService.queryStatusFromArgo(rayIns); + if (Constant.Running.equals(rayIns.getStatus())) { + resourceOccupyService.deducing(Constant.TaskType_Ray, rayIns.getId()); + } else { + resourceOccupyService.endDeduce(Constant.TaskType_Ray, rayIns.getId()); + } } catch (Exception e) { rayIns.setStatus(Constant.Failed); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java new file mode 100644 index 00000000..1ae0d2f1 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java @@ -0,0 +1,44 @@ +package com.ruoyi.platform.scheduling; + +import com.ruoyi.platform.constant.Constant; +import com.ruoyi.platform.domain.DevEnvironment; +import com.ruoyi.platform.domain.ServiceVersion; +import com.ruoyi.platform.mapper.DevEnvironmentDao; +import com.ruoyi.platform.mapper.ServiceDao; +import com.ruoyi.platform.service.ResourceOccupyService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Component() +public class ResourceOccupyTask { + + @Resource + private ResourceOccupyService resourceOccupyService; + + @Resource + private DevEnvironmentDao devEnvironmentDao; + + @Resource + private ServiceDao serviceDao; + + // 开发环境功能扣除积分 + @Scheduled(cron = "0 0/10 * * * ?") // 每10分钟执行一次 + public void devDeduceCredit() { + List devEnvironments = devEnvironmentDao.getRunning(); + for (DevEnvironment devEnvironment : devEnvironments) { + resourceOccupyService.deducing(Constant.TaskType_Dev, Long.valueOf(devEnvironment.getId())); + } + } + + // 服务功能扣除积分 + @Scheduled(cron = "0 0/10 * * * ?") // 每10分钟执行一次 + public void serviceDeduceCredit() { + List serviceVersions = serviceDao.getRunning(); + for (ServiceVersion serviceVersion : serviceVersions) { + resourceOccupyService.deducing(Constant.TaskType_Service, serviceVersion.getId()); + } + } +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java index 4562c7d4..4b6723ab 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java @@ -36,7 +36,7 @@ public interface DevEnvironmentService { * @param devEnvironment 实例对象 * @return 实例对象 */ - DevEnvironment insert(DevEnvironmentVo devEnvironmentVo); + DevEnvironment insert(DevEnvironmentVo devEnvironmentVo) throws Exception; /** * 修改数据 @@ -44,7 +44,7 @@ public interface DevEnvironmentService { * @param devEnvironment 实例对象 * @return 实例对象 */ - DevEnvironment update(DevEnvironment devEnvironment); + DevEnvironment update(DevEnvironment devEnvironment) throws Exception; /** * 通过主键删除数据 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 new file mode 100644 index 00000000..8395bc75 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java @@ -0,0 +1,18 @@ +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; + + void startDeduce(Integer computingResourceId, String taskType, Long taskId); + + void endDeduce(String taskType, Long taskId); + + void deducing(String taskType, Long taskId); + + Page queryByPage(PageRequest pageRequest); +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java index 9e3dd48d..12b34188 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java @@ -18,11 +18,11 @@ public interface ServiceService { Service addService(Service service); - ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo); + ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception; Service editService(Service service); - String editServiceVersion(ServiceVersionVo serviceVersionVo); + String editServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception; Service getService(Long id); @@ -34,7 +34,7 @@ public interface ServiceService { String deleteServiceVersion(Long id); - String runServiceVersion(Long id); + String runServiceVersion(Long id) throws Exception; String stopServiceVersion(Long id); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java index 606d35aa..67861b16 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java @@ -10,18 +10,16 @@ import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.vo.DevEnvironmentVo; import com.ruoyi.platform.vo.PodStatusVo; import com.ruoyi.system.api.model.LoginUser; -import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; 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; import java.util.Date; import java.util.List; -import java.util.Map; /** * (DevEnvironment)表服务实现类 @@ -37,8 +35,6 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { @Resource @Lazy private JupyterService jupyterService; - - /** * 通过ID查询单条数据 * @@ -54,7 +50,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { * 分页查询 * * @param devEnvironment 筛选条件 - * @param pageRequest 分页对象 + * @param pageRequest 分页对象 * @return 查询结果 */ @Override @@ -64,12 +60,15 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { //查询每个开发环境的pod状态,注意:只有pod为非终止态时才去调状态接口 devEnvironmentList.forEach(devEnv -> { - try{ + try { if (!devEnv.getStatus().equals(PodStatus.Terminated.getName()) && !devEnv.getStatus().equals(PodStatus.Failed.getName())) { PodStatusVo podStatusVo = this.jupyterService.getJupyterStatus(devEnv); devEnv.setStatus(podStatusVo.getStatus()); devEnv.setUrl(podStatusVo.getUrl()); + if(!devEnv.getStatus().equals(podStatusVo.getStatus())){ + this.devEnvironmentDao.update(devEnv); + } } } catch (Exception e) { devEnv.setStatus(PodStatus.Unknown.getName()); @@ -86,7 +85,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { * @return 实例对象 */ @Override - public DevEnvironment insert(DevEnvironmentVo devEnvironmentVo) { + public DevEnvironment insert(DevEnvironmentVo devEnvironmentVo) throws Exception { //插入预备,此时不需要判断版本重复 DevEnvironment devEnvironment = new DevEnvironment(); LoginUser loginUser = SecurityUtils.getLoginUser(); @@ -94,6 +93,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { //状态先设为未知 devEnvironment.setStatus("Unknown"); devEnvironment.setComputingResource(devEnvironmentVo.getComputingResource()); + devEnvironment.setComputingResourceId(devEnvironmentVo.getComputingResourceId()); devEnvironment.setStandard(devEnvironmentVo.getStandard()); devEnvironment.setEnvVariable(devEnvironmentVo.getEnvVariable()); devEnvironment.setImage(devEnvironmentVo.getImage()); @@ -118,7 +118,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { * @return 实例对象 */ @Override - public DevEnvironment update(DevEnvironment devEnvironment) { + public DevEnvironment update(DevEnvironment devEnvironment) throws Exception { LoginUser loginUser = SecurityUtils.getLoginUser(); devEnvironment.setUpdateBy(loginUser.getUsername()); devEnvironment.setUpdateTime(new Date()); @@ -140,7 +140,7 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { @Override public String removeById(Integer id) throws Exception { DevEnvironment devEnvironment = this.devEnvironmentDao.queryById(id); - if (devEnvironment == null){ + if (devEnvironment == null) { return "开发环境信息不存在"; } @@ -148,13 +148,13 @@ public class DevEnvironmentServiceImpl implements DevEnvironmentService { LoginUser loginUser = SecurityUtils.getLoginUser(); String username = loginUser.getUsername(); String createdBy = devEnvironment.getCreateBy(); - if (!(StringUtils.equals(username,"admin") || StringUtils.equals(username,createdBy))){ + if (!(StringUtils.equals(username, "admin") || StringUtils.equals(username, createdBy))) { return "无权限删除该开发环境"; } jupyterService.stopJupyterService(id); devEnvironment.setState(0); - return this.devEnvironmentDao.update(devEnvironment)>0?"删除成功":"删除失败"; + return this.devEnvironmentDao.update(devEnvironment) > 0 ? "删除成功" : "删除失败"; } 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/JupyterServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java index 02cb59a2..3a6048eb 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java @@ -5,10 +5,10 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.platform.constant.Constant; import com.ruoyi.platform.domain.DevEnvironment; import com.ruoyi.platform.domain.PodStatus; -import com.ruoyi.platform.mapper.ComputingResourceDao; import com.ruoyi.platform.mapper.DevEnvironmentDao; import com.ruoyi.platform.service.DevEnvironmentService; import com.ruoyi.platform.service.JupyterService; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.utils.K8sClientUtil; import com.ruoyi.platform.utils.MinioUtil; @@ -56,9 +56,6 @@ public class JupyterServiceImpl implements JupyterService { @Resource private DevEnvironmentDao devEnvironmentDao; - @Resource - private ComputingResourceDao computingResourceDao; - @Resource @Lazy private DevEnvironmentService devEnvironmentService; @@ -66,6 +63,9 @@ public class JupyterServiceImpl implements JupyterService { @Resource private RedisService redisService; + @Resource + private ResourceOccupyService resourceOccupyService; + public JupyterServiceImpl(MinioUtil minioUtil) { this.minioUtil = minioUtil; } @@ -109,7 +109,7 @@ public class JupyterServiceImpl implements JupyterService { Integer podPort = k8sClientUtil.createConfiguredPod(podName, namespace, port, mountPath, null, devEnvironment, minioPvcName, datasetPath, modelPath); String url = masterIp + ":" + podPort; redisService.setCacheObject(podName, masterIp + ":" + podPort); - devEnvironment.setStatus("Pending"); + devEnvironment.setStatus(Constant.Pending); devEnvironment.setUrl(url); this.devEnvironmentService.update(devEnvironment); return url; @@ -133,16 +133,15 @@ public class JupyterServiceImpl implements JupyterService { return "pod不存在!"; } - if (Constant.Computing_Resource_GPU.equals(devEnvironment.getComputingResource())) { - computingResourceDao.updateUsedStateByNode(pod.getSpec().getNodeName(), Constant.Used_State_unused); - } + // 结束扣积分 + resourceOccupyService.endDeduce(Constant.TaskType_Dev, Long.valueOf(id)); // 使用 Kubernetes API 删除 Pod String deleteResult = k8sClientUtil.deletePod(podName, namespace); // 删除service k8sClientUtil.deleteService(svcName, namespace); - devEnvironment.setStatus("Terminated"); + devEnvironment.setStatus(Constant.Terminated); this.devEnvironmentService.update(devEnvironment); return deleteResult + ",编辑器已停止"; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java index 0f6b7412..2ae6a5de 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.platform.domain.RayIns; import com.ruoyi.platform.mapper.RayDao; import com.ruoyi.platform.mapper.RayInsDao; import com.ruoyi.platform.service.RayInsService; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.utils.*; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -48,6 +49,9 @@ public class RayInsServiceImpl implements RayInsService { @Resource private RayDao rayDao; + @Resource + private ResourceOccupyService resourceOccupyService; + @Resource private MinioUtil minioUtil; @@ -163,6 +167,8 @@ public class RayInsServiceImpl implements RayInsService { ins.setUpdateTime(new Date()); rayInsDao.update(ins); updateRayStatus(rayIns.getRayId()); + // 结束扣积分 + resourceOccupyService.endDeduce(Constant.TaskType_Ray, id); return true; } else { return false; 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 67f30d29..105025a6 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 @@ -10,6 +10,7 @@ import com.ruoyi.platform.mapper.RayDao; import com.ruoyi.platform.mapper.RayInsDao; import com.ruoyi.platform.service.RayInsService; import com.ruoyi.platform.service.RayService; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.utils.HttpUtils; import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.utils.JsonUtils; @@ -42,8 +43,8 @@ public class RayServiceImpl implements RayService { @Value("${argo.workflowRun}") private String argoWorkflowRun; - @Value("${minio.endpoint}") - private String minioEndpoint; + @Resource + private ResourceOccupyService resourceOccupyService; @Resource private RayDao rayDao; @@ -151,58 +152,63 @@ public class RayServiceImpl implements RayService { throw new Exception("自动超参数寻优配置不存在"); } - RayParamVo rayParamVo = new RayParamVo(); - BeanUtils.copyProperties(ray, rayParamVo); - rayParamVo.setCodeConfig(JsonUtils.jsonToMap(ray.getCodeConfig())); - rayParamVo.setDataset(JsonUtils.jsonToMap(ray.getDataset())); - rayParamVo.setModel(JsonUtils.jsonToMap(ray.getModel())); - rayParamVo.setImage(JsonUtils.jsonToMap(ray.getImage())); - String param = JsonUtils.objectToJson(rayParamVo); - - // 调argo转换接口 - try { - String convertRes = HttpUtils.sendPost(argoUrl + convertRay, param); - if (convertRes == null || StringUtils.isEmpty(convertRes)) { - throw new RuntimeException("转换流水线失败"); - } - Map converMap = JsonUtils.jsonToMap(convertRes); - // 组装运行接口json - Map output = (Map) converMap.get("output"); - Map runReqMap = new HashMap<>(); - runReqMap.put("data", converMap.get("data")); - // 调argo运行接口 - String runRes = HttpUtils.sendPost(argoUrl + argoWorkflowRun, JsonUtils.mapToJson(runReqMap)); - if (runRes == null || StringUtils.isEmpty(runRes)) { - throw new RuntimeException("Failed to run workflow."); - } - Map runResMap = JsonUtils.jsonToMap(runRes); - Map data = (Map) runResMap.get("data"); - //判断data为空 - if (data == null || MapUtils.isEmpty(data)) { - throw new RuntimeException("Failed to run workflow."); + // 记录开始扣积分 + 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())); + rayParamVo.setImage(JsonUtils.jsonToMap(ray.getImage())); + String param = JsonUtils.objectToJson(rayParamVo); + + // 调argo转换接口 + try { + String convertRes = HttpUtils.sendPost(argoUrl + convertRay, param); + if (convertRes == null || StringUtils.isEmpty(convertRes)) { + throw new RuntimeException("转换流水线失败"); + } + Map converMap = JsonUtils.jsonToMap(convertRes); + // 组装运行接口json + Map output = (Map) converMap.get("output"); + Map runReqMap = new HashMap<>(); + runReqMap.put("data", converMap.get("data")); + // 调argo运行接口 + String runRes = HttpUtils.sendPost(argoUrl + argoWorkflowRun, JsonUtils.mapToJson(runReqMap)); + if (runRes == null || StringUtils.isEmpty(runRes)) { + throw new RuntimeException("运行失败"); + } + Map runResMap = JsonUtils.jsonToMap(runRes); + Map data = (Map) runResMap.get("data"); + //判断data为空 + if (data == null || MapUtils.isEmpty(data)) { + throw new RuntimeException("运行失败"); + } + Map metadata = (Map) data.get("metadata"); + + // 插入记录到实验实例表 + RayIns rayIns = new RayIns(); + rayIns.setRayId(ray.getId()); + rayIns.setArgoInsNs((String) metadata.get("namespace")); + rayIns.setArgoInsName((String) metadata.get("name")); + rayIns.setParam(param); + rayIns.setStatus(Constant.Pending); + //替换argoInsName + String outputString = JsonUtils.mapToJson(output); + rayIns.setNodeResult(outputString.replace("{{workflow.name}}", (String) metadata.get("name"))); + + Map param_output = (Map) output.get("param_output"); + List output1 = (ArrayList) param_output.values().toArray()[0]; + Map output2 = (Map) output1.get(0); + String outputPath = output2.get("path").replace("{{workflow.name}}", (String) metadata.get("name")) + "/hpo"; + rayIns.setResultPath(outputPath); + rayInsDao.insert(rayIns); + rayInsService.updateRayStatus(id); + resourceOccupyService.startDeduce(ray.getComputingResourceId(), Constant.TaskType_Ray, rayIns.getId()); + } catch (Exception e) { + throw new RuntimeException(e); } - Map metadata = (Map) data.get("metadata"); - - // 插入记录到实验实例表 - RayIns rayIns = new RayIns(); - rayIns.setRayId(ray.getId()); - rayIns.setArgoInsNs((String) metadata.get("namespace")); - rayIns.setArgoInsName((String) metadata.get("name")); - rayIns.setParam(param); - rayIns.setStatus(Constant.Pending); - //替换argoInsName - String outputString = JsonUtils.mapToJson(output); - rayIns.setNodeResult(outputString.replace("{{workflow.name}}", (String) metadata.get("name"))); - - Map param_output = (Map) output.get("param_output"); - List output1 = (ArrayList) param_output.values().toArray()[0]; - Map output2 = (Map) output1.get(0); - String outputPath = output2.get("path").replace("{{workflow.name}}", (String) metadata.get("name")) + "/hpo"; - rayIns.setResultPath(outputPath); - rayInsDao.insert(rayIns); - rayInsService.updateRayStatus(id); - } catch (Exception e) { - throw new RuntimeException(e); } return "执行成功"; } 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 new file mode 100644 index 00000000..12f79edf --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java @@ -0,0 +1,102 @@ +package com.ruoyi.platform.service.impl; + +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.platform.constant.Constant; +import com.ruoyi.platform.domain.ComputingResource; +import com.ruoyi.platform.domain.ResourceOccupy; +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; +import java.util.Date; + +@Service("resourceOccupyService") +public class ResourceOccupyServiceImpl implements ResourceOccupyService { + @Resource + private ResourceOccupyDao resourceOccupyDao; + + @Resource + private ComputingResourceDao computingResourceDao; + + @Override + public Boolean haveResource(Integer computingResourceId) throws Exception { + ComputingResource computingResource = computingResourceDao.queryById(computingResourceId); + + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser.getSysUser().getCredit() < computingResource.getCreditPerHour()) { + throw new Exception("积分不足"); + } + if (Constant.Computing_Resource_GPU.equals(computingResource.getComputingResource())) { + if (resourceOccupyDao.haveResource(computingResource.getResourceId(), computingResource.getGpuNums())) { + return true; + } else { + throw new Exception("资源不足,GPU资源已被占用"); + } + } else { + if (resourceOccupyDao.haveResource(computingResource.getResourceId(), computingResource.getCpuCores())) { + return true; + } else { + throw new Exception("资源不足,CPU资源已被占用完"); + } + } + } + + @Override + public void startDeduce(Integer computingResourceId, String taskType, Long taskId) { + ResourceOccupy resourceOccupy = new ResourceOccupy(); + ComputingResource computingResource = computingResourceDao.queryById(computingResourceId); + resourceOccupy.setComputingResourceId(computingResourceId); + LoginUser loginUser = SecurityUtils.getLoginUser(); + resourceOccupy.setUserId(loginUser.getUserid()); + resourceOccupy.setCreditPerHour(computingResource.getCreditPerHour()); + resourceOccupy.setTaskType(taskType); + resourceOccupy.setTaskId(taskId); + resourceOccupyDao.save(resourceOccupy); + + if (Constant.Computing_Resource_GPU.equals(computingResource.getComputingResource())) { + resourceOccupyDao.updateUsed(computingResource.getResourceId(), computingResource.getGpuNums()); + } else { + resourceOccupyDao.updateUsed(computingResource.getResourceId(), computingResource.getCpuCores()); + } + } + + @Override + public void endDeduce(String taskType, Long taskId) { + ResourceOccupy resourceOccupy = resourceOccupyDao.getResourceOccupyByTask(taskType, taskId); + deducing(taskType, taskId); + resourceOccupy.setState(Constant.State_invalid); + resourceOccupyDao.edit(resourceOccupy); + + ComputingResource computingResource = computingResourceDao.queryById(resourceOccupy.getComputingResourceId()); + if (Constant.Computing_Resource_GPU.equals(computingResource.getComputingResource())) { + resourceOccupyDao.updateUnUsed(computingResource.getResourceId(), computingResource.getGpuNums()); + } else { + resourceOccupyDao.updateUnUsed(computingResource.getResourceId(), computingResource.getCpuCores()); + } + } + + @Override + public void deducing(String taskType, Long taskId) { + ResourceOccupy resourceOccupy = resourceOccupyDao.getResourceOccupyByTask(taskType, taskId); + long timeDifferenceMillis = new Date().getTime() - resourceOccupy.getDeduceLastTime().getTime(); + Float hours = (float) (timeDifferenceMillis / (1000 * 60 * 60)); + + float deduceCredit = resourceOccupy.getCreditPerHour() * hours; + resourceOccupyDao.deduceCredit(deduceCredit, resourceOccupy.getUserId()); + + 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 0244bba6..8160c457 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 @@ -8,6 +8,7 @@ import com.ruoyi.platform.domain.AssetWorkflow; import com.ruoyi.platform.domain.ServiceVersion; import com.ruoyi.platform.mapper.AssetWorkflowDao; import com.ruoyi.platform.mapper.ServiceDao; +import com.ruoyi.platform.service.ResourceOccupyService; import com.ruoyi.platform.service.ServiceService; import com.ruoyi.platform.utils.ConvertUtil; import com.ruoyi.platform.utils.HttpUtils; @@ -45,6 +46,9 @@ public class ServiceServiceImpl implements ServiceService { @Resource private AssetWorkflowDao assetWorkflowDao; + @Resource + private ResourceOccupyService resourceOccupyService; + @Override public Page queryByPageService(com.ruoyi.platform.domain.Service service, PageRequest pageRequest) { long total = serviceDao.countService(service); @@ -110,12 +114,11 @@ public class ServiceServiceImpl implements ServiceService { } @Override - public ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo) { + public ServiceVersion addServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception { ServiceVersion svByVersion = serviceDao.getSvByVersion(serviceVersionVo.getVersion(), serviceVersionVo.getServiceId()); if (svByVersion != null) { throw new RuntimeException("服务版本已存在,无法新增"); } - ServiceVersion serviceVersion = getServiceVersion(serviceVersionVo); LoginUser loginUser = SecurityUtils.getLoginUser(); serviceVersion.setCreateBy(loginUser.getUsername()); @@ -135,9 +138,8 @@ public class ServiceServiceImpl implements ServiceService { } @Override - public String editServiceVersion(ServiceVersionVo serviceVersionVo) { + public String editServiceVersion(ServiceVersionVo serviceVersionVo) throws Exception { ServiceVersion serviceVersion = getServiceVersion(serviceVersionVo); - ServiceVersion oldServiceVersion = serviceDao.getServiceVersionById(serviceVersionVo.getId()); if (!oldServiceVersion.getReplicas().equals(serviceVersionVo.getReplicas()) || !oldServiceVersion.getResource().equals(serviceVersionVo.getResource()) || serviceVersionVo.getRerun()) { @@ -234,13 +236,13 @@ public class ServiceServiceImpl implements ServiceService { } @Override - public String runServiceVersion(Long id) { + public String runServiceVersion(Long id) throws Exception { ServiceVersion serviceVersion = serviceDao.getServiceVersionById(id); com.ruoyi.platform.domain.Service service = serviceDao.getServiceById(serviceVersion.getServiceId()); 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())); @@ -249,23 +251,29 @@ public class ServiceServiceImpl implements ServiceService { paramMap.put("model", JSONObject.parseObject(serviceVersion.getModel())); paramMap.put("service_type", service.getServiceType()); paramMap.put("deploy_type", serviceVersion.getDeployType()); - String req = HttpUtils.sendPost(argoUrl + modelService + "/create", JSON.toJSONString(paramMap)); - if (StringUtils.isNotEmpty(req)) { - Map reqMap = JacksonUtil.parseJSONStr2Map(req); - if ((Integer) reqMap.get("code") == 200) { - Map data = (Map) reqMap.get("data"); - serviceVersion.setUrl(data.get("url")); - serviceVersion.setDeploymentName(data.get("deployment_name")); - serviceVersion.setSvcName(data.get("svc_name")); - serviceVersion.setRunState(Constant.Pending); - serviceDao.updateServiceVersion(serviceVersion); - return "启动成功"; + + // 记录开始扣积分 + if (resourceOccupyService.haveResource(serviceVersion.getComputingResourceId())) { + String req = HttpUtils.sendPost(argoUrl + modelService + "/create", JSON.toJSONString(paramMap)); + if (StringUtils.isNotEmpty(req)) { + Map reqMap = JacksonUtil.parseJSONStr2Map(req); + if ((Integer) reqMap.get("code") == 200) { + resourceOccupyService.startDeduce(serviceVersion.getComputingResourceId(), Constant.TaskType_Service, serviceVersion.getId()); + Map data = (Map) reqMap.get("data"); + serviceVersion.setUrl(data.get("url")); + serviceVersion.setDeploymentName(data.get("deployment_name")); + serviceVersion.setSvcName(data.get("svc_name")); + serviceVersion.setRunState(Constant.Pending); + serviceDao.updateServiceVersion(serviceVersion); + return "启动成功"; + } else { + throw new RuntimeException("启动失败"); + } } else { throw new RuntimeException("启动失败"); } - } else { - throw new RuntimeException("启动失败"); } + return "启动失败"; } @Override @@ -277,6 +285,8 @@ public class ServiceServiceImpl implements ServiceService { if (StringUtils.isNotEmpty(req)) { serviceVersion.setRunState(Constant.Stopped); serviceDao.updateServiceVersion(serviceVersion); + // 结束扣积分 + resourceOccupyService.endDeduce(Constant.TaskType_Service, id); return "停止成功"; } else { throw new RuntimeException("停止失败"); 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 17d36177..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,8 +2,10 @@ 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; import io.kubernetes.client.custom.Quantity; @@ -49,6 +51,9 @@ public class K8sClientUtil { */ private static ApiClient apiClient; + @Resource + private ResourceOccupyService resourceOccupyService; + @Resource private ComputingResourceDao computingResourceDao; @@ -487,7 +492,7 @@ public class K8sClientUtil { //配置资源 - V1ResourceRequirements v1ResourceRequirements = setPodResource(devEnvironment.getStandard()); + V1ResourceRequirements v1ResourceRequirements = setPodResource(devEnvironment.getComputingResourceId()); V1Pod pod = new V1PodBuilder() .withNewMetadata() @@ -509,10 +514,12 @@ public class K8sClientUtil { .build(); try { - pod = api.createNamespacedPod(namespace, pod, null, null, null); - String nodeName = getNodeName(podName, namespace); - if (Constant.Computing_Resource_GPU.equals(devEnvironment.getComputingResource())) { - computingResourceDao.updateUsedStateByNode(nodeName, Constant.Used_State_used); + // 记录开始扣积分 + if (resourceOccupyService.haveResource(devEnvironment.getComputingResourceId())) { + pod = api.createNamespacedPod(namespace, pod, null, null, null); + String nodeName = getNodeName(podName, namespace); + + resourceOccupyService.startDeduce(devEnvironment.getComputingResourceId(), Constant.TaskType_Dev, Long.valueOf(devEnvironment.getId())); } } catch (ApiException e) { throw new RuntimeException("创建pod异常:" + e.getResponseBody()); @@ -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 setPodResource(Integer computingResourceId) { + ComputingResource computingResource = computingResourceDao.queryById(computingResourceId); - //配置资源 - 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))); - - - //创建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/DevEnvironmentVo.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java index 14089f14..0d019417 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java @@ -19,6 +19,9 @@ public class DevEnvironmentVo implements Serializable { * 计算资源 */ private String computingResource; + + private Integer computingResourceId; + /** * 资源规格 */ 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/java/com/ruoyi/platform/vo/RayVo.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java index 4cf000e5..fe3cc30b 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java @@ -57,6 +57,8 @@ public class RayVo { private String resource; + private Integer computingResourceId; + private String createBy; private Date createTime; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java index 2cf03f47..d1cb79cd 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java @@ -28,6 +28,8 @@ public class ServiceVersionVo { private String resource; + private Integer computingResourceId; + private Integer replicas; private String mountPath; 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 162a12f7..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 @@ -2,30 +2,22 @@ - - - - - - - - - - - - - select - id,computing_resource,standard,description,create_by,create_time,update_by,update_time,state + id,resource_id,computing_resource,standard,description, + cpu_cores,memory_gb,gpu_memory_gb,gpu_nums,credit_per_hour,labels, + create_by,create_time,update_by,update_time,state from computing_resource where id = #{id} and state = 1 - select - id,computing_resource,standard,description,create_by,create_time,update_by,update_time,state + id,resource_id,computing_resource,standard,description, + cpu_cores,memory_gb,gpu_memory_gb,gpu_nums,credit_per_hour,labels, + create_by,create_time,update_by,update_time,state from computing_resource state = 1 @@ -156,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/DevEnvironmentDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml index cfab27a7..82e92a56 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml @@ -1,38 +1,18 @@ - - - - - - - - - - - - - - - - - - - - - select - id,name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state + id,name,status,computing_resource,computing_resource_id, standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state from dev_environment where id = #{id} and state = 1 - select - id,name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state + id,name,status,computing_resource,computing_resource_id,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state from dev_environment state = 1 @@ -146,12 +126,17 @@ + + - insert into dev_environment(name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state) + insert into dev_environment(name,status,computing_resource,computing_resource_id,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state) values (#{devEnvironment.name}, #{devEnvironment.status}, #{devEnvironment.computingResource}, + #{devEnvironment.computingResourceId}, #{devEnvironment.standard}, #{devEnvironment.envVariable}, #{devEnvironment.image}, @@ -167,24 +152,6 @@ ) - - insert into dev_environment(name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state ) - values - - (#{entity.name},#{entity.status},#{entity.computingResource},#{entity.standard},#{entity.envVariable},#{entity.image},#{entity.dataset},#{entity.model},#{entity.url},#{entity.altField2},#{entity.createBy},#{entity.createTime},#{entity.updateBy},#{entity.updateTime},#{entity.state}) - - - - - insert into dev_environment(name,status,computing_resource,standard,env_variable,image,dataset,model,url,alt_field2,create_by,create_time,update_by,update_time,state) - values - - (#{entity.name}#{entity.status}#{entity.computingResource}#{entity.standard}#{entity.envVariable}#{entity.image}#{entity.dataset}#{entity.model}#{entity.url}#{entity.altField2}#{entity.createBy}#{entity.createTime}#{entity.updateBy}#{entity.updateTime}#{entity.state}) - - on duplicate key update -name = values(name)status = values(status)computing_resource = values(computing_resource)standard = values(standard)env_variable = values(env_variable)image = values(image)dataset = values(dataset)model = values(model)url = values(url)alt_field2 = values(alt_field2)create_by = values(create_by)create_time = values(create_time)update_by = values(update_by)update_time = values(update_time)state = values(state) - - update dev_environment @@ -198,6 +165,9 @@ name = values(name)status = values(status)computing_resource = values(computing_ computing_resource = #{devEnvironment.computingResource}, + + computing_resource_id = #{devEnvironment.computingResourceId}, + standard = #{devEnvironment.standard}, diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml index 236141c4..72aebb6e 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml @@ -2,13 +2,15 @@ - insert into ray(name, description, dataset, model, code_config, main_py, num_samples, parameters, points_to_evaluate, storage_path, + insert into ray(name, description, dataset, model, code_config, main_py, num_samples, parameters, + points_to_evaluate, storage_path, search_alg, scheduler, metric, mode, max_t, - min_samples_required, resource, image, create_by, update_by) - values (#{ray.name}, #{ray.description}, #{ray.dataset}, #{ray.model}, #{ray.codeConfig}, #{ray.mainPy}, #{ray.numSamples}, #{ray.parameters}, + min_samples_required, resource, computing_resource_id, image, create_by, update_by) + values (#{ray.name}, #{ray.description}, #{ray.dataset}, #{ray.model}, #{ray.codeConfig}, #{ray.mainPy}, + #{ray.numSamples}, #{ray.parameters}, #{ray.pointsToEvaluate}, #{ray.storagePath}, #{ray.searchAlg}, #{ray.scheduler}, #{ray.metric}, #{ray.mode}, #{ray.maxT}, #{ray.minSamplesRequired}, - #{ray.resource}, #{ray.image}, #{ray.createBy}, #{ray.updateBy}) + #{ray.resource}, #{ray.computingResourceId}, #{ray.image}, #{ray.createBy}, #{ray.updateBy}) @@ -68,6 +70,9 @@ resource = #{ray.resource}, + + computing_resource_id = #{ray.computingResourceId}, + update_by = #{ray.updateBy}, diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml index 2b9c12ac..2a5a3c20 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml @@ -1,7 +1,7 @@ - + insert into ray_ins(ray_id, result_path, argo_ins_name, argo_ins_ns, node_status, node_result, param, source, status) values (#{rayIns.rayId}, #{rayIns.resultPath}, #{rayIns.argoInsName}, #{rayIns.argoInsNs}, 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 new file mode 100644 index 00000000..ad8a782c --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml @@ -0,0 +1,62 @@ + + + + + insert into resource_occupy (user_id, computing_resource_id, credit_per_hour) + values (#{resourceOccupy.userId}, #{resourceOccupy.computingResourceId}, #{resourceOccupy.creditPerHour}) + + + + update resource_occupy + + + state = #{resourceOccupy.state}, + + + deduce_last_time = #{resourceOccupy.deduceLastTime}, + + + where id = #{resourceOccupy.id} + + + + update sys_user + set credit = credit - #{credit} + where user_id = #{userId} + + + + update resource + set used = used + #{used} + where id = #{id} + + + + update resource + set used = used - #{used} + where id = #{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 cfa98aa1..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 @@ -84,6 +84,11 @@ where service_id = #{serviceId} and version = #{version} and state = 1 + + insert into service(service_name, service_type, description, create_by, update_by) values (#{service.serviceName}, #{service.serviceType}, #{service.description}, #{service.createBy}, #{service.updateBy}) 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 @@