Browse Source

Merge branch 'dev-credits' into dev

dev-credits
chenzhihang 1 year ago
parent
commit
1243bd4ce8
40 changed files with 600 additions and 523 deletions
  1. +10
    -0
      ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
  2. +8
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java
  3. +2
    -2
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java
  4. +3
    -6
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java
  5. +20
    -8
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/resources/ComputingResourceController.java
  6. +2
    -2
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java
  7. +27
    -100
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java
  8. +5
    -129
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java
  9. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java
  10. +25
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java
  11. +39
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java
  12. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java
  13. +0
    -2
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ComputingResourceDao.java
  14. +1
    -18
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java
  15. +28
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java
  16. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java
  17. +9
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java
  18. +44
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java
  19. +2
    -2
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java
  20. +18
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java
  21. +3
    -3
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java
  22. +12
    -12
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java
  23. +0
    -5
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java
  24. +8
    -9
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java
  25. +6
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java
  26. +59
    -53
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java
  27. +102
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java
  28. +29
    -19
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java
  29. +18
    -81
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java
  30. +3
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java
  31. +1
    -1
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayParamVo.java
  32. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java
  33. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java
  34. +8
    -20
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml
  35. +13
    -43
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml
  36. +9
    -4
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml
  37. +1
    -1
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml
  38. +62
    -0
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml
  39. +5
    -0
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml
  40. +8
    -3
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 10
- 0
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java View File

@@ -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)


+ 8
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/constant/Constant.java View File

@@ -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";
}

+ 2
- 2
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/devEnvironment/DevEnvironmentController.java View File

