From 3e553cffa7a3d5c7e366b2089302e1ffeb017451 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 31 Oct 2023 17:20:54 +0800 Subject: [PATCH] =?UTF-8?q?rasa=EF=BC=9A=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supervision/service/RasaModeService.java | 5 ++++ .../service/impl/RasaModeServiceImpl.java | 13 +++++++- .../rasa/controller/RasaCmdController.java | 8 ++--- .../rasa/pojo/vo/RasaArgumentVo.java | 18 ----------- .../rasa/pojo/vo/RasaCmdArgumentVo.java | 12 ++++++++ .../rasa/service/RasaCmdService.java | 6 ++-- .../rasa/service/impl/RasaCmdServiceImpl.java | 30 +++++++------------ .../com/supervision/rasa/util/PortUtil.java | 7 ++++- 8 files changed, 53 insertions(+), 46 deletions(-) delete mode 100644 virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaArgumentVo.java create mode 100644 virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaCmdArgumentVo.java diff --git a/virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java b/virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java index fee7395d..ef825890 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java @@ -4,10 +4,15 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.supervision.model.RasaModelInfo; import sun.reflect.generics.tree.VoidDescriptor; +import java.util.List; + public interface RasaModeService extends IService { RasaModelInfo queryByModelId(String modelId); RasaModelInfo saveOrUpdateByModelId(RasaModelInfo rasaModelInfo); + + List listActivePort(); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java index cf94a66b..26a283c7 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java @@ -2,6 +2,7 @@ package com.supervision.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.exception.BusinessException; import com.supervision.mapper.RasaModelInfoMapper; @@ -9,6 +10,9 @@ import com.supervision.model.RasaModelInfo; import com.supervision.service.RasaModeService; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + @Service public class RasaModeServiceImpl extends ServiceImpl implements RasaModeService { @@ -31,8 +35,15 @@ public class RasaModeServiceImpl extends ServiceImpl listActivePort() { + LambdaQueryChainWrapper queryWrapper = super.lambdaQuery().eq(RasaModelInfo::getServerStatus, "1"); + return queryWrapper.list().stream().map(RasaModelInfo::getPort).collect(Collectors.toList()); + } } diff --git a/virtual-patient-rasa/src/main/java/com/supervision/rasa/controller/RasaCmdController.java b/virtual-patient-rasa/src/main/java/com/supervision/rasa/controller/RasaCmdController.java index 5bdf2db7..9939d41b 100644 --- a/virtual-patient-rasa/src/main/java/com/supervision/rasa/controller/RasaCmdController.java +++ b/virtual-patient-rasa/src/main/java/com/supervision/rasa/controller/RasaCmdController.java @@ -1,7 +1,7 @@ package com.supervision.rasa.controller; import cn.hutool.core.util.StrUtil; -import com.supervision.rasa.pojo.vo.RasaArgumentVo; +import com.supervision.rasa.pojo.vo.RasaCmdArgumentVo; import com.supervision.rasa.service.RasaCmdService; import com.supervision.exception.BusinessException; import io.swagger.annotations.Api; @@ -22,7 +22,7 @@ public class RasaCmdController { @ApiOperation("执行训练shell命令") @PostMapping("/trainExec") - public String trainExec(@RequestBody RasaArgumentVo argument) throws IOException, ExecutionException, InterruptedException, TimeoutException { + public String trainExec(@RequestBody RasaCmdArgumentVo argument) throws IOException, ExecutionException, InterruptedException, TimeoutException { if (StrUtil.isEmpty(argument.getFixedModelName())){ throw new BusinessException("fixedModelName参数不能为空!"); @@ -38,7 +38,7 @@ public class RasaCmdController { @ApiOperation("执行启动shell命令") @PostMapping("/runExec") - public String runExec(@RequestBody RasaArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { + public String runExec(@RequestBody RasaCmdArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { if (StrUtil.isEmpty(argument.getFixedModelName())){ throw new BusinessException("fixedModelName参数不能为空!"); @@ -57,7 +57,7 @@ public class RasaCmdController { @ApiOperation("执行启动shell命令") @PostMapping("/test") - public String test(@RequestBody RasaArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { + public String test(@RequestBody RasaCmdArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { rasaCmdService.test(); diff --git a/virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaArgumentVo.java b/virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaArgumentVo.java deleted file mode 100644 index f45f8827..00000000 --- a/virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaArgumentVo.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.supervision.rasa.pojo.vo; - -import lombok.Data; - -@Data -public class RasaArgumentVo { - - private String config; - private String data; - private String domain; - private String out; - private String fixedModelName;//fixed-model-name - private String enableApi;//enable-api - private String endpoints; - private String port; - private String modelId; - -} diff --git a/virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaCmdArgumentVo.java b/virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaCmdArgumentVo.java new file mode 100644 index 00000000..719c9878 --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/supervision/rasa/pojo/vo/RasaCmdArgumentVo.java @@ -0,0 +1,12 @@ +package com.supervision.rasa.pojo.vo; + +import lombok.Data; + +@Data +public class RasaCmdArgumentVo { + + private String fixedModelName;//fixed-model-name + + private String modelId; + +} diff --git a/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/RasaCmdService.java b/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/RasaCmdService.java index fca00ca2..51f4b10e 100644 --- a/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/RasaCmdService.java +++ b/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/RasaCmdService.java @@ -1,6 +1,6 @@ package com.supervision.rasa.service; -import com.supervision.rasa.pojo.vo.RasaArgumentVo; +import com.supervision.rasa.pojo.vo.RasaCmdArgumentVo; import java.io.IOException; import java.util.concurrent.ExecutionException; @@ -8,9 +8,9 @@ import java.util.concurrent.TimeoutException; public interface RasaCmdService { - String trainExec(RasaArgumentVo argument) throws IOException, ExecutionException, InterruptedException, TimeoutException; + String trainExec(RasaCmdArgumentVo argument) throws IOException, ExecutionException, InterruptedException, TimeoutException; - String runExec( RasaArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException; + String runExec( RasaCmdArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException; void test(); diff --git a/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java b/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java index a202b365..ef6effd1 100644 --- a/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java +++ b/virtual-patient-rasa/src/main/java/com/supervision/rasa/service/impl/RasaCmdServiceImpl.java @@ -5,7 +5,7 @@ import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import com.supervision.model.RasaModelInfo; import com.supervision.rasa.config.ThreadPoolExecutorConfig; -import com.supervision.rasa.pojo.vo.RasaArgumentVo; +import com.supervision.rasa.pojo.vo.RasaCmdArgumentVo; import com.supervision.rasa.service.RasaCmdService; import com.supervision.rasa.util.PortUtil; import com.supervision.service.RasaModeService; @@ -59,7 +59,7 @@ public class RasaCmdServiceImpl implements RasaCmdService { @Override @Transactional - public String trainExec(RasaArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { + public String trainExec(RasaCmdArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { String domain = dataPath+"domain.yml"; List cmds = ListUtil.toList(shellEnv, trainShell,config,dataPath,domain,modelsPath); @@ -82,24 +82,16 @@ public class RasaCmdServiceImpl implements RasaCmdService { @Override - public String runExec(RasaArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { - - - // 1. 查找模型信息是否为空 - RasaModelInfo dbRasaModelInfo = rasaModeService.queryByModelId(argument.getModelId()); - int unusedPort; - if (null == dbRasaModelInfo || null == dbRasaModelInfo.getPort()){ - unusedPort = PortUtil.findUnusedPort(5050, 100000); - log.info("runExec findUnusedPort is : {}",unusedPort); - argument.setPort(String.valueOf(unusedPort)); - }else { - argument.setPort(String.valueOf(dbRasaModelInfo.getPort())); - // todo:杀掉该端口对应的进程 - } + public String runExec(RasaCmdArgumentVo argument) throws ExecutionException, InterruptedException, TimeoutException { + + + // 1. 查找可用端口 + int port = PortUtil.findUnusedPort(5050, 100000,rasaModeService.listActivePort()); + log.info("runExec findUnusedPort is : {}",port); // 2. 运行模型 String mPath = modelsPath+argument.getFixedModelName()+".tar.gz"; - List cmds = ListUtil.toList(shellEnv, runShell,mPath,endpoints,argument.getPort()); + List cmds = ListUtil.toList(shellEnv, runShell,mPath,endpoints,String.valueOf(port)); log.info("runExec cmd : {}",StrUtil.join(" ",cmds)); @@ -108,7 +100,7 @@ public class RasaCmdServiceImpl implements RasaCmdService { // 3. 更新模型信息 RasaModelInfo rasaModelInfo = new RasaModelInfo(); rasaModelInfo.setModelId(argument.getModelId()); - rasaModelInfo.setPort(0); + rasaModelInfo.setPort(port); rasaModelInfo.setServerStatus(runIsSuccess(outMessageList)?1:0); rasaModeService.saveOrUpdateByModelId(rasaModelInfo); @@ -147,7 +139,7 @@ public class RasaCmdServiceImpl implements RasaCmdService { } } bufferedReader.close(); - return outString; + return new ArrayList<>(); }); return future.get(timeOut, TimeUnit.SECONDS); diff --git a/virtual-patient-rasa/src/main/java/com/supervision/rasa/util/PortUtil.java b/virtual-patient-rasa/src/main/java/com/supervision/rasa/util/PortUtil.java index 20d13635..f946bdad 100644 --- a/virtual-patient-rasa/src/main/java/com/supervision/rasa/util/PortUtil.java +++ b/virtual-patient-rasa/src/main/java/com/supervision/rasa/util/PortUtil.java @@ -1,10 +1,12 @@ package com.supervision.rasa.util; +import cn.hutool.core.collection.CollectionUtil; import jdk.nashorn.internal.runtime.regexp.JoniRegExp; import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.net.Socket; +import java.util.List; import java.util.TreeMap; import java.util.function.Predicate; @@ -24,13 +26,16 @@ public class PortUtil { } - public static int findUnusedPort(int minPort,int maxPort){ + public static int findUnusedPort(int minPort, int maxPort, List excludePorts){ if (maxPort < minPort){ return -1; } for (int port = minPort; port < maxPort; port++) { + if (CollectionUtil.isNotEmpty(excludePorts)&& excludePorts.contains(port)){ + continue; + } if (!portIsActive(port)){ return port; }