| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package job
- import (
- "time"
- "github.com/mhsanaei/3x-ui/v3/internal/logger"
- "github.com/mhsanaei/3x-ui/v3/internal/web/service"
- "github.com/mhsanaei/3x-ui/v3/internal/web/service/integration"
- )
- type WarpIpJob struct {
- settingService service.SettingService
- warpService integration.WarpService
- xrayService service.XrayService
- }
- func NewWarpIpJob() *WarpIpJob {
- return &WarpIpJob{}
- }
- func (j *WarpIpJob) Run() {
- allSetting, err := j.settingService.GetAllSetting()
- if err != nil {
- return
- }
- interval := allSetting.WarpUpdateInterval
- if interval <= 0 {
- return
- }
- lastUpdate, err := j.settingService.GetWarpLastUpdate()
- if err != nil {
- logger.Warning("Failed to read scheduled WARP IP update time: ", err)
- return
- }
- now := time.Now().Unix()
- // First run after the feature is enabled (e.g. interval set via direct
- // DB edit): establish a baseline instead of rotating immediately.
- if lastUpdate == 0 {
- if err := j.settingService.SetWarpLastUpdate(now); err != nil {
- logger.Warning("Failed to establish scheduled WARP IP update time: ", err)
- }
- return
- }
- if now-lastUpdate >= int64(interval*24*3600) {
- logger.Info("Starting scheduled WARP IP update...")
- _, err := j.warpService.ChangeWarpIP()
- if err != nil {
- logger.Warning("Failed to update WARP IP: ", err)
- return
- }
- if err := j.settingService.SetWarpLastUpdate(now); err != nil {
- logger.Warning("WARP IP changed but the next-update time was not saved: ", err)
- }
- j.xrayService.SetToNeedRestart()
- logger.Info("Successfully updated WARP IP and scheduled Xray restart")
- }
- }
|