fix: require trap rule before alerting
This commit is contained in:
@@ -498,21 +498,7 @@ func (e *Engine) HandleTrap(addr *net.UDPAddr, pkt *gosnmp.SnmpPacket) {
|
|||||||
rules := e.trapRules
|
rules := e.trapRules
|
||||||
e.mu.RUnlock()
|
e.mu.RUnlock()
|
||||||
|
|
||||||
var matched *models.TrapRule
|
matched := firstMatchingTrapRule(rules, trapOID, fp)
|
||||||
for i := range rules {
|
|
||||||
if trapRuleMatches(&rules[i], trapOID, fp) {
|
|
||||||
matched = &rules[i]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if matched == nil && dict != nil && strings.TrimSpace(dict.SeverityCode) != "" {
|
|
||||||
matched = &models.TrapRule{
|
|
||||||
AlertName: firstNonEmpty(firstNonEmpty(dict.Name, dict.Title), "SNMP Trap"),
|
|
||||||
SeverityCode: dict.SeverityCode,
|
|
||||||
PolicyID: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if matched == nil {
|
if matched == nil {
|
||||||
rawBytes, mErr := json.Marshal(fp)
|
rawBytes, mErr := json.Marshal(fp)
|
||||||
if mErr != nil {
|
if mErr != nil {
|
||||||
@@ -677,6 +663,15 @@ func trapRuleMatches(rule *models.TrapRule, trapOID, varbindFP string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func firstMatchingTrapRule(rules []models.TrapRule, trapOID, varbindFP string) *models.TrapRule {
|
||||||
|
for i := range rules {
|
||||||
|
if trapRuleMatches(&rules[i], trapOID, varbindFP) {
|
||||||
|
return &rules[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func firstNonEmpty(a, b string) string {
|
func firstNonEmpty(a, b string) string {
|
||||||
if strings.TrimSpace(a) != "" {
|
if strings.TrimSpace(a) != "" {
|
||||||
return a
|
return a
|
||||||
|
|||||||
Reference in New Issue
Block a user