aflCrashesAnalyzer信息查询接口
This commit is contained in:
parent
a79ab4ca17
commit
9bd66db9e9
@ -0,0 +1,33 @@
|
||||
package cd.casic.ci.process.dto.resp.aflCrashesAnalyzer;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import org.apache.ibatis.type.JdbcType;
|
||||
|
||||
@Data
|
||||
public class AflCrashesAnalyzerListResp {
|
||||
private String id;
|
||||
private String crashName;
|
||||
private String signId;
|
||||
private String pipelineHistoryId;
|
||||
private String pipelineId;
|
||||
private String taskId;
|
||||
/**
|
||||
* 信号名称
|
||||
* */
|
||||
private String signalName;
|
||||
/**
|
||||
* 信号简析
|
||||
* */
|
||||
private String briefDesc;
|
||||
/**
|
||||
* 信号详解
|
||||
* */
|
||||
private String detailDesc;
|
||||
/**
|
||||
* 常见场景
|
||||
* */
|
||||
private String commonScenarios;
|
||||
}
|
@ -17,6 +17,7 @@ import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
|
||||
import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance;
|
||||
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||
import cd.casic.ci.process.process.service.pipeline.PipelineService;
|
||||
import cd.casic.ci.process.util.snowflake.SnowflakeIdentifierGenerator;
|
||||
import cd.casic.framework.commons.exception.ServiceException;
|
||||
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
||||
import cd.casic.framework.security.core.LoginUser;
|
||||
@ -52,6 +53,8 @@ public class DefaultRunContextManager implements RunContextManager {
|
||||
private PipelineService pipelineService;
|
||||
@Resource
|
||||
private PostHandlerManager postHandlerManager;
|
||||
@Resource
|
||||
private SnowflakeIdentifierGenerator idWork;
|
||||
|
||||
@Override
|
||||
public Boolean stopPipeline(String pipelineId) {
|
||||
|
@ -117,7 +117,7 @@ public class AFLWorker extends DockerWorker {
|
||||
}
|
||||
localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE, statusCode);
|
||||
afterTaskExecute(context);
|
||||
afterPipelineExecute(context,pipeline,resourceById,allDir+"/aflCrash");
|
||||
afterPipelineExecute(context,pipeline,resourceById,AFL_VOLUME_WORK_DIR_PREFIX+File.separator + workDir+"/aflCrash");
|
||||
}
|
||||
}
|
||||
private String cdSourceName(String fileName){
|
||||
|
@ -0,0 +1,16 @@
|
||||
package cd.casic.ci.process.process.converter;
|
||||
|
||||
import cd.casic.ci.process.dto.resp.aflCrashesAnalyzer.AflCrashesAnalyzerListResp;
|
||||
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.AflCrashesAnalyzerInfo;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.NullValuePropertyMappingStrategy;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring",nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
|
||||
public interface AflCrashesAnalyzerConverter {
|
||||
AflCrashesAnalyzerConverter INSTANCE = Mappers.getMapper(AflCrashesAnalyzerConverter.class);
|
||||
AflCrashesAnalyzerListResp converter(AflCrashesAnalyzerInfo info);
|
||||
List<AflCrashesAnalyzerListResp> converter(List<AflCrashesAnalyzerInfo> info);
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package cd.casic.ci.process.process.dao.aflCrashAnalyzer;
|
||||
|
||||
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.AflAnalyzerCrashesInfo;
|
||||
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.AflCrashesAnalyzerInfo;
|
||||
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
|
||||
|
||||
public interface AflAnalyzerCrashesInfoDao extends BaseMapperX<AflAnalyzerCrashesInfo> {
|
||||
public interface AflCrashesAnalyzerInfoDao extends BaseMapperX<AflCrashesAnalyzerInfo> {
|
||||
}
|
@ -4,15 +4,16 @@ import cd.casic.framework.commons.dataobject.BaseDO;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.apache.ibatis.type.JdbcType;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class AflAnalyzerCrashesInfo extends BaseDO {
|
||||
@TableName("afl_crashes_analyzer_info")
|
||||
public class AflCrashesAnalyzerInfo extends BaseDO {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private String id;
|
||||
private String crashName;
|
@ -1,7 +1,11 @@
|
||||
package cd.casic.ci.process.process.service.aflAnalyzer;
|
||||
|
||||
import cd.casic.ci.process.dto.resp.aflCrashesAnalyzer.AflCrashesAnalyzerListResp;
|
||||
import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
|
||||
import cd.casic.framework.commons.pojo.PageParam;
|
||||
import cd.casic.framework.commons.pojo.PageResult;
|
||||
|
||||
public interface AflCrashesAnalyzerService {
|
||||
PageResult<AflCrashesAnalyzerListResp> getCrashesPageList(PageParam page);
|
||||
public void saveCrashesByOutputPath(String outputPath, ResourceDetailResp resourceDetailResp, String pipelineId, String taskId, String pipelineHistoryId);
|
||||
}
|
||||
|
@ -1,14 +1,19 @@
|
||||
package cd.casic.ci.process.process.service.aflAnalyzer.impl;
|
||||
|
||||
import cd.casic.ci.process.dto.resp.aflCrashesAnalyzer.AflCrashesAnalyzerListResp;
|
||||
import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
|
||||
import cd.casic.ci.process.process.dao.aflCrashAnalyzer.AflAnalyzerCrashesInfoDao;
|
||||
import cd.casic.ci.process.process.converter.AflCrashesAnalyzerConverter;
|
||||
import cd.casic.ci.process.process.dao.aflCrashAnalyzer.AflCrashesAnalyzerInfoDao;
|
||||
import cd.casic.ci.process.process.dao.aflCrashAnalyzer.LinuxSignalsDao;
|
||||
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.AflAnalyzerCrashesInfo;
|
||||
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.AflCrashesAnalyzerInfo;
|
||||
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.LinuxSignals;
|
||||
import cd.casic.ci.process.process.service.aflAnalyzer.AflCrashesAnalyzerService;
|
||||
import cd.casic.framework.commons.pojo.PageParam;
|
||||
import cd.casic.framework.commons.pojo.PageResult;
|
||||
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
|
||||
import cd.casic.module.machine.utils.CryptogramUtil;
|
||||
import com.amazonaws.util.IOUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.jcraft.jsch.*;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -32,11 +37,30 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
||||
@Resource
|
||||
private LinuxSignalsDao signalsMapper;
|
||||
@Resource
|
||||
private AflAnalyzerCrashesInfoDao crashesInfoDao;
|
||||
private AflCrashesAnalyzerInfoDao crashesInfoDao;
|
||||
@Resource
|
||||
private AflCrashesAnalyzerConverter converter;
|
||||
public PageResult<AflCrashesAnalyzerListResp> getCrashesPageList(PageParam page){
|
||||
LambdaQueryWrapper<AflCrashesAnalyzerInfo> wrapper = new LambdaQueryWrapper<>();
|
||||
PageResult<AflCrashesAnalyzerInfo> infoPage = crashesInfoDao.selectPage(page, wrapper);
|
||||
List<LinuxSignals> linuxSignals = signalsMapper.selectList();
|
||||
Map<String, LinuxSignals> signMap = linuxSignals.stream().collect(Collectors.toMap(LinuxSignals::getId, Function.identity()));
|
||||
List<AflCrashesAnalyzerInfo> list = infoPage.getList();
|
||||
List<AflCrashesAnalyzerListResp> respList = converter.converter(list);
|
||||
respList.forEach(item ->{
|
||||
LinuxSignals signal = signMap.get(item.getSignId());
|
||||
item.setBriefDesc(signal.getBriefDesc());
|
||||
item.setDetailDesc(signal.getDetailDesc());
|
||||
item.setSignalName(signal.getSignalName());
|
||||
item.setCommonScenarios(signal.getCommonScenarios());
|
||||
});
|
||||
return new PageResult<AflCrashesAnalyzerListResp>(respList,infoPage.getTotal(), infoPage.getPageNum(), infoPage.getPageSize());
|
||||
}
|
||||
@Override
|
||||
public void saveCrashesByOutputPath(String outputPath, ResourceDetailResp resource, String pipelineId, String taskId, String pipelineHistoryId) {
|
||||
log.info("afl-crash-analyzer信息入库开始执行:{},{},{},{}",outputPath,pipelineId,taskId,pipelineHistoryId);
|
||||
MachineInfoDO machineInfo = resource.getMachineInfo();
|
||||
List<AflAnalyzerCrashesInfo> dbList= new LinkedList<>();
|
||||
List<AflCrashesAnalyzerInfo> dbList= new LinkedList<>();
|
||||
try {
|
||||
JSch jsch = new JSch();
|
||||
Session session = jsch.getSession(machineInfo.getUsername(),machineInfo.getHostIp(), machineInfo.getSshPort());
|
||||
@ -48,7 +72,7 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
||||
channel.connect();
|
||||
ChannelSftp sftpChannel = (ChannelSftp) channel;
|
||||
|
||||
String fullOutputPath = outputPath + File.separator + "per-signal";
|
||||
String fullOutputPath = outputPath + "/per-signal";
|
||||
Vector<ChannelSftp.LsEntry> files = sftpChannel.ls(fullOutputPath);
|
||||
List<LinuxSignals> linuxSignals = signalsMapper.selectList();
|
||||
Map<String, LinuxSignals> signCodeMap = linuxSignals.stream().collect(Collectors.toMap(LinuxSignals::getId, Function.identity()));
|
||||
@ -62,14 +86,15 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
||||
log.error("未识别信号类型");
|
||||
continue;
|
||||
}
|
||||
String crashesTypes = fullOutputPath + File.separator + sign.getId();
|
||||
String crashesTypes = fullOutputPath + "/" + sign.getId();
|
||||
// 查找crashes 的分类下的crashes
|
||||
Vector<ChannelSftp.LsEntry> crashes = sftpChannel.ls(crashesTypes);
|
||||
for (ChannelSftp.LsEntry crashe : crashes) {
|
||||
String crashFilename = crashe.getFilename();
|
||||
if (!crashe.getAttrs().isDir()) {
|
||||
InputStream crashesInputStream = ((ChannelSftp) channel).get(fullOutputPath + File.separator + crashFilename);
|
||||
AflAnalyzerCrashesInfo crashesInfo = new AflAnalyzerCrashesInfo();
|
||||
System.out.println(crashesTypes + "/" + crashFilename);
|
||||
InputStream crashesInputStream = ((ChannelSftp) channel).get(crashesTypes + "/"+ crashFilename);
|
||||
AflCrashesAnalyzerInfo crashesInfo = new AflCrashesAnalyzerInfo();
|
||||
crashesInfo.setCrashName(crashe.getFilename());
|
||||
crashesInfo.setSignId(sign.getId());
|
||||
crashesInfo.setPipelineHistoryId(pipelineHistoryId);
|
||||
@ -84,7 +109,9 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!CollectionUtils.isEmpty(dbList)) {
|
||||
crashesInfoDao.insertBatch(dbList);
|
||||
}
|
||||
sftpChannel.disconnect();
|
||||
session.disconnect();
|
||||
} catch (JSchException | SftpException e) {
|
||||
@ -92,8 +119,6 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(dbList)) {
|
||||
crashesInfoDao.insertBatch(dbList);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,50 @@
|
||||
package cd.casic.server;
|
||||
|
||||
import cd.casic.ci.commons.properties.TargetFileUploadProperties;
|
||||
import cd.casic.ci.process.dto.resp.aflCrashesAnalyzer.AflCrashesAnalyzerListResp;
|
||||
import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
|
||||
import cd.casic.ci.process.process.dataObject.history.PipPipelineHisInstance;
|
||||
import cd.casic.ci.process.process.dataObject.resource.PipResourceManager;
|
||||
import cd.casic.ci.process.process.service.aflAnalyzer.AflCrashesAnalyzerService;
|
||||
import cd.casic.ci.process.process.service.history.PipelineHistoryService;
|
||||
import cd.casic.ci.process.process.service.resource.ResourceManagerService;
|
||||
import cd.casic.framework.commons.pojo.PageParam;
|
||||
import cd.casic.framework.commons.pojo.PageResult;
|
||||
import com.jcraft.jsch.*;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.web.WebAppConfiguration;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
@SpringBootTest(classes = {OpsServerApplication.class})
|
||||
@ActiveProfiles("local")
|
||||
@WebAppConfiguration
|
||||
public class AflCrashesAnalyzerTest {
|
||||
@Resource
|
||||
AflCrashesAnalyzerService crashesAnalyzerService;
|
||||
@Resource
|
||||
PipelineHistoryService historyService;
|
||||
@Resource
|
||||
ResourceManagerService resourceManagerService;
|
||||
@Test
|
||||
public void test01(){
|
||||
PipPipelineHisInstance byId = historyService.getById("743101099321462784");
|
||||
System.out.println(byId);
|
||||
ResourceDetailResp resource = resourceManagerService.findResourceDetailById("735516490182299648");
|
||||
crashesAnalyzerService.saveCrashesByOutputPath("/home/casic/706/yunqi/PIP_"+byId.getPipelineId()+"/aflCrash",resource,byId.getPipelineId(),"738805555593875459",byId.getId());
|
||||
}
|
||||
@Test
|
||||
public void test02(){
|
||||
PageResult<AflCrashesAnalyzerListResp> crashesPageList = crashesAnalyzerService.getCrashesPageList(new PageParam());
|
||||
System.out.println(crashesPageList);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user