提交 6ceead68 authored 作者: 马晨俊's avatar 马晨俊

mcj:

补充注释
上级 1a3256dd
...@@ -154,10 +154,10 @@ public class Inspector { ...@@ -154,10 +154,10 @@ public class Inspector {
public ReportVo inspect() { public ReportVo inspect() {
//初始化成员变量 //初始化成员变量
initData(); initData();
//扫描文件,进行文件分类
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
map.put("msg","开始扫描文件"); map.put("msg","开始扫描文件");
asyncTask.sendMessageToAll(map); asyncTask.sendMessageToAll(map);
//扫描文件,进行文件分类
scanFiles(); scanFiles();
map.put("msg","文件扫描结束"); map.put("msg","文件扫描结束");
asyncTask.sendMessageToAll(map); asyncTask.sendMessageToAll(map);
...@@ -168,18 +168,17 @@ public class Inspector { ...@@ -168,18 +168,17 @@ public class Inspector {
log.info("inspect:源代码扫描完成,统计各个文件后缀完成"); log.info("inspect:源代码扫描完成,统计各个文件后缀完成");
//统计项目语言 //统计项目语言
setReportLanguageAndFrame(); setReportLanguageAndFrame();
//根据扫描结果以及用户配置得出需要使用的规则及技术 //根据扫描结果以及用户配置得出需要使用的规则及技术(如用户只是适配则只需要前端技术以及规则就可以了)
ruleTransform(inspectParameter.getRecastMethod()); ruleTransform(inspectParameter.getRecastMethod());
//扫描源代码文件
map.put("msg","开始扫描源代码文件"); map.put("msg","开始扫描源代码文件");
asyncTask.sendMessageToAll(map); asyncTask.sendMessageToAll(map);
//扫描源代码文件
forEachFilesMap(); forEachFilesMap();
map.put("msg","源代码文件扫描结束"); map.put("msg","源代码文件扫描结束");
asyncTask.sendMessageToAll(map); asyncTask.sendMessageToAll(map);
//将得到的告警信息根据技术id进行转换 //将得到的告警信息根据技术id进行转换
Set<String> technologyIds = warns.stream().map(Warn::getTechnologyId).collect(Collectors.toSet()); Set<String> technologyIds = warns.stream().map(Warn::getTechnologyId).collect(Collectors.toSet());
List<Technology> technologies = technologyDao.findAllById(technologyIds); List<Technology> technologies = technologyDao.findAllById(technologyIds);
//计算技术金额 //计算技术金额
Integer technologyFund = 0; Integer technologyFund = 0;
for (Technology tech : technologies) { for (Technology tech : technologies) {
...@@ -207,6 +206,7 @@ public class Inspector { ...@@ -207,6 +206,7 @@ public class Inspector {
/** /**
* 遍历操作扫描文件后得出的文件 * 遍历操作扫描文件后得出的文件
* 目前只统计pom.xml文件中的依赖
*/ */
private void forEachFilesMap() { private void forEachFilesMap() {
//解析配置文件集合 //解析配置文件集合
...@@ -222,6 +222,7 @@ public class Inspector { ...@@ -222,6 +222,7 @@ public class Inspector {
try { try {
// TODO: 2020-02-28 解析maven树文件,设置依赖保存到redis // TODO: 2020-02-28 解析maven树文件,设置依赖保存到redis
report.setManager(DependenceManagement.MAVEN.getStatus()); report.setManager(DependenceManagement.MAVEN.getStatus());
//解析pom文件变成对象
ProjectPom projectPom = analysisFile.analysisPom(path); ProjectPom projectPom = analysisFile.analysisPom(path);
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (PomDependency dependency : projectPom.getDependencies()) { for (PomDependency dependency : projectPom.getDependencies()) {
...@@ -230,6 +231,7 @@ public class Inspector { ...@@ -230,6 +231,7 @@ public class Inspector {
List<String> lines; List<String> lines;
lines = Files.readAllLines(path); lines = Files.readAllLines(path);
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
//验证文件内是否匹配配置的规则
valiWarn(rules, path, lines.get(i), i + 1); valiWarn(rules, path, lines.get(i), i + 1);
} }
dependencyVo.add(projectPom); dependencyVo.add(projectPom);
...@@ -240,6 +242,7 @@ public class Inspector { ...@@ -240,6 +242,7 @@ public class Inspector {
} }
} }
} }
//用来填充发送的消息(websocket)
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
//指定后缀到文件匹配关键字 //指定后缀到文件匹配关键字
int fileNum = 0; int fileNum = 0;
...@@ -257,12 +260,12 @@ public class Inspector { ...@@ -257,12 +260,12 @@ public class Inspector {
try { try {
fileNum = fileNum + 1; fileNum = fileNum + 1;
map.put("msg", fileNum + "/" + fileSize); map.put("msg", fileNum + "/" + fileSize);
System.out.println(fileNum + "/" + fileSize);
asyncTask.sendMessageToAll(map); asyncTask.sendMessageToAll(map);
//如果文件类型为jar活着class则不读取 //如果文件类型为jar或者class则不读取
if (path1.toAbsolutePath().toString().endsWith("jar") || path1.toAbsolutePath().toString().endsWith("class")) { if (path1.toAbsolutePath().toString().endsWith("jar") || path1.toAbsolutePath().toString().endsWith("class")) {
continue; continue;
} }
//验证当前文件名称是否匹配配置的规则并记录
valiWarn(rules, path1, path1.getFileName().toString(), 0); valiWarn(rules, path1, path1.getFileName().toString(), 0);
//将文件的每一行都与规则匹配 //将文件的每一行都与规则匹配
List<String> strings = Files.readAllLines(path1); List<String> strings = Files.readAllLines(path1);
...@@ -287,7 +290,7 @@ public class Inspector { ...@@ -287,7 +290,7 @@ public class Inspector {
String most = null; String most = null;
int mostStatus = 0; int mostStatus = 0;
int maxnum = 0; int maxnum = 0;
//统计文件最多的 //统计语言文件最多的
for (Map.Entry<String, Counter> entry : languageMatchMap.entrySet()) { for (Map.Entry<String, Counter> entry : languageMatchMap.entrySet()) {
if (entry.getValue().getNumber() > maxnum) { if (entry.getValue().getNumber() > maxnum) {
LanguageEnum language = suffixLanguageMapping.get(entry.getKey()); LanguageEnum language = suffixLanguageMapping.get(entry.getKey());
...@@ -300,7 +303,7 @@ public class Inspector { ...@@ -300,7 +303,7 @@ public class Inspector {
languageEnums.add(language); languageEnums.add(language);
} }
} }
//设置是否需要重构 //根据得出的语言判断是否需要重构
List<LanguageEnum> newLanguageEnums = languageEnums.stream() List<LanguageEnum> newLanguageEnums = languageEnums.stream()
.filter(e -> e.getCode() != 4 & e.getCode() != 5 & e.getCode() != 6) .filter(e -> e.getCode() != 4 & e.getCode() != 5 & e.getCode() != 6)
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -326,12 +329,12 @@ public class Inspector { ...@@ -326,12 +329,12 @@ public class Inspector {
//设置语言 //设置语言
report.setLanguage(most == null ? LanguageEnum.NONE.getCode() : mostStatus); report.setLanguage(most == null ? LanguageEnum.NONE.getCode() : mostStatus);
report.setLanguages(languageCodes); report.setLanguages(languageCodes);
//设置架构 //设置架构为分离型还是融合型
report.setFramework(languageMatchMap.get("jsp").i > 0 ? Framework.MIXTURE.getStatus() : Framework.SEPARATE.getStatus()); report.setFramework(languageMatchMap.get("jsp").i > 0 ? Framework.MIXTURE.getStatus() : Framework.SEPARATE.getStatus());
} }
/** /**
* rule所需要数据装配 * 根据用户评估方式需要指定规则查询
* *
* @param status 状态 * @param status 状态
* 1:改造 * 1:改造
...@@ -342,7 +345,7 @@ public class Inspector { ...@@ -342,7 +345,7 @@ public class Inspector {
if (status == 1) { if (status == 1) {
this.ruleList = ruleService.findRules(); this.ruleList = ruleService.findRules();
} else { } else {
//只查询前端技术 //用户只是适配则只查询前端技术
List<Technology> front = technologyDao.findAllByBackorfrontEquals(1); List<Technology> front = technologyDao.findAllByBackorfrontEquals(1);
List<String> technologyIds = front.stream().map(Technology::getId).collect(Collectors.toList()); List<String> technologyIds = front.stream().map(Technology::getId).collect(Collectors.toList());
this.ruleList = ruleService.findAllByTechnologyIdIn(technologyIds); this.ruleList = ruleService.findAllByTechnologyIdIn(technologyIds);
...@@ -354,7 +357,7 @@ public class Inspector { ...@@ -354,7 +357,7 @@ public class Inspector {
for (Technology technology : technologies) { for (Technology technology : technologies) {
technologyHashMap.put(technology.getId(), technology); technologyHashMap.put(technology.getId(), technology);
} }
//根据后缀名进行规则收集 //根据匹配文件的后缀名进行规则统计
for (Rule rule : ruleList) { for (Rule rule : ruleList) {
if (!ruleSuffixMap.containsKey(rule.getSuffix())) { if (!ruleSuffixMap.containsKey(rule.getSuffix())) {
ruleSuffixMap.put(rule.getSuffix(), new ArrayList<>()); ruleSuffixMap.put(rule.getSuffix(), new ArrayList<>());
...@@ -380,24 +383,41 @@ public class Inspector { ...@@ -380,24 +383,41 @@ public class Inspector {
private void initData() { private void initData() {
//查询技术,构造支持与非支持技术对象,3个对象 //查询技术,构造支持与非支持技术对象,3个对象
//配置语言 map结构 //配置语言 map结构
//初始化代码大小
codeSize = 0; codeSize = 0;
//初始化文件行数
fileLine = 0; fileLine = 0;
//初始化文件个数
fileNum = 0; fileNum = 0;
//初始化pom文件依赖对象
dependencyVo = new DependencyVo(); dependencyVo = new DependencyVo();
//清空规则与后缀文件map
ruleSuffixFilePathMap.clear(); ruleSuffixFilePathMap.clear();
//清空规则map
ruleSuffixMap.clear(); ruleSuffixMap.clear();
//清空技术map
technologyHashMap.clear(); technologyHashMap.clear();
//清空支持的依赖
supportWarns.clear(); supportWarns.clear();
//清空已经统计的依赖
warns.clear(); warns.clear();
//清空规则
rules.clear(); rules.clear();
//配置 config文件 结构 //配置 config文件 结构
statisticsConfigFile(); statisticsConfigFile();
//初始化核心技术
initTechnology(); initTechnology();
//初始化语言统计个数
statisticsLanguage(); statisticsLanguage();
//查询存在的技术
findExistTechnology(); findExistTechnology();
//初始化规则
initRule(); initRule();
} }
/**
* 初始化一个具有各种配置文件的map
*/
private void statisticsConfigFile() { private void statisticsConfigFile() {
this.configFileTypePathsMapping.clear(); this.configFileTypePathsMapping.clear();
configFileTypePathsMapping.put("xml", new ArrayList<>()); configFileTypePathsMapping.put("xml", new ArrayList<>());
...@@ -407,6 +427,9 @@ public class Inspector { ...@@ -407,6 +427,9 @@ public class Inspector {
configFileTypePathsMapping.put("yml", new ArrayList<>()); configFileTypePathsMapping.put("yml", new ArrayList<>());
} }
/**
* 初始化各种语言的map
*/
private void statisticsLanguage() { private void statisticsLanguage() {
for (String languageName : suffixLanguageMapping.keySet()) { for (String languageName : suffixLanguageMapping.keySet()) {
//配置如:java,0 //配置如:java,0
...@@ -491,7 +514,6 @@ public class Inspector { ...@@ -491,7 +514,6 @@ public class Inspector {
*/ */
private void setRule(StringBuilder stringBuilder, PomDependency dependency) { private void setRule(StringBuilder stringBuilder, PomDependency dependency) {
stringBuilder.append(dependency.getGroupId()).append(":").append(dependency.getArtifactId());
Rule rule = new Rule(); Rule rule = new Rule();
Rule rule1 = new Rule(); Rule rule1 = new Rule();
if (inspectParameter.getAdmin() == 1) { if (inspectParameter.getAdmin() == 1) {
...@@ -521,7 +543,6 @@ public class Inspector { ...@@ -521,7 +543,6 @@ public class Inspector {
rules.add(rule1); rules.add(rule1);
ruleMap.put(dependency.getArtifactId() + ":" + rule1.getSuffix(), rule1); ruleMap.put(dependency.getArtifactId() + ":" + rule1.getSuffix(), rule1);
} }
stringBuilder.delete(0, stringBuilder.length());
} }
...@@ -577,6 +598,7 @@ public class Inspector { ...@@ -577,6 +598,7 @@ public class Inspector {
/** /**
* 扫描源文件 * 扫描源文件
* 根据表达式匹配
* *
* @throws IOException * @throws IOException
*/ */
...@@ -599,7 +621,6 @@ public class Inspector { ...@@ -599,7 +621,6 @@ public class Inspector {
ruleSuffixMap.put(aDefault.getPathMatcher("glob:**/*." + s), s); ruleSuffixMap.put(aDefault.getPathMatcher("glob:**/*." + s), s);
} }
//文件读取 //文件读取
if (inspectParameter.getSourceAddress() != null) { if (inspectParameter.getSourceAddress() != null) {
try { try {
Files.walkFileTree(Paths.get(inspectParameter.getSourceAddress()), new FileVisitor<Path>() { Files.walkFileTree(Paths.get(inspectParameter.getSourceAddress()), new FileVisitor<Path>() {
...@@ -657,7 +678,7 @@ public class Inspector { ...@@ -657,7 +678,7 @@ public class Inspector {
} }
for (Map.Entry<String, PathMatcher> entry : languageSuffixMatcherMapping.entrySet()) { for (Map.Entry<String, PathMatcher> entry : languageSuffixMatcherMapping.entrySet()) {
//通过正则表达式匹配.java类型后缀文件,并+1 //通过正则表达式匹配.java类型后缀文件,并+1
if (entry.getValue().matches(file)) { if (entry.getValue().matches(file)) {
long length = file.toFile().length(); long length = file.toFile().length();
codeSize += length / 1024; codeSize += length / 1024;
...@@ -665,7 +686,7 @@ public class Inspector { ...@@ -665,7 +686,7 @@ public class Inspector {
} }
} }
for (Map.Entry<PathMatcher, String> entry : configFileMatcherSuffixMapping.entrySet()) { for (Map.Entry<PathMatcher, String> entry : configFileMatcherSuffixMapping.entrySet()) {
//通过配置文件正则表达式匹配.xml文件,记录文件地址 //通过配置文件正则表达式匹配.xml文件,记录文件地址
if (entry.getKey().matches(file)) { if (entry.getKey().matches(file)) {
configFileTypePathsMapping.get(entry.getValue()).add(file); configFileTypePathsMapping.get(entry.getValue()).add(file);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论