diff --git a/api/apiService.go b/api/apiService.go index 61fafaf..887d301 100644 --- a/api/apiService.go +++ b/api/apiService.go @@ -90,6 +90,10 @@ func (a *ApiService) getData(c *gin.Context) (interface{}, error) { if err != nil { return "", err } + trafficAge, err := a.SettingService.GetTrafficAge() + if err != nil { + return "", err + } data["config"] = json.RawMessage(config) data["clients"] = clients data["tls"] = tlsConfigs @@ -98,6 +102,7 @@ func (a *ApiService) getData(c *gin.Context) (interface{}, error) { data["endpoints"] = endpoints data["services"] = services data["subURI"] = subURI + data["enableTraffic"] = trafficAge > 0 data["onlines"] = onlines } else { data["onlines"] = onlines diff --git a/cronjob/cronJob.go b/cronjob/cronJob.go index 4bf3eff..be6f880 100644 --- a/cronjob/cronJob.go +++ b/cronjob/cronJob.go @@ -20,11 +20,13 @@ func (c *CronJob) Start(loc *time.Location, trafficAge int) error { go func() { // Start stats job - c.cron.AddJob("@every 10s", NewStatsJob()) + c.cron.AddJob("@every 10s", NewStatsJob(trafficAge > 0)) // Start expiry job c.cron.AddJob("@every 1m", NewDepleteJob()) // Start deleting old stats - c.cron.AddJob("@daily", NewDelStatsJob(trafficAge)) + if trafficAge > 0 { + c.cron.AddJob("@daily", NewDelStatsJob(trafficAge)) + } // Start core if it is not running c.cron.AddJob("@every 5s", NewCheckCoreJob()) }() diff --git a/cronjob/statsJob.go b/cronjob/statsJob.go index dcf72f7..a576e02 100644 --- a/cronjob/statsJob.go +++ b/cronjob/statsJob.go @@ -7,14 +7,17 @@ import ( type StatsJob struct { service.StatsService + enableTraffic bool } -func NewStatsJob() *StatsJob { - return &StatsJob{} +func NewStatsJob(saveTraffic bool) *StatsJob { + return &StatsJob{ + enableTraffic: saveTraffic, + } } func (s *StatsJob) Run() { - err := s.StatsService.SaveStats() + err := s.StatsService.SaveStats(s.enableTraffic) if err != nil { logger.Warning("Get stats failed: ", err) return diff --git a/service/setting.go b/service/setting.go index 581c6cb..aa887ff 100644 --- a/service/setting.go +++ b/service/setting.go @@ -391,6 +391,13 @@ func (s *SettingService) Save(tx *gorm.DB, data json.RawMessage) error { } } + // Delete all stats if it is set to 0 + if key == "trafficAge" && obj == "0" { + err = tx.Where("id > 0").Delete(model.Stats{}).Error + if err != nil { + return err + } + } err = tx.Model(model.Setting{}).Where("key = ?", key).Update("value", obj).Error if err != nil { return err diff --git a/service/stats.go b/service/stats.go index 693d21f..4d051f9 100644 --- a/service/stats.go +++ b/service/stats.go @@ -19,7 +19,7 @@ var onlineResources = &onlines{} type StatsService struct { } -func (s *StatsService) SaveStats() error { +func (s *StatsService) SaveStats(enableTraffic bool) error { if !corePtr.IsRunning() { return nil } @@ -70,8 +70,10 @@ func (s *StatsService) SaveStats() error { } } - err = tx.Create(&stats).Error - return err + if !enableTraffic { + return nil + } + return tx.Create(&stats).Error } func (s *StatsService) GetStats(resource string, tag string, limit int) ([]model.Stats, error) {