diff options
| author | Vadim Iskuchekov <egregors@pm.me> | 2025-09-16 10:24:32 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-16 10:24:32 +0300 |
| commit | 9623e875113adad1fcbae7370e043db040462f2a (patch) | |
| tree | 925a7b445bfb7bd41b4bdec665d5c75353dafcfa /web/job | |
| parent | bc0518391ef06d3d6b9f826085b73d1f1e35c913 (diff) | |
feat: Simple periodic traffic reset (for Inbounds) – daily | weekly | monthly (#3407)
* Add periodic traffic reset feature model and ui with localization support
* Remove periodic traffic reset fields from client
* fix: add periodicTrafficReset field to inbound data structure
* feat: implement periodic traffic reset job and integrate with cron scheduler
* feat: enhance periodic traffic reset functionality with scheduling and inbound filtering
* refactor: rename periodicTrafficReset to trafficReset and add lastTrafficResetTime field
* feat: add periodic client traffic reset job and schedule tasks
* Update web/job/periodic_traffic_reset_job.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update web/job/periodic_client_traffic_reset_job.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update web/service/inbound.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* refactor: rename periodicTrafficReset to trafficReset and add lastTrafficResetTime
* feat: add last traffic reset time display and update logic in inbound service
* fix: correct log message for completed periodic traffic reset
* refactor: update traffic reset fields in Inbound model and remove unused client traffic reset job
* refactor: remove unused traffic reset logic and clean up client model fields
* cleanup comments
* fix
Diffstat (limited to 'web/job')
| -rw-r--r-- | web/job/periodic_traffic_reset_job.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/web/job/periodic_traffic_reset_job.go b/web/job/periodic_traffic_reset_job.go new file mode 100644 index 00000000..79001973 --- /dev/null +++ b/web/job/periodic_traffic_reset_job.go @@ -0,0 +1,44 @@ +package job + +import ( + "x-ui/logger" + "x-ui/web/service" +) + +type Period string + +type PeriodicTrafficResetJob struct { + inboundService service.InboundService + period Period +} + +func NewPeriodicTrafficResetJob(period Period) *PeriodicTrafficResetJob { + return &PeriodicTrafficResetJob{ + period: period, + } +} + +func (j *PeriodicTrafficResetJob) Run() { + inbounds, err := j.inboundService.GetInboundsByTrafficReset(string(j.period)) + logger.Infof("Running periodic traffic reset job for period: %s", j.period) + if err != nil { + logger.Warning("Failed to get inbounds for traffic reset:", err) + return + } + + resetCount := 0 + + for _, inbound := range inbounds { + if err := j.inboundService.ResetAllClientTraffics(inbound.Id); err != nil { + logger.Warning("Failed to reset traffic for inbound", inbound.Id, ":", err) + continue + } + + resetCount++ + logger.Infof("Reset traffic for inbound %d (%s)", inbound.Id, inbound.Remark) + } + + if resetCount > 0 { + logger.Infof("Periodic traffic reset completed: %d inbounds reset", resetCount) + } +} |
