未验证 提交 bc6e9b26 编写于 作者: P Phodal Huang

feat: add api size count

上级 37e93f89
...@@ -112,6 +112,27 @@ coca api -p examples/api -d deps.json ...@@ -112,6 +112,27 @@ coca api -p examples/api -d deps.json
![API Demo](docs/sample/api.svg) ![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 ### Git Analysis
``` ```
......
...@@ -6,10 +6,12 @@ import ( ...@@ -6,10 +6,12 @@ import (
"coca/src/domain" "coca/src/domain"
. "coca/src/utils" . "coca/src/utils"
"encoding/json" "encoding/json"
"fmt" "github.com/olekukonko/tablewriter"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"log" "log"
"os"
"os/exec" "os/exec"
"strconv"
"strings" "strings"
) )
...@@ -38,12 +40,18 @@ var apiCmd *cobra.Command = &cobra.Command{ ...@@ -38,12 +40,18 @@ var apiCmd *cobra.Command = &cobra.Command{
_ = json.Unmarshal(file, &parsedDeps) _ = json.Unmarshal(file, &parsedDeps)
analyser := domain.NewCallGraph() analyser := domain.NewCallGraph()
dotContent, countMap := analyser.AnalysisByFiles(restApis, parsedDeps) dotContent, counts := analyser.AnalysisByFiles(restApis, parsedDeps)
if isShowApiCount != "" { if isShowApiCount == "true" {
for _, count := range countMap { table := tablewriter.NewWriter(os.Stdout)
fmt.Println(count.Value, count.Key)
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 != "" { if remove != "" {
...@@ -67,5 +75,5 @@ func init() { ...@@ -67,5 +75,5 @@ func init() {
apiCmd.PersistentFlags().StringP("path", "p", "", "path") apiCmd.PersistentFlags().StringP("path", "p", "", "path")
apiCmd.PersistentFlags().StringP("dependence", "d", "", "get dependence file") apiCmd.PersistentFlags().StringP("dependence", "d", "", "get dependence file")
apiCmd.PersistentFlags().StringP("remove", "r", "", "remove package name") 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")
} }
...@@ -3,7 +3,7 @@ package domain ...@@ -3,7 +3,7 @@ package domain
import ( import (
"coca/src/adapter/api" "coca/src/adapter/api"
"coca/src/adapter/models" "coca/src/adapter/models"
"coca/src/algo" "sort"
"strings" "strings"
) )
...@@ -53,9 +53,9 @@ func BuildCallChain(funcName string, methodMap map[string][]string) string { ...@@ -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.PairList) { func (c CallGraph) AnalysisByFiles(restApis []api.RestApi, deps []models.JClassNode) (string, []CallApiCount) {
methodMap := c.BuildMethodMap(deps) methodMap := c.BuildMethodMap(deps)
apiCallSizeMap := make(map[string]int) var apiCallSCounts []CallApiCount
results := "digraph G { \n" results := "digraph G { \n"
...@@ -67,11 +67,21 @@ func (c CallGraph) AnalysisByFiles(restApis []api.RestApi, deps []models.JClassN ...@@ -67,11 +67,21 @@ func (c CallGraph) AnalysisByFiles(restApis []api.RestApi, deps []models.JClassN
apiCallChain := BuildCallChain(caller, methodMap) apiCallChain := BuildCallChain(caller, methodMap)
chain = chain + apiCallChain 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 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 { func (c CallGraph) BuildMethodMap(clzs []models.JClassNode) map[string][]string {
......
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.
先完成此消息的编辑!
想要评论请 注册