diff --git a/toolbox/statistics.go b/toolbox/statistics.go index 382daba0..779fd637 100644 --- a/toolbox/statistics.go +++ b/toolbox/statistics.go @@ -15,6 +15,7 @@ package toolbox import ( + "encoding/json" "fmt" "sync" "time" @@ -111,6 +112,31 @@ func (m *UrlMap) GetMap() map[string]interface{} { return content } +func (m *UrlMap) GetMapJSON() ([]byte, error) { + return json.Marshal(m) +} + +func (m UrlMap) MarshalJSON() ([]byte, error) { + + resultLists := make([]map[string]interface{}, 0) + + for k, v := range m.urlmap { + for kk, vv := range v { + result := map[string]interface{}{ + "request_url": k, + "method": kk, + "times": vv.RequestNum, + "total_time": toS(vv.TotalTime), + "max_time": toS(vv.MaxTime), + "min_time": toS(vv.MinTime), + "avg_time": toS(time.Duration(int64(vv.TotalTime) / vv.RequestNum)), + } + resultLists = append(resultLists, result) + } + } + return json.Marshal(resultLists) +} + // global statistics data map var StatisticsMap *UrlMap diff --git a/toolbox/statistics_test.go b/toolbox/statistics_test.go index 448b2af5..97860d32 100644 --- a/toolbox/statistics_test.go +++ b/toolbox/statistics_test.go @@ -28,4 +28,10 @@ func TestStatics(t *testing.T) { StatisticsMap.AddStatistics("POST", "/api/user/xiemengjun", "&admin.user", time.Duration(13000)) StatisticsMap.AddStatistics("DELETE", "/api/user", "&admin.user", time.Duration(1400)) t.Log(StatisticsMap.GetMap()) + + jsonString, err := StatisticsMap.GetMapJSON() + if err != nil { + t.Errorf(err.Error()) + } + t.Log(string(jsonString)) }