mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-09-12 13:10:05 +00:00
feat: add periodic client traffic reset job and schedule tasks
This commit is contained in:
parent
7d75cfc947
commit
10d57d9502
3 changed files with 56 additions and 6 deletions
42
web/job/periodic_client_traffic_reset_job.go
Normal file
42
web/job/periodic_client_traffic_reset_job.go
Normal file
|
@ -0,0 +1,42 @@
|
|||
package job
|
||||
|
||||
import (
|
||||
"x-ui/logger"
|
||||
"x-ui/web/service"
|
||||
)
|
||||
|
||||
type PeriodicClientTrafficResetJob struct {
|
||||
inboundService service.InboundService
|
||||
period Period
|
||||
}
|
||||
|
||||
func NewPeriodicClientTrafficResetJob(period Period) *PeriodicClientTrafficResetJob {
|
||||
return &PeriodicClientTrafficResetJob{
|
||||
period: period,
|
||||
}
|
||||
}
|
||||
|
||||
func (j *PeriodicClientTrafficResetJob) Run() {
|
||||
clients, err := j.inboundService.GetClientsByTrafficReset(string(j.period))
|
||||
logger.Infof("Running periodic client traffic reset job for period: %s", j.period)
|
||||
if err != nil {
|
||||
logger.Warning("Failed to get clients for traffic reset:", err)
|
||||
return
|
||||
}
|
||||
|
||||
resetCount := 0
|
||||
|
||||
for _, client := range clients {
|
||||
if err := j.inboundService.ResetClientTrafficByEmail(client.Email); err != nil {
|
||||
logger.Warning("Failed to reset traffic for client", client.Email, ":", err)
|
||||
continue
|
||||
}
|
||||
|
||||
resetCount++
|
||||
logger.Infof("Reset traffic for client %s", client.Email)
|
||||
}
|
||||
|
||||
if resetCount > 0 {
|
||||
logger.Infof("Periodic client traffic reset completed: %d clients reseted", resetCount)
|
||||
}
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
package job
|
||||
|
||||
import (
|
||||
"x-ui/database/model"
|
||||
"x-ui/logger"
|
||||
"x-ui/web/service"
|
||||
)
|
||||
|
@ -20,7 +19,7 @@ func NewPeriodicTrafficResetJob(period Period) *PeriodicTrafficResetJob {
|
|||
}
|
||||
|
||||
func (j *PeriodicTrafficResetJob) Run() {
|
||||
inbounds, err := j.inboundService.GetInboundsByPeriodicTrafficReset(string(j.period))
|
||||
inbounds, err := j.inboundService.GetInboundsByTrafficReset(string(j.period))
|
||||
logger.Infof("Running periodic traffic reset job for period: %s", j.period)
|
||||
if err != nil {
|
||||
logger.Warning("Failed to get inbounds for traffic reset:", err)
|
||||
|
@ -43,7 +42,3 @@ func (j *PeriodicTrafficResetJob) Run() {
|
|||
logger.Infof("Periodic traffic reset completed: %d inbounds reseted", resetCount)
|
||||
}
|
||||
}
|
||||
|
||||
func (j *PeriodicTrafficResetJob) getResetKey(inbound *model.Inbound) string {
|
||||
return inbound.PeriodicTrafficReset + "_" + inbound.Tag
|
||||
}
|
||||
|
|
13
web/web.go
13
web/web.go
|
@ -269,13 +269,26 @@ func (s *Server) startTask() {
|
|||
// Periodic traffic resets
|
||||
logger.Info("Scheduling periodic traffic reset jobs")
|
||||
{
|
||||
// Inbound traffic reset jobs
|
||||
// Run once a day, midnight
|
||||
// TODO: for testing, run every minute, change back to daily later
|
||||
// s.cron.AddJob("@daily", job.NewPeriodicTrafficResetJob("daily"))
|
||||
s.cron.AddJob("* * * * *", job.NewPeriodicTrafficResetJob("daily"))
|
||||
// Run once a week, midnight between Sat/Sun
|
||||
s.cron.AddJob("@weekly", job.NewPeriodicTrafficResetJob("weekly"))
|
||||
// Run once a month, midnight, first of month
|
||||
s.cron.AddJob("@monthly", job.NewPeriodicTrafficResetJob("monthly"))
|
||||
|
||||
// Client traffic reset jobs
|
||||
logger.Info("Scheduling periodic client traffic reset jobs")
|
||||
// Run once a day, midnight
|
||||
// TODO: for testing, run every minute, change back to daily later
|
||||
// s.cron.AddJob("@daily", job.NewPeriodicClientTrafficResetJob("daily"))
|
||||
s.cron.AddJob("* * * * *", job.NewPeriodicClientTrafficResetJob("daily"))
|
||||
// Run once a week, midnight between Sat/Sun
|
||||
s.cron.AddJob("@weekly", job.NewPeriodicClientTrafficResetJob("weekly"))
|
||||
// Run once a month, midnight, first of month
|
||||
s.cron.AddJob("@monthly", job.NewPeriodicClientTrafficResetJob("monthly"))
|
||||
}
|
||||
|
||||
// Make a traffic condition every day, 8:30
|
||||
|
|
Loading…
Reference in a new issue