@@ -61,7 +61,7 @@ public class DevEnvironmentController extends BaseController {
* @return 新增结果
*/
@PostMapping
public GenericsAjaxResult<DevEnvironment> add(@RequestBody DevEnvironmentVo devEnvironmentVo) {
public GenericsAjaxResult<DevEnvironment> 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<DevEnvironment> edit(@RequestBody DevEnvironment devEnvironment) {
public GenericsAjaxResult<DevEnvironment> edit(@RequestBody DevEnvironment devEnvironment) throws Exception {
return genericsSuccess(this.devEnvironmentService.update(devEnvironment));
}



+ 3
- 6
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/jupyter/JupyterController.java View File

@@ -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<String> getURL() throws IOException {
@@ -47,7 +44,7 @@ public class JupyterController extends BaseController {
@ApiOperation("根据开发环境id启动jupyter pod")
@ApiResponse
public GenericsAjaxResult<String> 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<PodStatusVo> getStatus(DevEnvironment devEnvironment) throws Exception {
return genericsSuccess(this.jupyterService.getJupyterStatus(devEnvironment));
return genericsSuccess(this.jupyterService.getJupyterStatus(devEnvironment));
}




+ 20
- 8
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/resources/ComputingResourceController.java View File

@@ -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<Page<ComputingResource>> queryByPage(ComputingResource computingResource, @RequestParam("page") int page,
public GenericsAjaxResult<Page<ComputingResource>> 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<ComputingResource> 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<ComputingResource> 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<ComputingResource> 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<String> deleteById(@PathVariable("id") Integer id) {
return genericsSuccess(this.computingResourceService.removeById(id));
return genericsSuccess(this.computingResourceService.removeById(id));
}

@GetMapping("/resouceOccupy")
@ApiOperation("分页查询用户资源使用情况")
public GenericsAjaxResult<Page<ResourceOccupy>> queryResourceOccupyByPage(@RequestParam("page") int page,
@RequestParam("size") int size) {
PageRequest pageRequest = PageRequest.of(page, size);
return genericsSuccess(resourceOccupyService.queryByPage(pageRequest));
}
}


+ 2
- 2
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/service/ServiceController.java View File

@@ -61,7 +61,7 @@ public class ServiceController extends BaseController {

@PostMapping("/serviceVersion")
@ApiOperation("新增服务版本")
public GenericsAjaxResult<ServiceVersion> addServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) {
public GenericsAjaxResult<ServiceVersion> 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<String> editServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) {
public GenericsAjaxResult<String> editServiceVersion(@RequestBody ServiceVersionVo serviceVersionVo) throws Exception {
return genericsSuccess(serviceService.editServiceVersion(serviceVersionVo));
}



+ 27
- 100
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ComputingResource.java View File

@@ -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;
}
}


+ 5
- 129
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/DevEnvironment.java View File

@@ -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;
}

}


+ 2
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Ray.java View File

@@ -67,6 +67,8 @@ public class Ray {

private String resource;

private Integer computingResourceId;

private Integer state;

private String createBy;


+ 25
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Resource.java View File

@@ -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;
}

+ 39
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ResourceOccupy.java View File

@@ -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;
}

+ 2
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ServiceVersion.java View File

@@ -26,6 +26,8 @@ public class ServiceVersion implements Serializable {

private String resource;

private Integer computingResourceId;

private Integer replicas;

private String mountPath;


+ 0
- 2
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ComputingResourceDao.java View File

@@ -73,8 +73,6 @@ public interface ComputingResourceDao {
*/
int update(@Param("computingResource") ComputingResource computingResource);

int updateUsedStateByNode(@Param("node")String node, @Param("usedState") Integer usedState);

/**
* 通过主键删除数据
*


+ 1
- 18
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/DevEnvironmentDao.java View File

@@ -46,24 +46,6 @@ public interface DevEnvironmentDao {
*/
int insert(@Param("devEnvironment") DevEnvironment devEnvironment);

/**
* 批量新增数据(MyBatis原生foreach方法)
*
* @param entities List<DevEnvironment> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<DevEnvironment> entities);

/**
* 批量新增或按主键更新数据(MyBatis原生foreach方法)
*
* @param entities List<DevEnvironment> 实例对象列表
*
* @return 影响行数
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
*/
int insertOrUpdateBatch(@Param("entities") List<DevEnvironment> entities);

/**
* 修改数据
*
@@ -80,5 +62,6 @@ public interface DevEnvironmentDao {
*/
int deleteById(Integer id);

List<DevEnvironment> getRunning();
}


+ 28
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ResourceOccupyDao.java View File

@@ -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<ResourceOccupy> queryByPage(@Param("pageable") Pageable pageable);
}

+ 2
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ServiceDao.java View File

@@ -36,4 +36,6 @@ public interface ServiceDao {
Service getServiceByName(@Param("serviceName") String serviceName);

ServiceVersion getSvByVersion(@Param("version") String version, @Param("serviceId") Long serviceId);

List<ServiceVersion> getRunning();
}

+ 9
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/RayInsStatusTask.java View File

@@ -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<Long> 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);
}


+ 44
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ResourceOccupyTask.java View File

@@ -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<DevEnvironment> 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<ServiceVersion> serviceVersions = serviceDao.getRunning();
for (ServiceVersion serviceVersion : serviceVersions) {
resourceOccupyService.deducing(Constant.TaskType_Service, serviceVersion.getId());
}
}
}

+ 2
- 2
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DevEnvironmentService.java View File

@@ -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;

