mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-07 13:44:24 +00:00
69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package job
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/mhsanaei/3x-ui/v2/logger"
|
|
"github.com/mhsanaei/3x-ui/v2/web/service"
|
|
)
|
|
|
|
// BackupJob handles scheduled database backups.
|
|
type BackupJob struct {
|
|
settingService service.SettingService
|
|
backupService service.BackupService
|
|
}
|
|
|
|
// NewBackupJob creates a new BackupJob instance.
|
|
func NewBackupJob() *BackupJob {
|
|
return &BackupJob{}
|
|
}
|
|
|
|
// Run executes the scheduled backup if enabled and time matches the configured frequency.
|
|
func (j *BackupJob) Run() {
|
|
enabled, err := j.settingService.GetBackupEnabled()
|
|
if err != nil || !enabled {
|
|
return
|
|
}
|
|
|
|
frequency, err := j.settingService.GetBackupFrequency()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if !j.shouldRun(frequency) {
|
|
return
|
|
}
|
|
|
|
if err := j.backupService.CreateSnapshot(j.settingService); err != nil {
|
|
logger.Warning("scheduled backup failed:", err)
|
|
}
|
|
}
|
|
|
|
// shouldRun checks if the backup should run based on the configured frequency.
|
|
func (j *BackupJob) shouldRun(frequency string) bool {
|
|
now := time.Now()
|
|
|
|
switch frequency {
|
|
case "hourly":
|
|
return now.Minute() == 0
|
|
case "every12h":
|
|
return (now.Hour() == 0 || now.Hour() == 12) && now.Minute() == 0
|
|
case "daily":
|
|
hour, err := j.settingService.GetBackupHour()
|
|
if err != nil {
|
|
hour = 3
|
|
}
|
|
return now.Hour() == hour && now.Minute() == 0
|
|
case "weekly":
|
|
if now.Weekday() != time.Sunday {
|
|
return false
|
|
}
|
|
hour, err := j.settingService.GetBackupHour()
|
|
if err != nil {
|
|
hour = 3
|
|
}
|
|
return now.Hour() == hour && now.Minute() == 0
|
|
default:
|
|
return false
|
|
}
|
|
}
|