diff --git a/internal/db/models/server_dao.go b/internal/db/models/server_dao.go index 7ceba04c..b3609f80 100644 --- a/internal/db/models/server_dao.go +++ b/internal/db/models/server_dao.go @@ -862,20 +862,21 @@ func (this *ServerDAO) ListEnabledServersMatch(tx *dbs.Tx, offset int64, size in } // 排序 - var timestamp = time.Now().Unix() / 300 * 300 - var currentTime = timeutil.FormatTime("YmdHi", timestamp) - var prevTime = timeutil.FormatTime("YmdHi", timestamp-300) + var timestamp = (time.Now().Unix()) / 300 * 300 + var times = []string{ + timeutil.FormatTime("YmdHi", timestamp), + timeutil.FormatTime("YmdHi", timestamp-300), + timeutil.FormatTime("YmdHi", timestamp-300*2), + } switch order { case "trafficOutAsc": - query.Asc("IF(IF(bandwidthTime=:currentTime, bandwidthBytes, 0) > 0, IF(bandwidthTime=:currentTime, bandwidthBytes, 0), IF(bandwidthTime=:prevTime, bandwidthBytes, 0))") - query.Param("currentTime", currentTime) - query.Param("prevTime", prevTime) + query.Asc("IF(FIND_IN_SET(bandwidthTime, :times), bandwidthBytes, 0)") + query.Param("times", strings.Join(times, ",")) query.DescPk() case "trafficOutDesc": - query.Desc("IF(IF(bandwidthTime=:currentTime, bandwidthBytes, 0) > 0, IF(bandwidthTime=:currentTime, bandwidthBytes, 0), IF(bandwidthTime=:prevTime, bandwidthBytes, 0))") - query.Param("currentTime", currentTime) - query.Param("prevTime", prevTime) + query.Desc("IF(FIND_IN_SET(bandwidthTime, :times), bandwidthBytes, 0)") + query.Param("times", strings.Join(times, ",")) query.DescPk() default: query.DescPk() @@ -885,7 +886,7 @@ func (this *ServerDAO) ListEnabledServersMatch(tx *dbs.Tx, offset int64, size in // 修正带宽统计数据 for _, server := range result { - if len(server.BandwidthTime) > 0 && server.BandwidthBytes > 0 && server.BandwidthTime < prevTime { + if len(server.BandwidthTime) > 0 && !lists.ContainsString(times, server.BandwidthTime) { server.BandwidthBytes = 0 } } diff --git a/internal/rpc/services/service_server_bandwidth_stat.go b/internal/rpc/services/service_server_bandwidth_stat.go index dcbad433..47ce9d44 100644 --- a/internal/rpc/services/service_server_bandwidth_stat.go +++ b/internal/rpc/services/service_server_bandwidth_stat.go @@ -9,7 +9,6 @@ import ( "github.com/TeaOSLab/EdgeAPI/internal/goman" "github.com/TeaOSLab/EdgeAPI/internal/remotelogs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/types" "sync" @@ -20,10 +19,7 @@ var serverBandwidthStatsMap = map[string]*pb.ServerBandwidthStat{} // key => ban var serverBandwidthStatsLocker = &sync.Mutex{} func init() { - var ticker = time.NewTicker(5 * time.Minute) - if Tea.IsTesting() { - ticker = time.NewTicker(1 * time.Minute) - } + var ticker = time.NewTicker(1 * time.Minute) dbs.OnReadyDone(func() { goman.New(func() { diff --git a/internal/rpc/services/service_server_stat_board.go b/internal/rpc/services/service_server_stat_board.go index f9d7b1d8..4e611e86 100644 --- a/internal/rpc/services/service_server_stat_board.go +++ b/internal/rpc/services/service_server_stat_board.go @@ -415,11 +415,13 @@ func (this *ServerStatBoardService) ComposeServerStatBoard(ctx context.Context, // 当前N分钟区间 { - // 查询最近的两个时段,以尽可能获取数据 - var minute1 = timeutil.FormatTime("Hi", time.Now().Unix()/300*300) - var minute2 = timeutil.FormatTime("Hi", time.Now().Unix()/300*300-300) + // 查询最近的三个时段,以尽可能获取数据 + var timestamp = time.Now().Unix() / 300 * 300 + var minute1 = timeutil.FormatTime("Hi", timestamp) + var minute2 = timeutil.FormatTime("Hi", timestamp-300) + var minute3 = timeutil.FormatTime("Hi", timestamp-300*2) - for _, minute := range []string{minute1, minute2} { + for _, minute := range []string{minute1, minute2, minute3} { bytes, err := models.SharedServerBandwidthStatDAO.FindMinutelyPeekBandwidthBytes(tx, req.ServerId, day, minute) if err != nil { return nil, err