diff --git a/server/dbdata/statsinfo.go b/server/dbdata/statsinfo.go index dd53b2c..21eb583 100644 --- a/server/dbdata/statsinfo.go +++ b/server/dbdata/statsinfo.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "strconv" + "sync" "time" "github.com/bjdgyc/anylink/base" @@ -20,6 +21,7 @@ type StatsInfo struct { RealtimeData map[string]*list.List Actions []string Scopes []string + mux sync.Mutex } type ScopeDetail struct { @@ -65,6 +67,9 @@ func (s *StatsInfo) ValidScope(scope string) bool { // 设置实时统计数据 func (s *StatsInfo) SetRealTime(action string, val interface{}) { + s.mux.Lock() + defer s.mux.Unlock() + if s.RealtimeData[action].Len() >= RealTimeMaxSize { ele := s.RealtimeData[action].Front() s.RealtimeData[action].Remove(ele) @@ -74,6 +79,9 @@ func (s *StatsInfo) SetRealTime(action string, val interface{}) { // 获取实时统计数据 func (s *StatsInfo) GetRealTime(action string) (res []interface{}) { + s.mux.Lock() + defer s.mux.Unlock() + for e := s.RealtimeData[action].Front(); e != nil; e = e.Next() { res = append(res, e.Value) } @@ -81,7 +89,7 @@ func (s *StatsInfo) GetRealTime(action string) (res []interface{}) { } // 保存数据至数据库 -func (s *StatsInfo) SaveStatsInfo(so *StatsOnline, sn *StatsNetwork, sc *StatsCpu, sm *StatsMem) { +func (s *StatsInfo) SaveStatsInfo(so StatsOnline, sn StatsNetwork, sc StatsCpu, sm StatsMem) { if so.Num != 0 { _ = Add(so) } diff --git a/server/sessdata/statsinfo.go b/server/sessdata/statsinfo.go index 8c2a636..cc6f762 100644 --- a/server/sessdata/statsinfo.go +++ b/server/sessdata/statsinfo.go @@ -52,15 +52,15 @@ func saveStatsInfo() { tNow := time.Now() // online numData, _ := json.Marshal(numGroups) - so := &dbdata.StatsOnline{Num: onlineNum, NumGroups: string(numData), CreatedAt: tNow} + so := dbdata.StatsOnline{Num: onlineNum, NumGroups: string(numData), CreatedAt: tNow} // network upData, _ := json.Marshal(upGroups) downData, _ := json.Marshal(downGroups) - sn := &dbdata.StatsNetwork{Up: up, Down: down, UpGroups: string(upData), DownGroups: string(downData), CreatedAt: tNow} + sn := dbdata.StatsNetwork{Up: up, Down: down, UpGroups: string(upData), DownGroups: string(downData), CreatedAt: tNow} // cpu - sc := &dbdata.StatsCpu{Percent: getCpuPercent(), CreatedAt: tNow} + sc := dbdata.StatsCpu{Percent: getCpuPercent(), CreatedAt: tNow} // mem - sm := &dbdata.StatsMem{Percent: getMemPercent(), CreatedAt: tNow} + sm := dbdata.StatsMem{Percent: getMemPercent(), CreatedAt: tNow} count++ // 是否保存至数据库 save := count*StatsCycleSec >= AddCycleSec @@ -74,7 +74,7 @@ func saveStatsInfo() { }() } -func setStatsData(save bool, so *dbdata.StatsOnline, sn *dbdata.StatsNetwork, sc *dbdata.StatsCpu, sm *dbdata.StatsMem) { +func setStatsData(save bool, so dbdata.StatsOnline, sn dbdata.StatsNetwork, sc dbdata.StatsCpu, sm dbdata.StatsMem) { // 实时数据 dbdata.StatsInfoIns.SetRealTime("online", so) dbdata.StatsInfoIns.SetRealTime("network", sn)