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

feat: add api size count

上级 37e93f89
......@@ -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
```
......
......@@ -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, countMap := analyser.AnalysisByFiles(restApis, parsedDeps)
dotContent, counts := 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")
}
......@@ -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.PairList) {
func (c CallGraph) AnalysisByFiles(restApis []api.RestApi, deps []models.JClassNode) (string, []CallApiCount) {
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 {
......
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.
先完成此消息的编辑!
想要评论请 注册