refactor(系统设置): 接口测试插件支持存入MinIO
This commit is contained in:
parent
eefd3a9512
commit
8172ff4734
|
@ -7,10 +7,14 @@ import io.metersphere.base.domain.PluginExample;
|
||||||
import io.metersphere.base.domain.PluginWithBLOBs;
|
import io.metersphere.base.domain.PluginWithBLOBs;
|
||||||
import io.metersphere.base.mapper.PluginMapper;
|
import io.metersphere.base.mapper.PluginMapper;
|
||||||
import io.metersphere.commons.constants.PluginScenario;
|
import io.metersphere.commons.constants.PluginScenario;
|
||||||
|
import io.metersphere.commons.constants.StorageConstants;
|
||||||
import io.metersphere.commons.utils.BeanUtils;
|
import io.metersphere.commons.utils.BeanUtils;
|
||||||
import io.metersphere.commons.utils.FileUtils;
|
import io.metersphere.commons.utils.FileUtils;
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
|
import io.metersphere.metadata.service.FileManagerService;
|
||||||
|
import io.metersphere.metadata.vo.FileRequest;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
@ -27,6 +31,8 @@ import java.util.stream.Collectors;
|
||||||
public class PluginService {
|
public class PluginService {
|
||||||
@Resource
|
@Resource
|
||||||
private PluginMapper pluginMapper;
|
private PluginMapper pluginMapper;
|
||||||
|
@Resource
|
||||||
|
private FileManagerService fileManagerService;
|
||||||
|
|
||||||
private boolean isXpack(Class<?> aClass, Object instance) {
|
private boolean isXpack(Class<?> aClass, Object instance) {
|
||||||
try {
|
try {
|
||||||
|
@ -37,11 +43,17 @@ public class PluginService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean loadJar(String jarPath) {
|
private boolean loadJar(String jarPath, String pluginId) {
|
||||||
try {
|
try {
|
||||||
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
|
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
|
||||||
try {
|
try {
|
||||||
File file = new File(jarPath);
|
File file = new File(jarPath);
|
||||||
|
if (!file.exists()) {
|
||||||
|
// 从MinIO下载
|
||||||
|
if (!this.downPluginJar(jarPath, pluginId, jarPath)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -61,6 +73,18 @@ public class PluginService {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean downPluginJar(String path, String pluginId, String jarPath) {
|
||||||
|
FileRequest request = new FileRequest();
|
||||||
|
request.setProjectId(StringUtils.join(FileUtils.BODY_FILE_DIR, "/plugin", pluginId));
|
||||||
|
request.setFileName(pluginId);
|
||||||
|
request.setStorage(StorageConstants.MINIO.name());
|
||||||
|
byte[] bytes = fileManagerService.downloadFile(request);
|
||||||
|
if (ArrayUtils.isNotEmpty(bytes)) {
|
||||||
|
FileUtils.createFile(path, bytes);
|
||||||
|
}
|
||||||
|
return new File(jarPath).exists();
|
||||||
|
}
|
||||||
|
|
||||||
public void loadPlugins() {
|
public void loadPlugins() {
|
||||||
try {
|
try {
|
||||||
PluginExample example = new PluginExample();
|
PluginExample example = new PluginExample();
|
||||||
|
@ -71,7 +95,7 @@ public class PluginService {
|
||||||
-> new TreeSet<>(Comparator.comparing(Plugin::getPluginId))), ArrayList::new));
|
-> new TreeSet<>(Comparator.comparing(Plugin::getPluginId))), ArrayList::new));
|
||||||
if (CollectionUtils.isNotEmpty(plugins)) {
|
if (CollectionUtils.isNotEmpty(plugins)) {
|
||||||
plugins.forEach(item -> {
|
plugins.forEach(item -> {
|
||||||
boolean isLoad = this.loadJar(item.getSourcePath());
|
boolean isLoad = this.loadJar(item.getSourcePath(), item.getPluginId());
|
||||||
if (!isLoad) {
|
if (!isLoad) {
|
||||||
PluginExample pluginExample = new PluginExample();
|
PluginExample pluginExample = new PluginExample();
|
||||||
pluginExample.createCriteria().andPluginIdEqualTo(item.getPluginId());
|
pluginExample.createCriteria().andPluginIdEqualTo(item.getPluginId());
|
||||||
|
|
|
@ -5,14 +5,18 @@ import io.metersphere.base.domain.PluginExample;
|
||||||
import io.metersphere.base.domain.PluginWithBLOBs;
|
import io.metersphere.base.domain.PluginWithBLOBs;
|
||||||
import io.metersphere.base.mapper.PluginMapper;
|
import io.metersphere.base.mapper.PluginMapper;
|
||||||
import io.metersphere.commons.constants.PluginScenario;
|
import io.metersphere.commons.constants.PluginScenario;
|
||||||
|
import io.metersphere.commons.constants.StorageConstants;
|
||||||
import io.metersphere.commons.exception.MSException;
|
import io.metersphere.commons.exception.MSException;
|
||||||
import io.metersphere.commons.utils.BeanUtils;
|
import io.metersphere.commons.utils.BeanUtils;
|
||||||
|
import io.metersphere.commons.utils.FileUtils;
|
||||||
import io.metersphere.commons.utils.JSON;
|
import io.metersphere.commons.utils.JSON;
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
import io.metersphere.log.utils.ReflexObjectUtil;
|
import io.metersphere.log.utils.ReflexObjectUtil;
|
||||||
import io.metersphere.log.vo.DetailColumn;
|
import io.metersphere.log.vo.DetailColumn;
|
||||||
import io.metersphere.log.vo.OperatingLogDetails;
|
import io.metersphere.log.vo.OperatingLogDetails;
|
||||||
import io.metersphere.log.vo.system.SystemReference;
|
import io.metersphere.log.vo.system.SystemReference;
|
||||||
|
import io.metersphere.metadata.service.FileManagerService;
|
||||||
|
import io.metersphere.metadata.vo.FileRequest;
|
||||||
import io.metersphere.request.PluginDTO;
|
import io.metersphere.request.PluginDTO;
|
||||||
import io.metersphere.request.PluginRequest;
|
import io.metersphere.request.PluginRequest;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
@ -33,6 +37,8 @@ public class PluginService {
|
||||||
private PlatformPluginService platformPluginService;
|
private PlatformPluginService platformPluginService;
|
||||||
@Resource
|
@Resource
|
||||||
private ApiPluginService apiPluginService;
|
private ApiPluginService apiPluginService;
|
||||||
|
@Resource
|
||||||
|
private FileManagerService fileManagerService;
|
||||||
|
|
||||||
public void addPlugin(PluginWithBLOBs plugin) {
|
public void addPlugin(PluginWithBLOBs plugin) {
|
||||||
if (StringUtils.isBlank(plugin.getId())) {
|
if (StringUtils.isBlank(plugin.getId())) {
|
||||||
|
@ -91,6 +97,8 @@ public class PluginService {
|
||||||
platformPluginService.delete(id);
|
platformPluginService.delete(id);
|
||||||
} else {
|
} else {
|
||||||
// 接口传的是 pluginId
|
// 接口传的是 pluginId
|
||||||
|
FileRequest request = getRequest(id);
|
||||||
|
fileManagerService.delete(request);
|
||||||
apiPluginService.delete(id);
|
apiPluginService.delete(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,9 +127,23 @@ public class PluginService {
|
||||||
} else {
|
} else {
|
||||||
List<PluginWithBLOBs> plugins = apiPluginService.addApiPlugin(file);
|
List<PluginWithBLOBs> plugins = apiPluginService.addApiPlugin(file);
|
||||||
plugins.forEach(this::addPlugin);
|
plugins.forEach(this::addPlugin);
|
||||||
|
// 存入MinIO
|
||||||
|
if (CollectionUtils.isNotEmpty(plugins)) {
|
||||||
|
String pluginId = plugins.get(0).getPluginId();
|
||||||
|
FileRequest request = getRequest(pluginId);
|
||||||
|
fileManagerService.upload(file, request);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private FileRequest getRequest(String pluginId) {
|
||||||
|
FileRequest request = new FileRequest();
|
||||||
|
request.setProjectId(StringUtils.join(FileUtils.BODY_FILE_DIR, "/plugin", pluginId));
|
||||||
|
request.setFileName(pluginId);
|
||||||
|
request.setStorage(StorageConstants.MINIO.name());
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
public void checkPluginExist(MultipartFile file) {
|
public void checkPluginExist(MultipartFile file) {
|
||||||
String filename = file.getOriginalFilename();
|
String filename = file.getOriginalFilename();
|
||||||
PluginExample example = new PluginExample();
|
PluginExample example = new PluginExample();
|
||||||
|
@ -137,7 +159,7 @@ public class PluginService {
|
||||||
example.createCriteria().andPluginIdEqualTo(id);
|
example.createCriteria().andPluginIdEqualTo(id);
|
||||||
List<PluginWithBLOBs> plugins = pluginMapper.selectByExampleWithBLOBs(example);
|
List<PluginWithBLOBs> plugins = pluginMapper.selectByExampleWithBLOBs(example);
|
||||||
if (CollectionUtils.isNotEmpty(plugins)) {
|
if (CollectionUtils.isNotEmpty(plugins)) {
|
||||||
Plugin plugin = plugins.get(0);
|
Plugin plugin = plugins.get(0);
|
||||||
List<DetailColumn> columns = ReflexObjectUtil.getColumns(plugin, SystemReference.pluginColumns);
|
List<DetailColumn> columns = ReflexObjectUtil.getColumns(plugin, SystemReference.pluginColumns);
|
||||||
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(plugin.getId()), null, plugin.getSourceName(), plugin.getCreateUserId(), columns);
|
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(plugin.getId()), null, plugin.getSourceName(), plugin.getCreateUserId(), columns);
|
||||||
return JSON.toJSONString(details);
|
return JSON.toJSONString(details);
|
||||||
|
|
Loading…
Reference in New Issue