2025-08-31 18:57:53 +00:00
|
|
|
package job
|
|
|
|
|
|
|
|
import (
|
|
|
|
"x-ui/logger"
|
|
|
|
"x-ui/web/service"
|
|
|
|
)
|
|
|
|
|
2025-09-06 08:40:59 +00:00
|
|
|
type Period string
|
2025-08-31 18:57:53 +00:00
|
|
|
|
|
|
|
type PeriodicTrafficResetJob struct {
|
|
|
|
inboundService service.InboundService
|
2025-09-06 08:40:59 +00:00
|
|
|
period Period
|
2025-08-31 18:57:53 +00:00
|
|
|
}
|
|
|
|
|
2025-09-06 08:40:59 +00:00
|
|
|
func NewPeriodicTrafficResetJob(period Period) *PeriodicTrafficResetJob {
|
2025-08-31 18:57:53 +00:00
|
|
|
return &PeriodicTrafficResetJob{
|
2025-09-06 08:40:59 +00:00
|
|
|
period: period,
|
2025-08-31 18:57:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (j *PeriodicTrafficResetJob) Run() {
|
2025-09-09 17:40:04 +00:00
|
|
|
inbounds, err := j.inboundService.GetInboundsByTrafficReset(string(j.period))
|
2025-09-06 08:40:59 +00:00
|
|
|
logger.Infof("Running periodic traffic reset job for period: %s", j.period)
|
2025-08-31 18:57:53 +00:00
|
|
|
if err != nil {
|
|
|
|
logger.Warning("Failed to get inbounds for traffic reset:", err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
resetCount := 0
|
|
|
|
|
|
|
|
for _, inbound := range inbounds {
|
|
|
|
if err := j.inboundService.ResetAllClientTraffics(inbound.Id); err != nil {
|
|
|
|
logger.Warning("Failed to reset traffic for inbound", inbound.Id, ":", err)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
resetCount++
|
|
|
|
logger.Infof("Reset traffic for inbound %d (%s)", inbound.Id, inbound.Remark)
|
|
|
|
}
|
|
|
|
|
|
|
|
if resetCount > 0 {
|
2025-09-06 08:40:59 +00:00
|
|
|
logger.Infof("Periodic traffic reset completed: %d inbounds reseted", resetCount)
|
2025-08-31 18:57:53 +00:00
|
|
|
}
|
|
|
|
}
|