From e986a133f80b6b1fb231887806f4853edd540d7b Mon Sep 17 00:00:00 2001
From: Andrew Smirnov <72158444+sandrew-uj@users.noreply.github.com>
Date: Sun, 19 Apr 2026 22:37:34 +0300
Subject: [PATCH] Add new hourly reset traffic (#3966)
* Add new hourly reset traffic
* fix
---
web/html/form/inbound.html | 2 ++
web/job/periodic_traffic_reset_job.go | 2 +-
web/service/inbound.go | 10 ++++++++++
web/translation/translate.ar_EG.toml | 1 +
web/translation/translate.en_US.toml | 1 +
web/translation/translate.es_ES.toml | 1 +
web/translation/translate.fa_IR.toml | 1 +
web/translation/translate.id_ID.toml | 1 +
web/translation/translate.ja_JP.toml | 1 +
web/translation/translate.pt_BR.toml | 1 +
web/translation/translate.ru_RU.toml | 1 +
web/translation/translate.tr_TR.toml | 1 +
web/translation/translate.uk_UA.toml | 1 +
web/translation/translate.vi_VN.toml | 1 +
web/translation/translate.zh_CN.toml | 1 +
web/translation/translate.zh_TW.toml | 1 +
web/web.go | 2 ++
17 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/web/html/form/inbound.html b/web/html/form/inbound.html
index 8b59dc28..5c982b6c 100644
--- a/web/html/form/inbound.html
+++ b/web/html/form/inbound.html
@@ -73,6 +73,8 @@
:dropdown-class-name="themeSwitcher.currentTheme">
{{ i18n
"pages.inbounds.periodicTrafficReset.never" }}
+ {{ i18n
+ "pages.inbounds.periodicTrafficReset.hourly" }}
{{ i18n
"pages.inbounds.periodicTrafficReset.daily" }}
{{ i18n
diff --git a/web/job/periodic_traffic_reset_job.go b/web/job/periodic_traffic_reset_job.go
index 6a7fb6f2..48aab2a1 100644
--- a/web/job/periodic_traffic_reset_job.go
+++ b/web/job/periodic_traffic_reset_job.go
@@ -37,7 +37,7 @@ func (j *PeriodicTrafficResetJob) Run() {
resetCount := 0
for _, inbound := range inbounds {
- resetInboundErr := j.inboundService.ResetAllTraffics()
+ resetInboundErr := j.inboundService.ResetInboundTraffic(inbound.Id)
if resetInboundErr != nil {
logger.Warning("Failed to reset traffic for inbound", inbound.Id, ":", resetInboundErr)
}
diff --git a/web/service/inbound.go b/web/service/inbound.go
index 8a3a4ae2..81f37389 100644
--- a/web/service/inbound.go
+++ b/web/service/inbound.go
@@ -1891,6 +1891,16 @@ func (s *InboundService) ResetAllTraffics() error {
return err
}
+func (s *InboundService) ResetInboundTraffic(id int) error {
+ db := database.GetDB()
+
+ result := db.Model(model.Inbound{}).
+ Where("id = ?", id).
+ Updates(map[string]any{"up": 0, "down": 0})
+
+ return result.Error
+}
+
func (s *InboundService) DelDepletedClients(id int) (err error) {
db := database.GetDB()
tx := db.Begin()
diff --git a/web/translation/translate.ar_EG.toml b/web/translation/translate.ar_EG.toml
index 24da2800..ace753e1 100644
--- a/web/translation/translate.ar_EG.toml
+++ b/web/translation/translate.ar_EG.toml
@@ -312,6 +312,7 @@
"daily" = "يومياً"
"weekly" = "أسبوعياً"
"monthly" = "شهرياً"
+"hourly" = "كل ساعة"
[pages.inbounds.toasts]
"obtain" = "تم الحصول عليه"
diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml
index a7b34eae..4cf1be07 100644
--- a/web/translation/translate.en_US.toml
+++ b/web/translation/translate.en_US.toml
@@ -312,6 +312,7 @@
"daily" = "Daily"
"weekly" = "Weekly"
"monthly" = "Monthly"
+"hourly" = "Hourly"
[pages.inbounds.toasts]
"obtain" = "Obtain"
diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml
index 8337ee27..8e76fba3 100644
--- a/web/translation/translate.es_ES.toml
+++ b/web/translation/translate.es_ES.toml
@@ -312,6 +312,7 @@
"daily" = "Diariamente"
"weekly" = "Semanalmente"
"monthly" = "Mensualmente"
+"hourly" = "Cada hora"
[pages.inbounds.toasts]
"obtain" = "Recibir"
diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml
index 3e15639e..c6ea9a84 100644
--- a/web/translation/translate.fa_IR.toml
+++ b/web/translation/translate.fa_IR.toml
@@ -312,6 +312,7 @@
"daily" = "روزانه"
"weekly" = "هفتگی"
"monthly" = "ماهانه"
+"hourly" = "هر ساعت"
[pages.inbounds.toasts]
"obtain" = "فراهمسازی"
diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml
index 23a5ad5b..32f79d5f 100644
--- a/web/translation/translate.id_ID.toml
+++ b/web/translation/translate.id_ID.toml
@@ -312,6 +312,7 @@
"daily" = "Harian"
"weekly" = "Mingguan"
"monthly" = "Bulanan"
+"hourly" = "Setiap jam"
[pages.inbounds.toasts]
"obtain" = "Dapatkan"
diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml
index cdf98d71..7360c033 100644
--- a/web/translation/translate.ja_JP.toml
+++ b/web/translation/translate.ja_JP.toml
@@ -312,6 +312,7 @@
"daily" = "毎日"
"weekly" = "毎週"
"monthly" = "毎月"
+"hourly" = "毎時"
[pages.inbounds.toasts]
"obtain" = "取得"
diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml
index dcc02929..b327ddba 100644
--- a/web/translation/translate.pt_BR.toml
+++ b/web/translation/translate.pt_BR.toml
@@ -312,6 +312,7 @@
"daily" = "Diariamente"
"weekly" = "Semanalmente"
"monthly" = "Mensalmente"
+"hourly" = "A cada hora"
[pages.inbounds.toasts]
"obtain" = "Obter"
diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml
index 75ca9841..2e5049f6 100644
--- a/web/translation/translate.ru_RU.toml
+++ b/web/translation/translate.ru_RU.toml
@@ -312,6 +312,7 @@
"daily" = "Ежедневно"
"weekly" = "Еженедельно"
"monthly" = "Ежемесячно"
+"hourly" = "Ежечасно"
[pages.inbounds.toasts]
"obtain" = "Получить"
diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml
index 6c49c07e..cbf3a048 100644
--- a/web/translation/translate.tr_TR.toml
+++ b/web/translation/translate.tr_TR.toml
@@ -312,6 +312,7 @@
"daily" = "Günlük"
"weekly" = "Haftalık"
"monthly" = "Aylık"
+"hourly" = "Saatlik"
[pages.inbounds.toasts]
"obtain" = "Elde Et"
diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml
index c2a2ec07..36ef8dff 100644
--- a/web/translation/translate.uk_UA.toml
+++ b/web/translation/translate.uk_UA.toml
@@ -312,6 +312,7 @@
"daily" = "Щодня"
"weekly" = "Щотижня"
"monthly" = "Щомісяця"
+"hourly" = "Щогодини"
[pages.inbounds.toasts]
"obtain" = "Отримати"
diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml
index 8670c673..a926c2cd 100644
--- a/web/translation/translate.vi_VN.toml
+++ b/web/translation/translate.vi_VN.toml
@@ -312,6 +312,7 @@
"daily" = "Hàng ngày"
"weekly" = "Hàng tuần"
"monthly" = "Hàng tháng"
+"hourly" = "Hàng giờ"
[pages.inbounds.toasts]
"obtain" = "Nhận"
diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml
index 8e42b2f2..1d0fc9c4 100644
--- a/web/translation/translate.zh_CN.toml
+++ b/web/translation/translate.zh_CN.toml
@@ -312,6 +312,7 @@
"daily" = "每日"
"weekly" = "每周"
"monthly" = "每月"
+"hourly" = "每小时"
[pages.inbounds.toasts]
"obtain" = "获取"
diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml
index f4bd78d7..7cac53c3 100644
--- a/web/translation/translate.zh_TW.toml
+++ b/web/translation/translate.zh_TW.toml
@@ -312,6 +312,7 @@
"daily" = "每日"
"weekly" = "每週"
"monthly" = "每月"
+"hourly" = "每小時"
[pages.inbounds.toasts]
"obtain" = "獲取"
diff --git a/web/web.go b/web/web.go
index 462e88a0..158bc048 100644
--- a/web/web.go
+++ b/web/web.go
@@ -327,6 +327,8 @@ func (s *Server) startTask() {
s.cron.AddJob("@daily", job.NewClearLogsJob())
// Inbound traffic reset jobs
+ // Run every hour
+ s.cron.AddJob("@hourly", job.NewPeriodicTrafficResetJob("hourly"))
// Run once a day, midnight
s.cron.AddJob("@daily", job.NewPeriodicTrafficResetJob("daily"))
// Run once a week, midnight between Sat/Sun