| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | 
							- package job
 
- import (
 
- 	"github.com/mhsanaei/3x-ui/v2/logger"
 
- 	"github.com/mhsanaei/3x-ui/v2/web/service"
 
- )
 
- // Period represents the time period for traffic resets.
 
- type Period string
 
- // PeriodicTrafficResetJob resets traffic statistics for inbounds based on their configured reset period.
 
- type PeriodicTrafficResetJob struct {
 
- 	inboundService service.InboundService
 
- 	period         Period
 
- }
 
- // NewPeriodicTrafficResetJob creates a new periodic traffic reset job for the specified period.
 
- func NewPeriodicTrafficResetJob(period Period) *PeriodicTrafficResetJob {
 
- 	return &PeriodicTrafficResetJob{
 
- 		period: period,
 
- 	}
 
- }
 
- // Run resets traffic statistics for all inbounds that match the configured reset period.
 
- func (j *PeriodicTrafficResetJob) Run() {
 
- 	inbounds, err := j.inboundService.GetInboundsByTrafficReset(string(j.period))
 
- 	if err != nil {
 
- 		logger.Warning("Failed to get inbounds for traffic reset:", err)
 
- 		return
 
- 	}
 
- 	if len(inbounds) == 0 {
 
- 		return
 
- 	}
 
- 	logger.Infof("Running periodic traffic reset job for period: %s (%d matching inbounds)", j.period, len(inbounds))
 
- 	resetCount := 0
 
- 	for _, inbound := range inbounds {
 
- 		resetInboundErr := j.inboundService.ResetAllTraffics()
 
- 		if resetInboundErr != nil {
 
- 			logger.Warning("Failed to reset traffic for inbound", inbound.Id, ":", resetInboundErr)
 
- 		}
 
- 		resetClientErr := j.inboundService.ResetAllClientTraffics(inbound.Id)
 
- 		if resetClientErr != nil {
 
- 			logger.Warning("Failed to reset traffic for all users of inbound", inbound.Id, ":", resetClientErr)
 
- 		}
 
- 		if resetInboundErr == nil && resetClientErr == nil {
 
- 			resetCount++
 
- 		}
 
- 	}
 
- 	if resetCount > 0 {
 
- 		logger.Infof("Periodic traffic reset completed: %d inbounds reset", resetCount)
 
- 	}
 
- }
 
 
  |