warp_ip_job.go 1.2 KB

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