fix: ограничить статистику 7 днями и убрать 30d из дашборда
This commit is contained in:
@@ -67,3 +67,36 @@ func UpsertTrafficAggregateDaily(peerId int64, dayStart int64, rxBytes int64, tx
|
||||
func gormExprAdd(column string, delta int64) interface{} {
|
||||
return gorm.Expr(fmt.Sprintf("%s + ?", column), delta)
|
||||
}
|
||||
|
||||
func CleanupTrafficSample(olderThanMs int64) error {
|
||||
if !tableExists("traffic_sample") {
|
||||
return nil
|
||||
}
|
||||
if tx := sqliteDB.Exec("DELETE FROM traffic_sample WHERE sampled_at < ?", olderThanMs); tx.Error != nil {
|
||||
logrus.Errorf("%v", tx.Error)
|
||||
return errors.New(constant.SysError)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func CleanupTrafficAggregateHourly(olderThanMs int64) error {
|
||||
if !tableExists("traffic_aggregate_hourly") {
|
||||
return nil
|
||||
}
|
||||
if tx := sqliteDB.Exec("DELETE FROM traffic_aggregate_hourly WHERE hour_start < ?", olderThanMs); tx.Error != nil {
|
||||
logrus.Errorf("%v", tx.Error)
|
||||
return errors.New(constant.SysError)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func CleanupTrafficAggregateDaily(olderThanMs int64) error {
|
||||
if !tableExists("traffic_aggregate_daily") {
|
||||
return nil
|
||||
}
|
||||
if tx := sqliteDB.Exec("DELETE FROM traffic_aggregate_daily WHERE day_start < ?", olderThanMs); tx.Error != nil {
|
||||
logrus.Errorf("%v", tx.Error)
|
||||
return errors.New(constant.SysError)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
<el-radio-button label="1h">1h</el-radio-button>
|
||||
<el-radio-button label="24h">24h</el-radio-button>
|
||||
<el-radio-button label="7d">7d</el-radio-button>
|
||||
<el-radio-button label="30d">30d</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -23,10 +23,10 @@ func InitCron() error {
|
||||
logrus.Errorf("cron add func CollectMetricsSnapshot err: %v", err)
|
||||
return errors.New("cron add func CollectMetricsSnapshot err")
|
||||
}
|
||||
_, err = c.AddFunc("@every 10m", service.CleanupMetricsRetention)
|
||||
_, err = c.AddFunc("@every 1h", service.CleanupStatsRetention)
|
||||
if err != nil {
|
||||
logrus.Errorf("cron add func CleanupMetricsRetention err: %v", err)
|
||||
return errors.New("cron add func CleanupMetricsRetention err")
|
||||
logrus.Errorf("cron add func CleanupStatsRetention err: %v", err)
|
||||
return errors.New("cron add func CleanupStatsRetention err")
|
||||
}
|
||||
resetTrafficCron, err := dao.GetConfig("key = ?", constant.ResetTrafficCron)
|
||||
if err != nil {
|
||||
|
||||
@@ -72,7 +72,6 @@ func saveAccountTraffic(apiPort int64, trafficStatsSecret string) {
|
||||
|
||||
nowMs := time.Now().UnixMilli()
|
||||
hourStart := nowMs - (nowMs % int64(time.Hour/time.Millisecond))
|
||||
dayStart := nowMs - (nowMs % int64(24*time.Hour/time.Millisecond))
|
||||
|
||||
for key, traffic := range users {
|
||||
rxBytes := traffic.Rx
|
||||
@@ -115,7 +114,6 @@ func saveAccountTraffic(apiPort int64, trafficStatsSecret string) {
|
||||
}
|
||||
|
||||
_ = dao.UpsertTrafficAggregateHourly(*peer.Id, hourStart, rxBytes, txBytes)
|
||||
_ = dao.UpsertTrafficAggregateDaily(*peer.Id, dayStart, rxBytes, txBytes)
|
||||
}
|
||||
}
|
||||
func kickAccount(apiPort int64, trafficStatsSecret string) {
|
||||
|
||||
+12
-13
@@ -46,28 +46,29 @@ func DashboardTimeseries(rangeKey string) (vo.DashboardTimeseriesVo, error) {
|
||||
fromMs := nowMs - int64(24*time.Hour/time.Millisecond)
|
||||
bucketMs := int64(5 * time.Minute / time.Millisecond)
|
||||
source := "sample"
|
||||
r := strings.TrimSpace(rangeKey)
|
||||
if r == "1h" {
|
||||
r := "24h"
|
||||
|
||||
switch strings.TrimSpace(rangeKey) {
|
||||
case "1h":
|
||||
fromMs = nowMs - int64(time.Hour/time.Millisecond)
|
||||
bucketMs = int64(time.Minute / time.Millisecond)
|
||||
source = "sample"
|
||||
} else if r == "7d" {
|
||||
r = "1h"
|
||||
case "7d":
|
||||
fromMs = nowMs - int64(7*24*time.Hour/time.Millisecond)
|
||||
bucketMs = int64(time.Hour / time.Millisecond)
|
||||
source = "hourly"
|
||||
} else if r == "30d" {
|
||||
fromMs = nowMs - int64(30*24*time.Hour/time.Millisecond)
|
||||
bucketMs = int64(24 * time.Hour / time.Millisecond)
|
||||
source = "daily"
|
||||
r = "30d"
|
||||
} else if r == "" {
|
||||
r = "24h"
|
||||
r = "7d"
|
||||
case "24h", "":
|
||||
fromMs = nowMs - int64(24*time.Hour/time.Millisecond)
|
||||
bucketMs = int64(5 * time.Minute / time.Millisecond)
|
||||
source = "sample"
|
||||
} else {
|
||||
r = "24h"
|
||||
default:
|
||||
fromMs = nowMs - int64(24*time.Hour/time.Millisecond)
|
||||
bucketMs = int64(5 * time.Minute / time.Millisecond)
|
||||
source = "sample"
|
||||
r = "24h"
|
||||
}
|
||||
|
||||
traffic, err := dao.DashboardTrafficTimeseries(fromMs, nowMs, bucketMs, source)
|
||||
@@ -92,8 +93,6 @@ func DashboardTopPeers(rangeKey string, limit int) ([]vo.DashboardTopPeerVo, err
|
||||
fromMs := nowMs - int64(24*time.Hour/time.Millisecond)
|
||||
if strings.TrimSpace(rangeKey) == "7d" {
|
||||
fromMs = nowMs - int64(7*24*time.Hour/time.Millisecond)
|
||||
} else if strings.TrimSpace(rangeKey) == "30d" {
|
||||
fromMs = nowMs - int64(30*24*time.Hour/time.Millisecond)
|
||||
}
|
||||
return dao.DashboardTopPeers(fromMs, nowMs, limit)
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
)
|
||||
|
||||
const hysteriaVersionCacheTTL = 15 * time.Minute
|
||||
const statsRetention = 7 * 24 * time.Hour
|
||||
|
||||
var ansiRe = regexp.MustCompile(`\x1b\[[0-9;]*[A-Za-z]`)
|
||||
var hysteriaVersionRe = regexp.MustCompile(`(?i)v?\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?`)
|
||||
@@ -150,9 +151,19 @@ func CollectMetricsSnapshot() {
|
||||
_ = dao.SaveMetricSample(metric)
|
||||
}
|
||||
|
||||
func CleanupMetricsRetention() {
|
||||
cutoff := time.Now().Add(-72 * time.Hour).UnixMilli()
|
||||
_ = dao.CleanupMetricSample(cutoff)
|
||||
func CleanupStatsRetention() {
|
||||
now := time.Now()
|
||||
cutoffMs := now.Add(-statsRetention).UnixMilli()
|
||||
|
||||
hourMs := int64(time.Hour / time.Millisecond)
|
||||
dayMs := int64(24 * time.Hour / time.Millisecond)
|
||||
cutoffHour := cutoffMs - (cutoffMs % hourMs)
|
||||
cutoffDay := cutoffMs - (cutoffMs % dayMs)
|
||||
|
||||
_ = dao.CleanupMetricSample(cutoffMs)
|
||||
_ = dao.CleanupTrafficSample(cutoffMs)
|
||||
_ = dao.CleanupTrafficAggregateHourly(cutoffHour)
|
||||
_ = dao.CleanupTrafficAggregateDaily(cutoffDay)
|
||||
}
|
||||
|
||||
func DashboardSnapshot() metricsSnapshot {
|
||||
|
||||
Reference in New Issue
Block a user