From 1debd1b1d814ea8b300e0cc0778f053cc3c24416 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 24 Nov 2025 22:58:06 +0800 Subject: [PATCH] =?UTF-8?q?api/shield=E6=8E=A5=E5=8F=A3=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E6=9C=AC=E5=9C=B0=E5=92=8C=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E5=B1=8F=E8=94=BD=E8=A7=84=E5=88=99=E6=95=B0=E9=87=8F=E7=9A=84?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shield/manager.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/shield/manager.go b/shield/manager.go index ec43b41..bbc464d 100644 --- a/shield/manager.go +++ b/shield/manager.go @@ -46,6 +46,8 @@ type ShieldManager struct { updateCtx context.Context updateCancel context.CancelFunc updateRunning bool + localRulesCount int // 本地规则数量 + remoteRulesCount int // 远程规则数量 } // NewShieldManager 创建屏蔽管理器实例 @@ -62,6 +64,8 @@ func NewShieldManager(config *config.ShieldConfig) *ShieldManager { resolvedDomainsCount: make(map[string]int), updateCtx: ctx, updateCancel: cancel, + localRulesCount: 0, + remoteRulesCount: 0, } // 加载已保存的计数数据 @@ -81,6 +85,8 @@ func (m *ShieldManager) LoadRules() error { m.regexRules = []regexRule{} m.regexExceptions = []regexRule{} m.hostsMap = make(map[string]string) + m.localRulesCount = 0 + m.remoteRulesCount = 0 // 保留计数数据,不随规则重新加载而清空 // 加载本地规则文件 @@ -118,6 +124,10 @@ func (m *ShieldManager) loadLocalRules() error { } defer file.Close() + // 记录加载前的规则数量,用于计算本地规则数量 + beforeDomainRules := len(m.domainRules) + beforeRegexRules := len(m.regexRules) + scanner := bufio.NewScanner(file) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) @@ -127,6 +137,9 @@ func (m *ShieldManager) loadLocalRules() error { m.parseRule(line) } + // 更新本地规则计数 + m.localRulesCount = (len(m.domainRules) - beforeDomainRules) + (len(m.regexRules) - beforeRegexRules) + return scanner.Err() } @@ -237,6 +250,10 @@ func (m *ShieldManager) loadCachedRules(filePath string) error { } defer file.Close() + // 记录加载前的规则数量,用于计算远程规则数量 + beforeDomainRules := len(m.domainRules) + beforeRegexRules := len(m.regexRules) + body, err := ioutil.ReadAll(file) if err != nil { return err @@ -251,6 +268,10 @@ func (m *ShieldManager) loadCachedRules(filePath string) error { m.parseRule(line) } + // 更新远程规则计数 + remoteRulesAdded := (len(m.domainRules) - beforeDomainRules) + (len(m.regexRules) - beforeRegexRules) + m.remoteRulesCount += remoteRulesAdded + return nil } @@ -1117,6 +1138,9 @@ func (m *ShieldManager) GetRules() map[string]interface{} { hostsRulesList = append(hostsRulesList, ip+"\t"+domain) } + // 计算总规则数量 + totalRulesCount := len(m.domainRules) + len(m.regexRules) + return map[string]interface{}{ "domainRules": domainRulesList, "domainExceptions": domainExceptionsList, @@ -1124,5 +1148,8 @@ func (m *ShieldManager) GetRules() map[string]interface{} { "regexExceptions": regexExceptionsList, "hostsRules": hostsRulesList, "blacklists": m.config.Blacklists, + "localRulesCount": m.localRulesCount, + "remoteRulesCount": m.remoteRulesCount, + "totalRulesCount": totalRulesCount, } }