mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 12:30:54 +00:00
Improve monitoring management module
This commit is contained in:
parent
18335194bc
commit
097bcb3b5b
34
admin.go
34
admin.go
@ -2,22 +2,56 @@ package beego
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/astaxie/beego/admin"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var BeeAdminApp *AdminApp
|
var BeeAdminApp *AdminApp
|
||||||
|
|
||||||
|
//func MyFilterMonitor(method, requestPath string, t time.Duration) bool {
|
||||||
|
// if method == "POST" {
|
||||||
|
// return false
|
||||||
|
// }
|
||||||
|
// if t.Nanoseconds() < 100 {
|
||||||
|
// return false
|
||||||
|
// }
|
||||||
|
// if strings.HasPrefix(requestPath, "/astaxie") {
|
||||||
|
// return false
|
||||||
|
// }
|
||||||
|
// return true
|
||||||
|
//}
|
||||||
|
|
||||||
|
//beego.FilterMonitorFunc = MyFilterMonitor
|
||||||
|
var FilterMonitorFunc func(string, string, time.Duration) bool
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
BeeAdminApp = &AdminApp{
|
BeeAdminApp = &AdminApp{
|
||||||
routers: make(map[string]http.HandlerFunc),
|
routers: make(map[string]http.HandlerFunc),
|
||||||
}
|
}
|
||||||
BeeAdminApp.Route("/", AdminIndex)
|
BeeAdminApp.Route("/", AdminIndex)
|
||||||
|
BeeAdminApp.Route("/qps", QpsIndex)
|
||||||
|
BeeAdminApp.Route("/prof", ProfIndex)
|
||||||
|
FilterMonitorFunc = func(string, string, time.Duration) bool { return true }
|
||||||
}
|
}
|
||||||
|
|
||||||
func AdminIndex(rw http.ResponseWriter, r *http.Request) {
|
func AdminIndex(rw http.ResponseWriter, r *http.Request) {
|
||||||
rw.Write([]byte("Welcome to Admin Dashboard"))
|
rw.Write([]byte("Welcome to Admin Dashboard"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func QpsIndex(rw http.ResponseWriter, r *http.Request) {
|
||||||
|
info := admin.UrlMap.GetMap(rw)
|
||||||
|
}
|
||||||
|
func ProfIndex(rw http.ResponseWriter, r *http.Request) {
|
||||||
|
r.ParseForm()
|
||||||
|
command := r.Form.Get("command")
|
||||||
|
if command != "" {
|
||||||
|
admin.ProcessInput(command)
|
||||||
|
} else {
|
||||||
|
rw.Write([]byte("request url like '/prof?command=lookup goroutine'"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type AdminApp struct {
|
type AdminApp struct {
|
||||||
routers map[string]http.HandlerFunc
|
routers map[string]http.HandlerFunc
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package admin
|
package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"io"
|
||||||
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -60,14 +61,21 @@ func (m *UrlMap) AddStatistics(requestMethod, requestUrl, requestController stri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *UrlMap) GetMap() []byte {
|
func (m *UrlMap) GetMap(rw io.Writer) {
|
||||||
m.lock.RLock()
|
m.lock.RLock()
|
||||||
defer m.lock.RUnlock()
|
defer m.lock.RUnlock()
|
||||||
r, err := json.Marshal(m.urlmap)
|
rw.Write([]byte("requestURL avgTime"))
|
||||||
if err != nil {
|
for k, v := range m.urlmap {
|
||||||
return []byte("")
|
rw.Write([]byte(k + ""))
|
||||||
|
for kk, vv := range v {
|
||||||
|
rw.Write([]byte(kk))
|
||||||
|
rw.Write([]byte(strconv.FormatInt(vv.RequestNum, 10)))
|
||||||
|
rw.Write([]byte(strconv.FormatInt(int64(vv.TotalTime), 10)))
|
||||||
|
rw.Write([]byte(strconv.FormatInt(int64(vv.MaxTime), 10)))
|
||||||
|
rw.Write([]byte(strconv.FormatInt(int64(vv.MinTime), 10)))
|
||||||
|
rw.Write([]byte(strconv.FormatInt(int64(vv.TotalTime)/vv.RequestNum, 10)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return r
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var StatisticsMap *UrlMap
|
var StatisticsMap *UrlMap
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package admin
|
package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -13,5 +14,5 @@ func TestStatics(t *testing.T) {
|
|||||||
StatisticsMap.AddStatistics("POST", "/api/user/astaxie", "&admin.user", time.Duration(1200000))
|
StatisticsMap.AddStatistics("POST", "/api/user/astaxie", "&admin.user", time.Duration(1200000))
|
||||||
StatisticsMap.AddStatistics("POST", "/api/user/xiemengjun", "&admin.user", time.Duration(1300000))
|
StatisticsMap.AddStatistics("POST", "/api/user/xiemengjun", "&admin.user", time.Duration(1300000))
|
||||||
StatisticsMap.AddStatistics("DELETE", "/api/user", "&admin.user", time.Duration(1400000))
|
StatisticsMap.AddStatistics("DELETE", "/api/user", "&admin.user", time.Duration(1400000))
|
||||||
s := StatisticsMap.GetMap()
|
StatisticsMap.GetMap(os.Stdout)
|
||||||
}
|
}
|
||||||
|
12
router.go
12
router.go
@ -846,12 +846,14 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
|
|||||||
Admin:
|
Admin:
|
||||||
//admin module record QPS
|
//admin module record QPS
|
||||||
if EnableAdmin {
|
if EnableAdmin {
|
||||||
if runrouter != nil {
|
timeend := time.Since(starttime)
|
||||||
go admin.StatisticsMap.AddStatistics(r.Method, requestPath, runrouter.controllerType.Name(), time.Since(starttime))
|
if FilterMonitorFunc(r.Method, requestPath, timeend) {
|
||||||
} else {
|
if runrouter != nil {
|
||||||
go admin.StatisticsMap.AddStatistics(r.Method, requestPath, "", time.Since(starttime))
|
go admin.StatisticsMap.AddStatistics(r.Method, requestPath, runrouter.controllerType.Name(), timeend)
|
||||||
|
} else {
|
||||||
|
go admin.StatisticsMap.AddStatistics(r.Method, requestPath, "", timeend)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user