warp_ip_job.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package job
  2. import (
  3. "time"
  4. "github.com/mhsanaei/3x-ui/v3/logger"
  5. "github.com/mhsanaei/3x-ui/v3/web/service"
  6. )
  7. type WarpIpJob struct {
  8. settingService service.SettingService
  9. warpService service.WarpService
  10. xrayService service.XrayService
  11. }
  12. func NewWarpIpJob() *WarpIpJob {
  13. return &WarpIpJob{}
  14. }
  15. func (j *WarpIpJob) Run() {
  16. allSetting, err := j.settingService.GetAllSetting()
  17. if err != nil {
  18. return
  19. }
  20. interval := allSetting.WarpUpdateInterval
  21. if interval <= 0 {
  22. return
  23. }
  24. lastUpdate, _ := j.settingService.GetWarpLastUpdate()
  25. now := time.Now().Unix()
  26. // First run after the feature is enabled (e.g. interval set via direct
  27. // DB edit): establish a baseline instead of rotating immediately.
  28. if lastUpdate == 0 {
  29. _ = j.settingService.SetWarpLastUpdate(now)
  30. return
  31. }
  32. if now-lastUpdate >= int64(interval*24*3600) {
  33. logger.Info("Starting scheduled WARP IP update...")
  34. _, err := j.warpService.ChangeWarpIP()
  35. if err != nil {
  36. logger.Warning("Failed to update WARP IP: ", err)
  37. return
  38. }
  39. _ = j.settingService.SetWarpLastUpdate(now)
  40. j.xrayService.SetToNeedRestart()
  41. logger.Info("Successfully updated WARP IP and scheduled Xray restart")
  42. }
  43. }