Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/web/job
diff options
context:
space:
mode:
authorVadim Iskuchekov <egregors@pm.me>2025-09-16 10:24:32 +0300
committerGitHub <noreply@github.com>2025-09-16 10:24:32 +0300
commit9623e875113adad1fcbae7370e043db040462f2a (patch)
tree925a7b445bfb7bd41b4bdec665d5c75353dafcfa /web/job
parentbc0518391ef06d3d6b9f826085b73d1f1e35c913 (diff)
feat: Simple periodic traffic reset (for Inbounds) – daily | weekly | monthly (#3407)
* Add periodic traffic reset feature model and ui with localization support * Remove periodic traffic reset fields from client * fix: add periodicTrafficReset field to inbound data structure * feat: implement periodic traffic reset job and integrate with cron scheduler * feat: enhance periodic traffic reset functionality with scheduling and inbound filtering * refactor: rename periodicTrafficReset to trafficReset and add lastTrafficResetTime field * feat: add periodic client traffic reset job and schedule tasks * Update web/job/periodic_traffic_reset_job.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update web/job/periodic_client_traffic_reset_job.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update web/service/inbound.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * refactor: rename periodicTrafficReset to trafficReset and add lastTrafficResetTime * feat: add last traffic reset time display and update logic in inbound service * fix: correct log message for completed periodic traffic reset * refactor: update traffic reset fields in Inbound model and remove unused client traffic reset job * refactor: remove unused traffic reset logic and clean up client model fields * cleanup comments * fix
Diffstat (limited to 'web/job')
-rw-r--r--web/job/periodic_traffic_reset_job.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/web/job/periodic_traffic_reset_job.go b/web/job/periodic_traffic_reset_job.go
new file mode 100644
index 00000000..79001973
--- /dev/null
+++ b/web/job/periodic_traffic_reset_job.go
@@ -0,0 +1,44 @@
+package job
+
+import (
+ "x-ui/logger"
+ "x-ui/web/service"
+)
+
+type Period string
+
+type PeriodicTrafficResetJob struct {
+ inboundService service.InboundService
+ period Period
+}
+
+func NewPeriodicTrafficResetJob(period Period) *PeriodicTrafficResetJob {
+ return &PeriodicTrafficResetJob{
+ period: period,
+ }
+}
+
+func (j *PeriodicTrafficResetJob) Run() {
+ 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)
+ 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 {
+ logger.Infof("Periodic traffic reset completed: %d inbounds reset", resetCount)
+ }
+}