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.history.PipPipelineHisInstance;
|
||||||
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||||
import cd.casic.ci.process.process.service.pipeline.PipelineService;
|
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.ServiceException;
|
||||||
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
||||||
import cd.casic.framework.security.core.LoginUser;
|
import cd.casic.framework.security.core.LoginUser;
|
||||||
@ -52,6 +53,8 @@ public class DefaultRunContextManager implements RunContextManager {
|
|||||||
private PipelineService pipelineService;
|
private PipelineService pipelineService;
|
||||||
@Resource
|
@Resource
|
||||||
private PostHandlerManager postHandlerManager;
|
private PostHandlerManager postHandlerManager;
|
||||||
|
@Resource
|
||||||
|
private SnowflakeIdentifierGenerator idWork;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean stopPipeline(String pipelineId) {
|
public Boolean stopPipeline(String pipelineId) {
|
||||||
|
@ -117,7 +117,7 @@ public class AFLWorker extends DockerWorker {
|
|||||||
}
|
}
|
||||||
localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE, statusCode);
|
localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE, statusCode);
|
||||||
afterTaskExecute(context);
|
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){
|
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;
|
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;
|
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.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.apache.ibatis.type.JdbcType;
|
import org.apache.ibatis.type.JdbcType;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class AflAnalyzerCrashesInfo extends BaseDO {
|
@TableName("afl_crashes_analyzer_info")
|
||||||
|
public class AflCrashesAnalyzerInfo extends BaseDO {
|
||||||
@TableId(type = IdType.ASSIGN_ID)
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
private String id;
|
private String id;
|
||||||
private String crashName;
|
private String crashName;
|
@ -1,7 +1,11 @@
|
|||||||
package cd.casic.ci.process.process.service.aflAnalyzer;
|
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.ci.process.dto.resp.resource.ResourceDetailResp;
|
||||||
|
import cd.casic.framework.commons.pojo.PageParam;
|
||||||
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
|
|
||||||
public interface AflCrashesAnalyzerService {
|
public interface AflCrashesAnalyzerService {
|
||||||
|
PageResult<AflCrashesAnalyzerListResp> getCrashesPageList(PageParam page);
|
||||||
public void saveCrashesByOutputPath(String outputPath, ResourceDetailResp resourceDetailResp, String pipelineId, String taskId, String pipelineHistoryId);
|
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;
|
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.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.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.dataObject.aflCrashAnalyzer.LinuxSignals;
|
||||||
import cd.casic.ci.process.process.service.aflAnalyzer.AflCrashesAnalyzerService;
|
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.dal.dataobject.MachineInfoDO;
|
||||||
import cd.casic.module.machine.utils.CryptogramUtil;
|
import cd.casic.module.machine.utils.CryptogramUtil;
|
||||||
import com.amazonaws.util.IOUtils;
|
import com.amazonaws.util.IOUtils;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.jcraft.jsch.*;
|
import com.jcraft.jsch.*;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -32,11 +37,30 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
|||||||
@Resource
|
@Resource
|
||||||
private LinuxSignalsDao signalsMapper;
|
private LinuxSignalsDao signalsMapper;
|
||||||
@Resource
|
@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
|
@Override
|
||||||
public void saveCrashesByOutputPath(String outputPath, ResourceDetailResp resource, String pipelineId, String taskId, String pipelineHistoryId) {
|
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();
|
MachineInfoDO machineInfo = resource.getMachineInfo();
|
||||||
List<AflAnalyzerCrashesInfo> dbList= new LinkedList<>();
|
List<AflCrashesAnalyzerInfo> dbList= new LinkedList<>();
|
||||||
try {
|
try {
|
||||||
JSch jsch = new JSch();
|
JSch jsch = new JSch();
|
||||||
Session session = jsch.getSession(machineInfo.getUsername(),machineInfo.getHostIp(), machineInfo.getSshPort());
|
Session session = jsch.getSession(machineInfo.getUsername(),machineInfo.getHostIp(), machineInfo.getSshPort());
|
||||||
@ -48,7 +72,7 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
|||||||
channel.connect();
|
channel.connect();
|
||||||
ChannelSftp sftpChannel = (ChannelSftp) channel;
|
ChannelSftp sftpChannel = (ChannelSftp) channel;
|
||||||
|
|
||||||
String fullOutputPath = outputPath + File.separator + "per-signal";
|
String fullOutputPath = outputPath + "/per-signal";
|
||||||
Vector<ChannelSftp.LsEntry> files = sftpChannel.ls(fullOutputPath);
|
Vector<ChannelSftp.LsEntry> files = sftpChannel.ls(fullOutputPath);
|
||||||
List<LinuxSignals> linuxSignals = signalsMapper.selectList();
|
List<LinuxSignals> linuxSignals = signalsMapper.selectList();
|
||||||
Map<String, LinuxSignals> signCodeMap = linuxSignals.stream().collect(Collectors.toMap(LinuxSignals::getId, Function.identity()));
|
Map<String, LinuxSignals> signCodeMap = linuxSignals.stream().collect(Collectors.toMap(LinuxSignals::getId, Function.identity()));
|
||||||
@ -62,14 +86,15 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
|||||||
log.error("未识别信号类型");
|
log.error("未识别信号类型");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String crashesTypes = fullOutputPath + File.separator + sign.getId();
|
String crashesTypes = fullOutputPath + "/" + sign.getId();
|
||||||
// 查找crashes 的分类下的crashes
|
// 查找crashes 的分类下的crashes
|
||||||
Vector<ChannelSftp.LsEntry> crashes = sftpChannel.ls(crashesTypes);
|
Vector<ChannelSftp.LsEntry> crashes = sftpChannel.ls(crashesTypes);
|
||||||
for (ChannelSftp.LsEntry crashe : crashes) {
|
for (ChannelSftp.LsEntry crashe : crashes) {
|
||||||
String crashFilename = crashe.getFilename();
|
String crashFilename = crashe.getFilename();
|
||||||
if (!crashe.getAttrs().isDir()) {
|
if (!crashe.getAttrs().isDir()) {
|
||||||
InputStream crashesInputStream = ((ChannelSftp) channel).get(fullOutputPath + File.separator + crashFilename);
|
System.out.println(crashesTypes + "/" + crashFilename);
|
||||||
AflAnalyzerCrashesInfo crashesInfo = new AflAnalyzerCrashesInfo();
|
InputStream crashesInputStream = ((ChannelSftp) channel).get(crashesTypes + "/"+ crashFilename);
|
||||||
|
AflCrashesAnalyzerInfo crashesInfo = new AflCrashesAnalyzerInfo();
|
||||||
crashesInfo.setCrashName(crashe.getFilename());
|
crashesInfo.setCrashName(crashe.getFilename());
|
||||||
crashesInfo.setSignId(sign.getId());
|
crashesInfo.setSignId(sign.getId());
|
||||||
crashesInfo.setPipelineHistoryId(pipelineHistoryId);
|
crashesInfo.setPipelineHistoryId(pipelineHistoryId);
|
||||||
@ -84,7 +109,9 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(dbList)) {
|
||||||
|
crashesInfoDao.insertBatch(dbList);
|
||||||
|
}
|
||||||
sftpChannel.disconnect();
|
sftpChannel.disconnect();
|
||||||
session.disconnect();
|
session.disconnect();
|
||||||
} catch (JSchException | SftpException e) {
|
} catch (JSchException | SftpException e) {
|
||||||
@ -92,8 +119,6 @@ public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(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