整合aflcrash(未测试)
This commit is contained in:
parent
c78ef4d33b
commit
9465bf96fb
@ -0,0 +1,7 @@
|
|||||||
|
package cd.casic.ci.process.process.dao.aflCrashAnalyzer;
|
||||||
|
|
||||||
|
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.AflAnalyzerCrashesInfo;
|
||||||
|
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
|
||||||
|
public interface AflAnalyzerCrashesInfoDao extends BaseMapperX<AflAnalyzerCrashesInfo> {
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package cd.casic.ci.process.process.dao.aflCrashAnalyzer;
|
||||||
|
|
||||||
|
import cd.casic.ci.process.process.dataObject.aflCrashAnalyzer.LinuxSignals;
|
||||||
|
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
|
||||||
|
public interface LinuxSignalsDao extends BaseMapperX<LinuxSignals> {
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package cd.casic.ci.process.process.dataObject.aflCrashAnalyzer;
|
||||||
|
|
||||||
|
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 lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.apache.ibatis.type.JdbcType;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class AflAnalyzerCrashesInfo extends BaseDO {
|
||||||
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
|
private String id;
|
||||||
|
private String crashName;
|
||||||
|
private String signId;
|
||||||
|
@TableField(jdbcType = JdbcType.BLOB)
|
||||||
|
private byte[] crashesContent;
|
||||||
|
private String pipelineHistoryId;
|
||||||
|
private String pipelineId;
|
||||||
|
private String taskId;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
private String updater;
|
||||||
|
private String creator;
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package cd.casic.ci.process.process.dataObject.aflCrashAnalyzer;
|
||||||
|
|
||||||
|
import cd.casic.framework.commons.dataobject.BaseDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class LinuxSignals extends BaseDO {
|
||||||
|
/**
|
||||||
|
* 信号码,同时也是主键
|
||||||
|
* */
|
||||||
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
|
private String id;
|
||||||
|
/**
|
||||||
|
* 信号名称
|
||||||
|
* */
|
||||||
|
private String signalName;
|
||||||
|
/**
|
||||||
|
* 信号简析
|
||||||
|
* */
|
||||||
|
private String briefDesc;
|
||||||
|
/**
|
||||||
|
* 信号详解
|
||||||
|
* */
|
||||||
|
private String detailDesc;
|
||||||
|
/**
|
||||||
|
* 常见场景
|
||||||
|
* */
|
||||||
|
private String commonScenarios;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
private String updater;
|
||||||
|
private String creator;
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package cd.casic.ci.process.process.service.aflAnalyzer;
|
||||||
|
|
||||||
|
import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
|
||||||
|
|
||||||
|
public interface AflCrashesAnalyzerService {
|
||||||
|
public void saveCrashesByOutputPath(String outputPath, ResourceDetailResp resourceDetailResp, String pipelineId, String taskId, String pipelineHistoryId);
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
package cd.casic.ci.process.process.service.aflAnalyzer.impl;
|
||||||
|
|
||||||
|
import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp;
|
||||||
|
import cd.casic.ci.process.process.dao.aflCrashAnalyzer.AflAnalyzerCrashesInfoDao;
|
||||||
|
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.LinuxSignals;
|
||||||
|
import cd.casic.ci.process.process.service.aflAnalyzer.AflCrashesAnalyzerService;
|
||||||
|
import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
|
||||||
|
import cd.casic.module.machine.utils.CryptogramUtil;
|
||||||
|
import com.amazonaws.util.IOUtils;
|
||||||
|
import com.jcraft.jsch.*;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* afl crashes文件分析service类
|
||||||
|
* */
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class AflCrashesAnalyzerServiceImpl implements AflCrashesAnalyzerService {
|
||||||
|
@Resource
|
||||||
|
private LinuxSignalsDao signalsMapper;
|
||||||
|
@Resource
|
||||||
|
private AflAnalyzerCrashesInfoDao crashesInfoDao;
|
||||||
|
@Override
|
||||||
|
public void saveCrashesByOutputPath(String outputPath, ResourceDetailResp resource, String pipelineId, String taskId, String pipelineHistoryId) {
|
||||||
|
MachineInfoDO machineInfo = resource.getMachineInfo();
|
||||||
|
List<AflAnalyzerCrashesInfo> dbList= new LinkedList<>();
|
||||||
|
try {
|
||||||
|
JSch jsch = new JSch();
|
||||||
|
Session session = jsch.getSession(machineInfo.getUsername(),machineInfo.getHostIp(), machineInfo.getSshPort());
|
||||||
|
session.setPassword(CryptogramUtil.doDecrypt(machineInfo.getPassword()));
|
||||||
|
session.setConfig("StrictHostKeyChecking", "no");
|
||||||
|
session.connect();
|
||||||
|
|
||||||
|
Channel channel = session.openChannel("sftp");
|
||||||
|
channel.connect();
|
||||||
|
ChannelSftp sftpChannel = (ChannelSftp) channel;
|
||||||
|
|
||||||
|
String fullOutputPath = outputPath + File.separator + "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()));
|
||||||
|
for (ChannelSftp.LsEntry entry : files) {
|
||||||
|
String filename = entry.getFilename();
|
||||||
|
if (!filename.equals(".") && !filename.equals("..")) {
|
||||||
|
if (entry.getAttrs().isDir()) {
|
||||||
|
//文件夹下第一级是信号分类,下面就是crash文件
|
||||||
|
LinuxSignals sign = signCodeMap.get(filename);
|
||||||
|
if (sign==null) {
|
||||||
|
log.error("未识别信号类型");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String crashesTypes = fullOutputPath + File.separator + 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();
|
||||||
|
crashesInfo.setCrashName(crashe.getFilename());
|
||||||
|
crashesInfo.setSignId(sign.getId());
|
||||||
|
crashesInfo.setPipelineHistoryId(pipelineHistoryId);
|
||||||
|
crashesInfo.setPipelineId(pipelineId);
|
||||||
|
crashesInfo.setTaskId(taskId);
|
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
|
IOUtils.copy(crashesInputStream,bos);
|
||||||
|
crashesInfo.setCrashesContent(bos.toByteArray());
|
||||||
|
dbList.add(crashesInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sftpChannel.disconnect();
|
||||||
|
session.disconnect();
|
||||||
|
} catch (JSchException | SftpException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(dbList)) {
|
||||||
|
crashesInfoDao.insertBatch(dbList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user