periodic_traffic_reset_job.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package job
  2. import (
  3. "x-ui/logger"
  4. "x-ui/web/service"
  5. )
  6. type Period string
  7. type PeriodicTrafficResetJob struct {
  8. inboundService service.InboundService
  9. period Period
  10. }
  11. func NewPeriodicTrafficResetJob(period Period) *PeriodicTrafficResetJob {
  12. return &PeriodicTrafficResetJob{
  13. period: period,
  14. }
  15. }
  16. func (j *PeriodicTrafficResetJob) Run() {
  17. inbounds, err := j.inboundService.GetInboundsByTrafficReset(string(j.period))
  18. if err != nil {
  19. logger.Warning("Failed to get inbounds for traffic reset:", err)
  20. return
  21. }
  22. if len(inbounds) == 0 {
  23. return
  24. }
  25. logger.Infof("Running periodic traffic reset job for period: %s (%d matching inbounds)", j.period, len(inbounds))
  26. resetCount := 0
  27. for _, inbound := range inbounds {
  28. if err := j.inboundService.ResetAllClientTraffics(inbound.Id); err != nil {
  29. logger.Warning("Failed to reset traffic for inbound", inbound.Id, ":", err)
  30. continue
  31. }
  32. resetCount++
  33. logger.Infof("Reset traffic for inbound %d (%s)", inbound.Id, inbound.Remark)
  34. }
  35. if resetCount > 0 {
  36. logger.Infof("Periodic traffic reset completed: %d inbounds reset", resetCount)
  37. }
  38. }