Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
I
inspect
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
912协同工作系统
项目监控管理工具
inspect
Commits
6ceead68
提交
6ceead68
authored
6月 03, 2020
作者:
马晨俊
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mcj:
补充注释
上级
1a3256dd
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
38 行增加
和
17 行删除
+38
-17
Inspector.java
src/main/java/com/zjty/inspect/inspect/Inspector.java
+38
-17
没有找到文件。
src/main/java/com/zjty/inspect/inspect/Inspector.java
浏览文件 @
6ceead68
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论