rasa:优化代码

dev_v1.0.1
xueqingkun 2 years ago
parent 3333877360
commit 3e553cffa7

@ -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> {
RasaModelInfo queryByModelId(String modelId);
RasaModelInfo saveOrUpdateByModelId(RasaModelInfo rasaModelInfo);
List<Integer> listActivePort();
}

@ -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<RasaModelInfoMapper,RasaModelInfo> implements RasaModeService {
@ -31,8 +35,15 @@ public class RasaModeServiceImpl extends ServiceImpl<RasaModelInfoMapper,RasaMod
if (null != dbModelInfo && StrUtil.isNotEmpty(dbModelInfo.getId())){
rasaModelInfo.setId(dbModelInfo.getId());
super.updateById(rasaModelInfo);
}else {
super.save(rasaModelInfo);
}
super.save(rasaModelInfo);
return rasaModelInfo;
}
@Override
public List<Integer> listActivePort() {
LambdaQueryChainWrapper<RasaModelInfo> queryWrapper = super.lambdaQuery().eq(RasaModelInfo::getServerStatus, "1");
return queryWrapper.list().stream().map(RasaModelInfo::getPort).collect(Collectors.toList());
}
}

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

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

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

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

@ -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<String> 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<String> cmds = ListUtil.toList(shellEnv, runShell,mPath,endpoints,argument.getPort());
List<String> 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);

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

Loading…
Cancel
Save