Browse Source

更新可视化列表显示

Zhangvinjo 3 years ago
parent
commit
3f9e8382dd

+ 38 - 5
src/main/java/io/renren/common/utils/ArgoUtils.java

@@ -6,14 +6,12 @@ import io.argoproj.workflow.Configuration;
 import io.argoproj.workflow.JSON;
 import io.argoproj.workflow.apis.WorkflowServiceApi;
 import io.argoproj.workflow.apis.WorkflowTemplateServiceApi;
-import io.argoproj.workflow.models.Workflow;
-import io.argoproj.workflow.models.WorkflowSubmitRequest;
-import io.argoproj.workflow.models.WorkflowTemplate;
-import io.argoproj.workflow.models.WorkflowTemplateCreateRequest;
+import io.argoproj.workflow.models.*;
 import lombok.extern.slf4j.Slf4j;
 
 import io.argoproj.workflow.ApiClient;
 //import org.apache.http.client.HttpClient;
+import org.apache.commons.httpclient.Header;
 import org.apache.commons.httpclient.protocol.Protocol;
 import org.springframework.beans.factory.annotation.Value;
 
@@ -48,6 +46,8 @@ public class ArgoUtils {
     private static String sparkMasterRest;
     private static String sparkMaster;
     private static String sparkHdfsurl;
+    private static String sparkYarnAddress;
+    private static String sparkYarnJARS;
 //    private static MinioClient minioClient;
 //    private static String endpoint;
 //    private static String accessKey;
@@ -69,7 +69,7 @@ public class ArgoUtils {
      * @param sparkMaster Spark访问地址
      * @param sparkHdfsurl 与spatk关联的Hdfs访问地址
      */
-    public ArgoUtils(String basepath, String minioendpoint, String minioAccesskey, String minioSecretkey,String sparkMasterRest,String sparkMaster,String sparkHdfsurl) {
+    public ArgoUtils(String basepath, String minioendpoint, String minioAccesskey, String minioSecretkey,String sparkMasterRest,String sparkMaster,String sparkHdfsurl,String sparkYarnAddress, String sparkYarnJARS) {
         ArgoUtils.basepath = basepath;
         ArgoUtils.minioendpoint = minioendpoint;
         ArgoUtils.minioAccesskey = minioAccesskey;
@@ -78,6 +78,8 @@ public class ArgoUtils {
         ArgoUtils.sparkMasterRest = sparkMasterRest;
         ArgoUtils.sparkMaster = sparkMaster;
         ArgoUtils.sparkHdfsurl = sparkHdfsurl;
+        ArgoUtils.sparkYarnAddress = sparkYarnAddress;
+        ArgoUtils.sparkYarnJARS = sparkYarnJARS;
         createArgoApiClient();
     }
 
@@ -144,6 +146,22 @@ public class ArgoUtils {
         ArgoUtils.sparkHdfsurl = sparkHdfsurl;
     }
 
+    public static String getSparkYarnAddress() {
+        return sparkYarnAddress;
+    }
+
+    public static void setSparkYarnAddress(String sparkYarnAddress) {
+        ArgoUtils.sparkYarnAddress = sparkYarnAddress;
+    }
+
+    public static String getSparkYarnJARS() {
+        return sparkYarnJARS;
+    }
+
+    public static void setSparkYarnJARS(String sparkYarnJARS) {
+        ArgoUtils.sparkYarnJARS = sparkYarnJARS;
+    }
+
     /**
      * Description 创建minIOClient
      */
@@ -283,6 +301,21 @@ public class ArgoUtils {
         return sblog.toString();
     }
 
+    /**
+     * stop  工作流 ,最终状态为failed
+     * @param namespace 命名空间
+     * @param workflowname workflow名称
+     * @return 获取到的工作流
+     * @throws ApiException api访问异常
+     */
+    public static String stopWorkflow(String namespace,String workflowname) throws Exception {
+        WorkflowServiceApi apiInstance = new WorkflowServiceApi(apiClient);
+        WorkflowStopRequest workflowStopRequest = new WorkflowStopRequest();
+        Workflow workflow = apiInstance.workflowServiceStopWorkflow(namespace,workflowname,workflowStopRequest);
+        System.out.println("stopworkflew: "+workflow.getStatus().getPhase());
+        return workflow.getStatus().getPhase();
+    }
+
 
     /**
      * httpClient的get请求方式

+ 7 - 1
src/main/java/io/renren/config/ArgoConfig.java

@@ -34,13 +34,19 @@ public class ArgoConfig {
     @Value("${argo.sparkHdfsurl}")
     private String sparkHdfsurl;
 
+    @Value("${argo.sparkYarnAddress}")
+    private String sparkYarnAddress;
+    @Value("${argo.sparkYarnJARS}")
+    private String sparkYarnJARS;
+
+
     /**
      * 创建Argo apiclient
      * @return ArgoUtils
      */
     @Bean
     public ArgoUtils createArgoApiClient(){
-        return new ArgoUtils(basePath,minioendpoint,minioAccesskey,minioSecretkey,sparkMasterRest,sparkMaster,sparkHdfsurl);
+        return new ArgoUtils(basePath,minioendpoint,minioAccesskey,minioSecretkey,sparkMasterRest,sparkMaster,sparkHdfsurl,sparkYarnAddress,sparkYarnJARS);
     }
 
 

+ 85 - 6
src/main/java/io/renren/modules/sys/controller/VisiWorkflowController.java

@@ -3,6 +3,7 @@ package io.renren.modules.sys.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.argoproj.workflow.ApiException;
 import io.argoproj.workflow.models.*;
 import io.kubernetes.client.openapi.apis.CoreV1Api;
@@ -28,6 +29,8 @@ import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static io.renren.common.utils.ShiroUtils.getUserId;
+
 /**
  * 工作流提交及查询
  *
@@ -53,10 +56,25 @@ public class VisiWorkflowController extends AbstractController {
     @RequestMapping("/list")
 //    @RequiresPermissions("visi:visiworkflow:list")
     public R list(@RequestParam Map<String, Object> params) {
-        PageUtils page = visiWorkflowService.queryPage(params);
+//        PageUtils page = visiWorkflowService.queryPage(params);
+        //只有超级管理员,才能查看所有模板列表
+        if(getUserId() != Constant.SUPER_ADMIN){
+            params.put("currentUserId", getUserId());
+        }
+        PageUtils page = visiWorkflowService.queryPageOnUse(params);
 
         return R.ok().put("page", page);
     }
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+//    @RequiresPermissions("generator:visiworkflow:delete")
+    public R delete(@RequestBody Long[] workflowIds){
+        visiWorkflowService.removeByIds(Arrays.asList(workflowIds));
+
+        return R.ok();
+    }
 
     /**
      * 保存
@@ -204,11 +222,26 @@ public class VisiWorkflowController extends AbstractController {
     /**
      * 创建WorkflowTemplate,提交Workflow
      *
-     * @param jsonObject 前端画布数据
+     * @param  params
      * @return 提示信息
      */
     @RequestMapping("/submit")
-    public R Submit(@RequestBody JSONObject jsonObject) {
+//    public R Submit(@RequestBody JSONObject jsonObject) {
+    public R Submit(@RequestBody Map<String, Object> params) {
+        System.out.println(params.toString());
+        System.out.println(params.get("addorupdate"));
+        Boolean addorupdate = (Boolean) params.get("addorupdate");
+        System.out.println("//true表示update,新增  false表示add "+ addorupdate);
+        Long  workflowId = null;
+        if(addorupdate){
+            workflowId = Long.parseLong(params.get("workflowId").toString());//工作流名称
+        }
+
+        String experimentName = params.get("experimentName").toString();
+        //true表示update,新增  false表示add
+
+        Object graphJson = params.get("graphJson");
+        JSONObject jsonObject = JSONObject.parseObject(graphJson.toString());
         //连接argo
         //创建Workflowtemplate
 
@@ -335,6 +368,15 @@ public class VisiWorkflowController extends AbstractController {
                 envvarsparkhdfsurl.setValue(ArgoUtils.getSparkHdfsurl());
                 envlist.add(envvarsparkhdfsurl);
 
+                V1EnvVar envvarsparkYarnAddress = new V1EnvVar();
+                envvarsparkYarnAddress.setName("SPARKYARNADDRESS");
+                envvarsparkYarnAddress.setValue(ArgoUtils.getSparkYarnAddress());
+                envlist.add(envvarsparkYarnAddress);
+                V1EnvVar envvarsparkYarnJARS = new V1EnvVar();
+                envvarsparkYarnJARS.setName("SPARKYARNJARS");
+                envvarsparkYarnJARS.setValue(ArgoUtils.getSparkYarnJARS());
+                envlist.add(envvarsparkYarnJARS);
+
 
                 JSONArray inputsparameters = rectdata.getJSONArray("inputsparameters");
 //                List<String> inputsparam = new LinkedList<String>();
@@ -786,10 +828,19 @@ public class VisiWorkflowController extends AbstractController {
         VisiWorkflowEntity visiWorkflow = new VisiWorkflowEntity();
         visiWorkflow.setUserId(ShiroUtils.getUserEntity().getUserId());
         visiWorkflow.setGraphJson(jsonObject.toJSONString());
-        visiWorkflow.setExperimentName("");
+        visiWorkflow.setExperimentName(experimentName);
         visiWorkflow.setWorkflowtempName(workflowTempname);
         visiWorkflow.setWorkflowName(resultWorkflowname);
-        visiWorkflowService.save(visiWorkflow);
+        if(addorupdate){
+            //修改
+            visiWorkflow.setWorkflowId(workflowId);
+            visiWorkflowService.updateById(visiWorkflow);
+        }else{
+            boolean save = visiWorkflowService.save(visiWorkflow);
+//            System.out.println("新增的主键"+visiWorkflow.getWorkflowId());
+            workflowId = visiWorkflow.getWorkflowId();
+        }
+
 
 //        //保存 节点id 与 templatename 对应关系
 //        VisiNodeidtemplateMapService visiNodeidtemplateMapService = null;
@@ -807,7 +858,7 @@ public class VisiWorkflowController extends AbstractController {
 //        }
 
 
-        return R.ok().put("workflowName", resultWorkflowname).put("idTemplateNameMap", idTemplateNameMap);
+        return R.ok().put("workflowName", resultWorkflowname).put("idTemplateNameMap", idTemplateNameMap).put("workflowId", workflowId);
 //                put("workflowContent",workflowcontent).put("podlogs",idpodlogs);
 
 
@@ -941,6 +992,7 @@ public class VisiWorkflowController extends AbstractController {
     //应用JSONObject接收数据
 
     /**
+     * 当前使用
      * 获取workflow日志
      *
      * @param params workflow名称及节点映射关系
@@ -1101,6 +1153,7 @@ public class VisiWorkflowController extends AbstractController {
     //应用JSONObject接收数据
 
     /**
+     * 当前应用
      * 根据workflow名称,获取workflown内容,获取 pod 日志
      *
      * @param params workflow名称及节点映射关系
@@ -1331,6 +1384,32 @@ public class VisiWorkflowController extends AbstractController {
 
     }
 
+    /**
+     * stop  workflow
+     *
+     * @param params workflow名称
+     * @return workflow执行状态
+     *
+     */
+    @RequestMapping("/stopworkflow")
+    public R Stopworkflow(@RequestBody Map<String, Object> params) {
+        Object workflowName = params.get("workflowName");//工作流名称
+        System.out.println("workflowname ");
+        System.out.println(workflowName);
+
+        String namespace = "argo";
+        String statusPhase = "";
+        try {
+            statusPhase = ArgoUtils.stopWorkflow(namespace, workflowName.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Workflow successworkflow;
+
+        return R.ok().put("statusPhase", statusPhase);
+
+    }
+
 
     //应用JSONObject接收数据
 

+ 11 - 0
src/main/java/io/renren/modules/sys/dao/VisiWorkflowDao.java

@@ -1,8 +1,15 @@
 package io.renren.modules.sys.dao;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import io.renren.modules.sys.entity.VisiWorkflowEntity;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import io.renren.modules.sys.entity.algs.AlgTrain_Vo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * 工作流
@@ -13,5 +20,9 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface VisiWorkflowDao extends BaseMapper<VisiWorkflowEntity> {
+    @Select("SELECT a.*, b.username FROM visi_workflow a LEFT JOIN sys_user b ON a.user_id = b.user_id ${ew.customSqlSegment}")
+    List<VisiWorkflowEntity> getWorkflowInfo(@Param(Constants.WRAPPER) Wrapper wrapper);
 
+    @Select("SELECT a.*, b.username FROM visi_workflow a sys_user b WHERE a.user_id = b.user_id and a.user_id = #{id,jdbcType=BIGINT}")
+    List<VisiWorkflowEntity> getWorkflowInfoById(@Param("id") Long id);
 }

+ 3 - 0
src/main/java/io/renren/modules/sys/service/VisiWorkflowService.java

@@ -16,5 +16,8 @@ import java.util.Map;
 public interface VisiWorkflowService extends IService<VisiWorkflowEntity> {
 
     PageUtils queryPage(Map<String, Object> params);
+
+
+    PageUtils queryPageOnUse(Map<String, Object> params);
 }
 

+ 56 - 0
src/main/java/io/renren/modules/sys/service/impl/VisiWorkflowServiceImpl.java

@@ -1,6 +1,12 @@
 package io.renren.modules.sys.service.impl;
 
+import io.renren.modules.sys.entity.algs.Algorithm_Vo;
+import io.renren.modules.sys.service.CategoryService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 import java.util.Map;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -16,6 +22,11 @@ import io.renren.modules.sys.service.VisiWorkflowService;
 @Service("visiWorkflowService")
 public class VisiWorkflowServiceImpl extends ServiceImpl<VisiWorkflowDao, VisiWorkflowEntity> implements VisiWorkflowService {
 
+    @Autowired
+    VisiWorkflowDao visiWorkflowDao;
+//    @Autowired
+//    CategoryService categoryService;
+
     @Override
     public PageUtils queryPage(Map<String, Object> params) {
         IPage<VisiWorkflowEntity> page = this.page(
@@ -26,4 +37,49 @@ public class VisiWorkflowServiceImpl extends ServiceImpl<VisiWorkflowDao, VisiWo
         return new PageUtils(page);
     }
 
+    //获取模板列表,使用的是@select连表查询
+    //但是怎么把搜索功能加进去呢????
+    @Override
+    public PageUtils queryPageOnUse(Map<String, Object> params) {
+        //获取搜索框搜索的模板名称.
+        String experimentName = (String)params.get("experimentName");
+//        String classificationtag = (String)params.get("classificationtag");
+
+//        Long categoryId = categoryService.getByName(classificationtag);
+        //获取当前登录的用户,如果是管理员的话,uid就为null
+        Long uid = (Long) params.get("currentUserId");
+        System.out.println("uid: "+ uid);
+        List<VisiWorkflowEntity> workflowInfo;
+        List<VisiWorkflowEntity> workflowAllInfo;
+        int pageSize = Integer.valueOf((String) params.get("limit"));
+        int pageIndex = Integer.valueOf((String) params.get("page"));
+
+//        此方法如果修改,则也需要修改下面的获取总页数的方法
+        workflowInfo =visiWorkflowDao.getWorkflowInfo(new QueryWrapper<VisiWorkflowEntity>()
+                        .like(StringUtils.isNotBlank(experimentName), "experiment_name", experimentName)
+                        //根据登录的用户展示他自己的模板
+                        .eq(uid != null, "a.user_id", uid)
+                        .orderByDesc("workflow_id")
+//                使用limit用于分页,下面的函数没有limit进行分页
+                        .last("limit " + (pageIndex - 1) * pageSize + "," + pageSize + ";")
+
+        );
+
+        //用于查全部,获取总页数。
+        workflowAllInfo = visiWorkflowDao.getWorkflowInfo(new QueryWrapper<VisiWorkflowEntity>()
+                .like(StringUtils.isNotBlank(experimentName), "experiment_name", experimentName)
+                //根据登录的用户展示他自己的模板
+                .eq(uid != null, "a.user_id", uid)
+        );
+
+//        for (VisiWorkflowEntity visiWorkflowEntity : workflowInfo) {
+//            vo.setCategoryName(categoryService.getById(vo.getCategoryId()).getCategoryName());
+//        }
+
+        //弃用的方法
+        //这个方法:根据当前登录的用户id返回只有当前用户的数据,但是没有结合搜索框搜索
+        //templateInfo = algorithmTemplateVoMapper.getTemplateInfoById(uid);
+        return new PageUtils(workflowInfo, workflowAllInfo.size(), pageSize, pageIndex);
+
+    }
 }