package mux import ( "fmt" "github.com/astaxie/beego/logs" "net/http" "sort" "strconv" "strings" "sync" "time" ) type connLog struct { startTime time.Time isClose bool logs []string } var logms map[int]*connLog var logmc map[int]*connLog var copyMaps map[int]*connLog var copyMapc map[int]*connLog var stashTimeNow time.Time var mutex sync.Mutex func deepCopyMaps() { copyMaps = make(map[int]*connLog) for k, v := range logms { copyMaps[k] = &connLog{ startTime: v.startTime, isClose: v.isClose, logs: v.logs, } } } 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) } func (s IntSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] } func NewLogServer() { http.HandleFunc("/", index) http.HandleFunc("/detail", detail) http.HandleFunc("/stash", stash) fmt.Println(http.ListenAndServe(":8899", nil)) } func stash(w http.ResponseWriter, r *http.Request) { 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 copyMaps { keys = append(keys, k) } sort.Sort(IntSlice(keys)) var s string s += "
" + strconv.Itoa(i+1) + ":" + vv + "
" } } w.Write([]byte(s)) }