/**
* 通过主键删除数据


+ 18
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ResourceOccupyService.java View File

@@ -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<ResourceOccupy> queryByPage(PageRequest pageRequest);
}

+ 3
- 3
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ServiceService.java View File

@@ -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);



+ 12
- 12
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DevEnvironmentServiceImpl.java View File

@@ -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 ? "删除成功" : "删除失败";
}




+ 0
- 5
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java View File

@@ -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;



+ 8
- 9
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/JupyterServiceImpl.java View File

@@ -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 + ",编辑器已停止";



+ 6
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayInsServiceImpl.java View File

@@ -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;


+ 59
- 53
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/RayServiceImpl.java View File

@@ -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<String, Object> converMap = JsonUtils.jsonToMap(convertRes);
// 组装运行接口json
Map<String, Object> output = (Map<String, Object>) converMap.get("output");
Map<String, Object> 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<String, Object> runResMap = JsonUtils.jsonToMap(runRes);
Map<String, Object> data = (Map<String, Object>) 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<String, Object> converMap = JsonUtils.jsonToMap(convertRes);
// 组装运行接口json
Map<String, Object> output = (Map<String, Object>) converMap.get("output");
Map<String, Object> 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<String, Object> runResMap = JsonUtils.jsonToMap(runRes);
Map<String, Object> data = (Map<String, Object>) runResMap.get("data");
//判断data为空
if (data == null || MapUtils.isEmpty(data)) {
throw new RuntimeException("运行失败");
}
Map<String, Object> metadata = (Map<String, Object>) 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<String, Object> param_output = (Map<String, Object>) output.get("param_output");
List output1 = (ArrayList) param_output.values().toArray()[0];
Map<String, String> output2 = (Map<String, String>) 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<String, Object> metadata = (Map<String, Object>) 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<String, Object> param_output = (Map<String, Object>) output.get("param_output");
List output1 = (ArrayList) param_output.values().toArray()[0];
Map<String, String> output2 = (Map<String, String>) 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 "执行成功";
}


+ 102
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ResourceOccupyServiceImpl.java View File

@@ -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<ResourceOccupy> queryByPage(PageRequest pageRequest) {
long total = resourceOccupyDao.count();
return new PageImpl<>(resourceOccupyDao.queryByPage(pageRequest), pageRequest, total);
}
}

+ 29
- 19
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ServiceServiceImpl.java View File

@@ -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<com.ruoyi.platform.domain.Service> 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<String, Object> 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<String, Object> reqMap = JacksonUtil.parseJSONStr2Map(req);
if ((Integer) reqMap.get("code") == 200) {
Map<String, String> data = (Map<String, String>) 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<String, Object> reqMap = JacksonUtil.parseJSONStr2Map(req);
if ((Integer) reqMap.get("code") == 200) {
resourceOccupyService.startDeduce(serviceVersion.getComputingResourceId(), Constant.TaskType_Service, serviceVersion.getId());
Map<String, String> data = (Map<String, String>) 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("停止失败");


+ 18
- 81
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/K8sClientUtil.java View File

@@ -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<String, String> selector = new HashMap<>();
selector.put("app", dpName);
V1ResourceRequirements setPodResource(Integer computingResourceId) {
ComputingResource computingResource = computingResourceDao.queryById(computingResourceId);

//配置资源
V1ResourceRequirements v1ResourceRequirements = setPodResource(resource);

//配置环境变量
List<V1EnvVar> env = new ArrayList<>();
if (StringUtils.isNotEmpty(envVariables)) {
HashMap<String, String> 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<V1VolumeMount> 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<V1Volume> 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<String, Quantity> 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"));



+ 3
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/DevEnvironmentVo.java View File

@@ -19,6 +19,9 @@ public class DevEnvironmentVo implements Serializable {
* 计算资源
*/
private String computingResource;

private Integer computingResourceId;

/**
* 资源规格
*/


+ 1
- 1
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayParamVo.java View File

@@ -44,5 +44,5 @@ public class RayParamVo {

private Integer minSamplesRequired;

private String resource;
private Integer resource;
}

+ 2
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/RayVo.java View File

