Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Phodal
Coca
提交
bc6e9b26
C
Coca
项目概览
Phodal
/
Coca
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coca
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
bc6e9b26
编写于
12月 16, 2019
作者:
P
Phodal Huang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: add api size count
上级
37e93f89
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
58 addition
and
12 deletion
+58
-12
README.md
README.md
+21
-0
cmd/api.go
cmd/api.go
+14
-6
src/domain/call_graph.go
src/domain/call_graph.go
+16
-6
src/domain/call_model.go
src/domain/call_model.go
+7
-0
未找到文件。
README.md
浏览文件 @
bc6e9b26
...
...
@@ -112,6 +112,27 @@ coca api -p examples/api -d deps.json
![
API Demo
](
docs/sample/api.svg
)
With Count
```
coca api -p . -d deps.json -c true -r com.macro.mall.
```
```
+------+------------------------------------------------+------------------------------------------------------------------------+
| SIZE | API | CALLER |
+------+------------------------------------------------+------------------------------------------------------------------------+
| 17 | GET /returnReason/list | controller.OmsOrderReturnReasonController.list |
| 17 | GET /returnApply/list | controller.OmsOrderReturnApplyController.list |
| 17 | GET /order/list | controller.OmsOrderController.list |
| 17 | GET /subject/list | controller.CmsSubjectController.getList |
| 17 | GET /esProduct/search/simple | search.controller.EsProductController.search |
| 17 | GET /flash/{id} | controller.SmsFlashPromotionController.getItem |
| 21 | POST /aliyun/osscallback | controller.OssController.callback |
| 36 | GET /aliyun/oss/policy | controller.OssController.policy |
+------+------------------------------------------------+------------------------------------------------------------------------+
```
### Git Analysis
```
...
...
cmd/api.go
浏览文件 @
bc6e9b26
...
...
@@ -6,10 +6,12 @@ import (
"coca/src/domain"
.
"coca/src/utils"
"encoding/json"
"
fmt
"
"
github.com/olekukonko/tablewriter
"
"github.com/spf13/cobra"
"log"
"os"
"os/exec"
"strconv"
"strings"
)
...
...
@@ -38,12 +40,18 @@ var apiCmd *cobra.Command = &cobra.Command{
_
=
json
.
Unmarshal
(
file
,
&
parsedDeps
)
analyser
:=
domain
.
NewCallGraph
()
dotContent
,
count
Map
:=
analyser
.
AnalysisByFiles
(
restApis
,
parsedDeps
)
dotContent
,
count
s
:=
analyser
.
AnalysisByFiles
(
restApis
,
parsedDeps
)
if
isShowApiCount
!=
""
{
for
_
,
count
:=
range
countMap
{
fmt
.
Println
(
count
.
Value
,
count
.
Key
)
if
isShowApiCount
==
"true"
{
table
:=
tablewriter
.
NewWriter
(
os
.
Stdout
)
table
.
SetHeader
([]
string
{
"Size"
,
"API"
,
"Caller"
})
for
_
,
v
:=
range
counts
{
replaceCaller
:=
strings
.
ReplaceAll
(
v
.
Caller
,
remove
,
""
)
table
.
Append
([]
string
{
strconv
.
Itoa
(
v
.
Size
),
v
.
ApiName
,
replaceCaller
})
}
table
.
Render
()
}
if
remove
!=
""
{
...
...
@@ -67,5 +75,5 @@ func init() {
apiCmd
.
PersistentFlags
()
.
StringP
(
"path"
,
"p"
,
""
,
"path"
)
apiCmd
.
PersistentFlags
()
.
StringP
(
"dependence"
,
"d"
,
""
,
"get dependence file"
)
apiCmd
.
PersistentFlags
()
.
StringP
(
"remove"
,
"r"
,
""
,
"remove package name"
)
apiCmd
.
PersistentFlags
()
.
StringP
(
"count"
,
"c"
,
""
,
"count api size"
)
apiCmd
.
PersistentFlags
()
.
BoolP
(
"count"
,
"c"
,
false
,
"count api size"
)
}
src/domain/call_graph.go
浏览文件 @
bc6e9b26
...
...
@@ -3,7 +3,7 @@ package domain
import
(
"coca/src/adapter/api"
"coca/src/adapter/models"
"
coca/src/algo
"
"
sort
"
"strings"
)
...
...
@@ -53,9 +53,9 @@ func BuildCallChain(funcName string, methodMap map[string][]string) string {
}
func
(
c
CallGraph
)
AnalysisByFiles
(
restApis
[]
api
.
RestApi
,
deps
[]
models
.
JClassNode
)
(
string
,
algo
.
PairLis
t
)
{
func
(
c
CallGraph
)
AnalysisByFiles
(
restApis
[]
api
.
RestApi
,
deps
[]
models
.
JClassNode
)
(
string
,
[]
CallApiCoun
t
)
{
methodMap
:=
c
.
BuildMethodMap
(
deps
)
apiCallSizeMap
:=
make
(
map
[
string
]
int
)
var
apiCallSCounts
[]
CallApiCount
results
:=
"digraph G {
\n
"
...
...
@@ -67,11 +67,21 @@ func (c CallGraph) AnalysisByFiles(restApis []api.RestApi, deps []models.JClassN
apiCallChain
:=
BuildCallChain
(
caller
,
methodMap
)
chain
=
chain
+
apiCallChain
apiCallSizeMap
[
caller
+
" "
+
restApi
.
HttpMethod
+
" "
+
restApi
.
Uri
]
=
len
(
strings
.
Split
(
apiCallChain
,
" -> "
))
count
:=
&
CallApiCount
{
Caller
:
caller
,
ApiName
:
restApi
.
HttpMethod
+
" "
+
restApi
.
Uri
,
Size
:
len
(
strings
.
Split
(
apiCallChain
,
" -> "
)),
}
apiCallSCounts
=
append
(
apiCallSCounts
,
*
count
)
results
=
results
+
"
\n
"
+
chain
}
byWordCount
:=
algo
.
RankByWordCount
(
apiCallSizeMap
)
return
results
+
"}
\n
"
,
byWordCount
sort
.
Slice
(
apiCallSCounts
,
func
(
i
,
j
int
)
bool
{
return
apiCallSCounts
[
i
]
.
Size
<
apiCallSCounts
[
j
]
.
Size
})
return
results
+
"}
\n
"
,
apiCallSCounts
}
func
(
c
CallGraph
)
BuildMethodMap
(
clzs
[]
models
.
JClassNode
)
map
[
string
][]
string
{
...
...
src/domain/call_model.go
0 → 100644
浏览文件 @
bc6e9b26
package
domain
type
CallApiCount
struct
{
Caller
string
ApiName
string
Size
int
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录