1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-05 14:00:54 +00:00
Beego/admin/statistics.go

80 lines
1.7 KiB
Go

package admin
import (
"encoding/json"
"sync"
"time"
)
type Statistics struct {
RequestUrl string
RequestController string
RequestNum int64
MinTime time.Duration
MaxTime time.Duration
TotalTime time.Duration
}
type UrlMap struct {
lock sync.RWMutex
urlmap map[string]map[string]*Statistics
}
func (m *UrlMap) AddStatistics(requestMethod, requestUrl, requestController string, requesttime time.Duration) {
m.lock.Lock()
defer m.lock.Unlock()
if method, ok := m.urlmap[requestUrl]; ok {
if s, ok := method[requestMethod]; ok {
s.RequestNum += 1
if s.MaxTime < requesttime {
s.MaxTime = requesttime
}
if s.MinTime > requesttime {
s.MinTime = requesttime
}
s.TotalTime += requesttime
} else {
nb := &Statistics{
RequestUrl: requestUrl,
RequestController: requestController,
RequestNum: 1,
MinTime: requesttime,
MaxTime: requesttime,
TotalTime: requesttime,
}
m.urlmap[requestUrl][requestMethod] = nb
}
} else {
methodmap := make(map[string]*Statistics)
nb := &Statistics{
RequestUrl: requestUrl,
RequestController: requestController,
RequestNum: 1,
MinTime: requesttime,
MaxTime: requesttime,
TotalTime: requesttime,
}
methodmap[requestMethod] = nb
m.urlmap[requestUrl] = methodmap
}
}
func (m *UrlMap) GetMap() []byte {
m.lock.RLock()
defer m.lock.RUnlock()
r, err := json.Marshal(m.urlmap)
if err != nil {
return []byte("")
}
return r
}
var StatisticsMap *UrlMap
func init() {
StatisticsMap = &UrlMap{
urlmap: make(map[string]map[string]*Statistics),
}
}