|
@@ -2,9 +2,12 @@ package mux
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
+ "github.com/astaxie/beego/logs"
|
|
|
"net/http"
|
|
|
"sort"
|
|
|
"strconv"
|
|
|
+ "strings"
|
|
|
+ "sync"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -14,16 +17,18 @@ type connLog struct {
|
|
|
logs []string
|
|
|
}
|
|
|
|
|
|
-var m map[int]*connLog
|
|
|
+var logms map[int]*connLog
|
|
|
+var logmc map[int]*connLog
|
|
|
|
|
|
-var copyMap map[int]*connLog
|
|
|
+var copyMaps map[int]*connLog
|
|
|
+var copyMapc map[int]*connLog
|
|
|
var stashTimeNow time.Time
|
|
|
+var mutex sync.Mutex
|
|
|
|
|
|
-func deepCopyMap() {
|
|
|
- stashTimeNow = time.Now()
|
|
|
- copyMap = make(map[int]*connLog)
|
|
|
- for k, v := range m {
|
|
|
- copyMap[k] = &connLog{
|
|
|
+func deepCopyMaps() {
|
|
|
+ copyMaps = make(map[int]*connLog)
|
|
|
+ for k, v := range logms {
|
|
|
+ copyMaps[k] = &connLog{
|
|
|
startTime: v.startTime,
|
|
|
isClose: v.isClose,
|
|
|
logs: v.logs,
|
|
@@ -31,25 +36,22 @@ func deepCopyMap() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func init() {
|
|
|
- m = make(map[int]*connLog)
|
|
|
- m[0] = &connLog{
|
|
|
- startTime: time.Now(),
|
|
|
- isClose: false,
|
|
|
- logs: []string{"111", "222", "333"},
|
|
|
- }
|
|
|
- m[1] = &connLog{
|
|
|
- startTime: time.Now(),
|
|
|
- isClose: false,
|
|
|
- logs: []string{"111", "222", "333", "444"},
|
|
|
- }
|
|
|
- m[2] = &connLog{
|
|
|
- startTime: time.Now(),
|
|
|
- isClose: true,
|
|
|
- logs: []string{"111", "222", "333", "555"},
|
|
|
+func deepCopyMapc() {
|
|
|
+ copyMapc = make(map[int]*connLog)
|
|
|
+ for k, v := range logmc {
|
|
|
+ copyMapc[k] = &connLog{
|
|
|
+ startTime: v.startTime,
|
|
|
+ isClose: v.isClose,
|
|
|
+ logs: v.logs,
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func init() {
|
|
|
+ logms = make(map[int]*connLog)
|
|
|
+ logmc = make(map[int]*connLog)
|
|
|
+}
|
|
|
+
|
|
|
type IntSlice []int
|
|
|
|
|
|
func (s IntSlice) Len() int { return len(s) }
|
|
@@ -66,21 +68,64 @@ func NewLogServer() {
|
|
|
}
|
|
|
|
|
|
func stash(w http.ResponseWriter, r *http.Request) {
|
|
|
- deepCopyMap()
|
|
|
+ stashTimeNow = time.Now()
|
|
|
+ deepCopyMaps()
|
|
|
+ deepCopyMapc()
|
|
|
w.Write([]byte("ok"))
|
|
|
}
|
|
|
|
|
|
+func getM(label string, id int) (cL *connLog) {
|
|
|
+ label = strings.TrimSpace(label)
|
|
|
+ mutex.Lock()
|
|
|
+ defer mutex.Unlock()
|
|
|
+ if label == "nps" {
|
|
|
+ cL = logms[id]
|
|
|
+ }
|
|
|
+ if label == "npc" {
|
|
|
+ cL = logmc[id]
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func setM(label string, id int, cL *connLog) {
|
|
|
+ label = strings.TrimSpace(label)
|
|
|
+ mutex.Lock()
|
|
|
+ defer mutex.Unlock()
|
|
|
+ if label == "nps" {
|
|
|
+ logms[id] = cL
|
|
|
+ }
|
|
|
+ if label == "npc" {
|
|
|
+ logmc[id] = cL
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func index(w http.ResponseWriter, r *http.Request) {
|
|
|
var keys []int
|
|
|
- for k := range copyMap {
|
|
|
+ for k := range copyMaps {
|
|
|
keys = append(keys, k)
|
|
|
}
|
|
|
sort.Sort(IntSlice(keys))
|
|
|
var s string
|
|
|
- for v := range keys {
|
|
|
- connL := copyMap[v]
|
|
|
- s += "<a href='/detail?id=" + strconv.Itoa(v) + "'>" + strconv.Itoa(v) + "</a>----------"
|
|
|
- s += strconv.Itoa(int(stashTimeNow.Unix()-connL.startTime.Unix())) + "s----------"
|
|
|
+ s += "<h1>nps</h1>"
|
|
|
+ for _, v := range keys {
|
|
|
+ connL := copyMaps[v]
|
|
|
+ s += "<a href='/detail?id=" + strconv.Itoa(v) + "&label=nps" + "'>" + strconv.Itoa(v) + "</a>----------"
|
|
|
+ s += strconv.Itoa(int(stashTimeNow.Sub(connL.startTime).Milliseconds())) + "ms----------"
|
|
|
+ s += strconv.FormatBool(connL.isClose)
|
|
|
+ s += "<br>"
|
|
|
+ }
|
|
|
+
|
|
|
+ keys = keys[:0]
|
|
|
+ s += "<h1>npc</h1>"
|
|
|
+ for k := range copyMapc {
|
|
|
+ keys = append(keys, k)
|
|
|
+ }
|
|
|
+ sort.Sort(IntSlice(keys))
|
|
|
+
|
|
|
+ for _, v := range keys {
|
|
|
+ connL := copyMapc[v]
|
|
|
+ s += "<a href='/detail?id=" + strconv.Itoa(v) + "&label=npc" + "'>" + strconv.Itoa(v) + "</a>----------"
|
|
|
+ s += strconv.Itoa(int(stashTimeNow.Sub(connL.startTime).Milliseconds())) + "ms----------"
|
|
|
s += strconv.FormatBool(connL.isClose)
|
|
|
s += "<br>"
|
|
|
}
|
|
@@ -89,11 +134,21 @@ func index(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
func detail(w http.ResponseWriter, r *http.Request) {
|
|
|
id := r.FormValue("id")
|
|
|
+ label := r.FormValue("label")
|
|
|
+ logs.Warn(label)
|
|
|
i, _ := strconv.Atoi(id)
|
|
|
- v, _ := copyMap[i]
|
|
|
+ var v *connLog
|
|
|
+ if label == "nps" {
|
|
|
+ v, _ = copyMaps[i]
|
|
|
+ }
|
|
|
+ if label == "npc" {
|
|
|
+ v, _ = copyMapc[i]
|
|
|
+ }
|
|
|
var s string
|
|
|
- for _, vv := range v.logs {
|
|
|
- s += "<p>" + vv + "</p>"
|
|
|
+ if v != nil {
|
|
|
+ for i, vv := range v.logs {
|
|
|
+ s += "<p>" + strconv.Itoa(i+1) + ":" + vv + "</p>"
|
|
|
+ }
|
|
|
}
|
|
|
w.Write([]byte(s))
|
|
|
}
|