Skip to main content
Glama
matcher.go2.33 kB
// Package watcher 实现规则匹配器 package worker import ( "strings" "github.com/weibaohui/k8m/pkg/eventhandler/config" "github.com/weibaohui/k8m/pkg/models" ) // RuleMatcher 规则匹配器(支持按集群匹配) type RuleMatcher struct { rules map[string]config.RuleConfig } // NewRuleMatcher 创建规则匹配器(按集群规则) func NewRuleMatcher(rules map[string]config.RuleConfig) *RuleMatcher { return &RuleMatcher{rules: rules} } // getRule 返回当前事件所属集群的规则;若不存在则返回空规则(表示不过滤) func (r *RuleMatcher) getRule(cluster string) config.RuleConfig { if r == nil || r.rules == nil { return config.RuleConfig{} } if rc, ok := r.rules[cluster]; ok { return rc } return config.RuleConfig{} } // Match 判断事件是否匹配对应集群规则 func (r *RuleMatcher) Match(event *models.K8sEvent) bool { rule := r.getRule(event.Cluster) if rule.IsEmpty() { return true } matched := false // 命名空间匹配 if len(rule.Namespaces) > 0 { for _, ns := range rule.Namespaces { if event.Namespace == ns { matched = true break } } if !matched && !rule.Reverse { return false } } // 原因匹配 包括message。 if len(rule.Reasons) > 0 { reasonMatched := false er := strings.ToLower(event.Reason) em := strings.ToLower(event.Message) for _, reason := range rule.Reasons { kw := strings.ToLower(reason) if kw != "" && (strings.Contains(er, kw) || strings.Contains(em, kw)) { reasonMatched = true break } } if !reasonMatched && !rule.Reverse { return false } matched = matched || reasonMatched } //增加名称匹配,包含匹配,不要求精确名称匹配 if len(rule.Names) > 0 { nameMatched := false for _, name := range rule.Names { if strings.Contains(event.Name, name) { nameMatched = true break } } if !nameMatched && !rule.Reverse { return false } matched = matched || nameMatched } // 未设置匹配条件时默认匹配 if !matched && len(rule.Namespaces) == 0 && len(rule.Names) == 0 && len(rule.Reasons) == 0 { matched = true } if rule.Reverse { return !matched } return matched } // UpdateRules 更新整套规则 func (r *RuleMatcher) UpdateRules(rules map[string]config.RuleConfig) { r.rules = rules }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/weibaohui/k8m'

If you have feedback or need assistance with the MCP directory API, please join our Discord server