From b8eca87a89242449e0397a479799e7dbde9bdebd Mon Sep 17 00:00:00 2001 From: opsx Date: Sun, 1 Nov 2026 06:06:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(alerts):=20Pro=20=E5=88=B0=E6=9C=9F?= =?UTF-8?q?=E5=90=8E=E5=91=8A=E8=AD=A6=E5=BC=95=E6=93=8E=E5=81=9C=E6=AD=A2?= =?UTF-8?q?=E8=AF=84=E4=BC=B0=20+=20=E8=A7=84=E5=88=99/=E9=80=9A=E9=81=93?= =?UTF-8?q?=E5=86=99=E6=93=8D=E4=BD=9C=E6=8C=82=20RequirePro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户指出的漏洞:免费期配完规则,到期后若引擎继续跑,告警等于免费功能,Pro 形同虚设; 重装又拿新试用继续白用。修复: - 引擎每轮先查 IsPro(),非 Pro 整轮跳过(规则与投递历史保留,重新授权即恢复) - 规则建/改、通道保存、立即检查挂 RequirePro 闸门(读列表/历史保持可见,升级引导有据可依) - 试用期内 IsPro=true 照常工作(实测建规则 200) --- backend/routers/router.go | 10 +++++----- backend/services/alert.go | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/backend/routers/router.go b/backend/routers/router.go index 67b5114..b188292 100644 --- a/backend/routers/router.go +++ b/backend/routers/router.go @@ -143,14 +143,14 @@ func SetupRouter() *gin.Engine { alertNotify.PUT("/notify-config", middleware.AdminAuth(), alertsCtrl.UpdateNotifyConfig) alertNotify.POST("/notify-config/test", middleware.AdminAuth(), alertsCtrl.TestNotifyConfig) alertNotify.GET("/rules", alertsCtrl.ListRules) - alertNotify.POST("/rules", middleware.AdminAuth(), alertsCtrl.CreateRule) - alertNotify.PUT("/rules/:id", middleware.AdminAuth(), alertsCtrl.UpdateRule) + alertNotify.POST("/rules", middleware.AdminAuth(), middleware.RequirePro(), alertsCtrl.CreateRule) + alertNotify.PUT("/rules/:id", middleware.AdminAuth(), middleware.RequirePro(), alertsCtrl.UpdateRule) alertNotify.DELETE("/rules/:id", middleware.AdminAuth(), alertsCtrl.DeleteRule) - alertNotify.POST("/check", middleware.AdminAuth(), alertsCtrl.CheckNow) + alertNotify.POST("/check", middleware.AdminAuth(), middleware.RequirePro(), alertsCtrl.CheckNow) alertNotify.GET("/deliveries", alertsCtrl.Deliveries) alertNotify.GET("/channels", alertsCtrl.ListChannels) - alertNotify.POST("/channels", middleware.AdminAuth(), alertsCtrl.SaveChannel) - alertNotify.PUT("/channels/:id", middleware.AdminAuth(), alertsCtrl.SaveChannel) + alertNotify.POST("/channels", middleware.AdminAuth(), middleware.RequirePro(), alertsCtrl.SaveChannel) + alertNotify.PUT("/channels/:id", middleware.AdminAuth(), middleware.RequirePro(), alertsCtrl.SaveChannel) alertNotify.DELETE("/channels/:id", middleware.AdminAuth(), alertsCtrl.DeleteChannel) alertNotify.POST("/channels/test", middleware.AdminAuth(), alertsCtrl.TestChannel) } diff --git a/backend/services/alert.go b/backend/services/alert.go index ca316e7..798eedb 100644 --- a/backend/services/alert.go +++ b/backend/services/alert.go @@ -84,6 +84,12 @@ func StartAlertEngine() { log.Printf("[alert] 上一轮检查仍在运行,跳过本轮") continue } + // Pro 闸门:日志告警是 Pro 功能,免费/试用到期后引擎不再评估 + // (规则与历史保留,重新授权即恢复,不删任何数据) + if !IsPro() { + alertCheckRunning.Store(false) + continue + } start := time.Now() ok := true func() {