@@ -57,6 +57,8 @@ public class RayVo {

private String resource;

private Integer computingResourceId;

private String createBy;

private Date createTime;


+ 2
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/serviceVos/ServiceVersionVo.java View File

@@ -28,6 +28,8 @@ public class ServiceVersionVo {

private String resource;

private Integer computingResourceId;

private Integer replicas;

private String mountPath;


+ 8
- 20
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ComputingResourceDaoMapper.xml View File

@@ -2,30 +2,22 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.platform.mapper.ComputingResourceDao">

<resultMap type="com.ruoyi.platform.domain.ComputingResource" id="ComputingResourceMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="computingResource" column="computing_resource" jdbcType="VARCHAR"/>
<result property="standard" column="standard" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="state" column="state" jdbcType="INTEGER"/>
</resultMap>

<!--查询单个-->
<select id="queryById" resultMap="ComputingResourceMap">
<select id="queryById" resultType="com.ruoyi.platform.domain.ComputingResource">
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>

<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="ComputingResourceMap">
<select id="queryAllByLimit" resultType="com.ruoyi.platform.domain.ComputingResource">
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>
state = 1
@@ -156,10 +148,6 @@ computing_resource = values(computing_resource)standard = values(standard)descri
where id = #{computingResource.id}
</update>

<update id="updateUsedStateByNode">
update computing_resource set used_state = #{usedState} where node = #{node}
</update>

<!--通过主键删除-->
<delete id="deleteById">
delete from computing_resource where id = #{id}


+ 13
- 43
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/DevEnvironmentDaoMapper.xml View File

@@ -1,38 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.platform.mapper.DevEnvironmentDao">

<resultMap type="com.ruoyi.platform.domain.DevEnvironment" id="DevEnvironmentMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="VARCHAR"/>
<result property="computingResource" column="computing_resource" jdbcType="VARCHAR"/>
<result property="standard" column="standard" jdbcType="VARCHAR"/>
<result property="envVariable" column="env_variable" jdbcType="VARCHAR"/>
<result property="image" column="image" jdbcType="VARCHAR"/>
<result property="dataset" column="dataset" jdbcType="VARCHAR"/>
<result property="model" column="model" jdbcType="VARCHAR"/>
<result property="url" column="url" jdbcType="VARCHAR"/>
<result property="altField2" column="alt_field2" jdbcType="VARCHAR"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="state" column="state" jdbcType="INTEGER"/>
</resultMap>

<!--查询单个-->
<select id="queryById" resultMap="DevEnvironmentMap">
<select id="queryById" resultType="com.ruoyi.platform.domain.DevEnvironment">
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>

<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="DevEnvironmentMap">
<select id="queryAllByLimit" resultType="com.ruoyi.platform.domain.DevEnvironment">
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>
state = 1
@@ -146,12 +126,17 @@
</where>
</select>

<select id="getRunning" resultType="com.ruoyi.platform.domain.DevEnvironment">
select * from dev_environment where state = 1 and status = 'Running'
</select>

<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
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>

<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
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
<foreach collection="entities" item="entity" separator=",">
(#{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})
</foreach>
</insert>

<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
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
<foreach collection="entities" item="entity" separator=",">
(#{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})
</foreach>
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)
</insert>

<!--通过主键修改数据-->
<update id="update">
update dev_environment
@@ -198,6 +165,9 @@ name = values(name)status = values(status)computing_resource = values(computing_
<if test="devEnvironment.computingResource != null and devEnvironment.computingResource != ''">
computing_resource = #{devEnvironment.computingResource},
</if>
<if test="devEnvironment.computingResourceId != null and devEnvironment.computingResourceId != ''">
computing_resource_id = #{devEnvironment.computingResourceId},
</if>
<if test="devEnvironment.standard != null and devEnvironment.standard != ''">
standard = #{devEnvironment.standard},
</if>


+ 9
- 4
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml View File

@@ -2,13 +2,15 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.platform.mapper.RayDao">
<insert id="save">
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})
</insert>

<update id="edit">
@@ -68,6 +70,9 @@
<if test="ray.resource != null">
resource = #{ray.resource},
</if>
<if test="ray.computingResourceId != null">
computing_resource_id = #{ray.computingResourceId},
</if>
<if test="ray.updateBy != null and ray.updateBy !=''">
update_by = #{ray.updateBy},
</if>


+ 1
- 1
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayInsDaoMapper.xml View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.platform.mapper.RayInsDao">
<insert id="insert">
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
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},


+ 62
- 0
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ResourceOccupy.xml View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.platform.mapper.ResourceOccupyDao">
<insert id="save">
insert into resource_occupy (user_id, computing_resource_id, credit_per_hour)
values (#{resourceOccupy.userId}, #{resourceOccupy.computingResourceId}, #{resourceOccupy.creditPerHour})
</insert>

<update id="edit">
update resource_occupy
<set>
<if test="resourceOccupy.state != null">
state = #{resourceOccupy.state},
</if>
<if test="resourceOccupy.deduceLastTime != null">
deduce_last_time = #{resourceOccupy.deduceLastTime},
</if>
</set>
where id = #{resourceOccupy.id}
</update>

<update id="deduceCredit">
update sys_user
set credit = credit - #{credit}
where user_id = #{userId}
</update>

<update id="updateUsed">
update resource
set used = used + #{used}
where id = #{id}
</update>

<update id="updateUnUsed">
update resource
set used = used - #{used}
where id = #{id}
</update>

<select id="haveResource" resultType="java.lang.Boolean">
select case when used + #{need} &lt;= total then TRUE else FALSE end
from resource
where id = #{id}
</select>

<select id="getResourceOccupyByTask" resultType="com.ruoyi.platform.domain.ResourceOccupy">
select *
from resource_occupy
where task_type = #{task_type}
and task_id = #{task_id}
</select>

<select id="count" resultType="java.lang.Long">
select count(1) resource_occupy
</select>

<select id="queryByPage" resultType="com.ruoyi.platform.domain.ResourceOccupy">
select *
from resource_occupy
order by start_time desc limit #{pageable.offset}, #{pageable.pageSize}
</select>
</mapper>

+ 5
- 0
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ServiceDaoMapper.xml View File

@@ -84,6 +84,11 @@
where service_id = #{serviceId} and version = #{version} and state = 1
</select>

<select id="getRunning" resultType="com.ruoyi.platform.domain.ServiceVersion">
select *
from service_version where state = 1 and run_state = 'Running'
</select>

<insert id="insertService" keyProperty="id" useGeneratedKeys="true">
insert into service(service_name, service_type, description, create_by, update_by)
values (#{service.serviceName}, #{service.serviceType}, #{service.description}, #{service.createBy}, #{service.updateBy})


+ 8
- 3
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml View File

@@ -25,6 +25,7 @@
<result property="remark" column="remark"/>
<result property="gitLinkUsername" column="git_link_username"/>
<result property="gitLinkPassword" column="git_link_password"/>
<result property="credit" column="credit"/>
<association property="dept" javaType="SysDept" resultMap="deptResult"/>
<collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
</resultMap>
@@ -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 @@

<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status,
u.git_link_username,
u.git_link_username, u.credit,
u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
@@ -123,7 +125,7 @@
</select>

<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time, u.git_link_username
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time, u.credit, u.git_link_username
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
@@ -140,7 +142,7 @@
</select>

<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time ,u.git_link_username
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time , u.credit, u.git_link_username
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
@@ -212,6 +214,7 @@
<if test="remark != null and remark != ''">remark,</if>
<if test="gitLinkUsername != null and gitLinkUsername != ''">git_link_username,</if>
<if test="gitLinkPassword != null and gitLinkPassword != ''">git_link_password,</if>
<if test="credit != null">credit,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
@@ -228,6 +231,7 @@
<if test="remark != null and remark != ''">#{remark},</if>
<if test="gitLinkUsername != null and gitLinkUsername != ''">#{gitLinkUsername},</if>
<if test="gitLinkPassword != null and gitLinkPassword != ''">#{gitLinkPassword},</if>
<if test="credit != null">#{credit},</if>
sysdate()
)
</insert>
@@ -250,6 +254,7 @@
<if test="remark != null">remark = #{remark},</if>
<if test="gitLinkUsername != null and gitLinkUsername != ''">git_link_username = #{gitLinkUsername},</if>
<if test="gitLinkPassword != null and gitLinkPassword != ''">git_link_password = #{gitLinkPassword},</if>
<if test="credit != null">credit = #{credit},</if>
update_time = sysdate()
</set>
where user_id = #{userId}


Loading…
Cancel
Save