Add port flap and port down error tracking with faster ping

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Ian Gulliver
2026-01-31 13:01:07 -08:00
parent d1b4de01e8
commit 5a7596b456
5 changed files with 88 additions and 15 deletions

View File

@@ -12,6 +12,8 @@ const (
ErrorTypeNew = "new"
ErrorTypeUnreachable = "unreachable"
ErrorTypeHighUtilization = "high_utilization"
ErrorTypePortFlap = "port_flap"
ErrorTypePortDown = "port_down"
)
type Error struct {
@@ -139,6 +141,58 @@ func (e *ErrorTracker) AddUtilizationError(node *Node, portName string, utilizat
e.t.NotifyUpdate()
}
func (e *ErrorTracker) AddPortFlap(node *Node, portName string) {
e.mu.Lock()
defer e.mu.Unlock()
key := "flap:" + node.ID + ":" + portName
now := time.Now()
if existing, ok := e.errors[key]; ok {
existing.LastUpdated = now
e.t.NotifyUpdate()
return
}
e.nextID++
e.errors[key] = &Error{
ID: fmt.Sprintf("err-%d", e.nextID),
NodeID: node.ID,
NodeName: node.DisplayName(),
Port: portName,
Type: ErrorTypePortFlap,
FirstSeen: now,
LastUpdated: now,
}
e.t.NotifyUpdate()
}
func (e *ErrorTracker) AddPortDown(node *Node, portName string) {
e.mu.Lock()
defer e.mu.Unlock()
key := "down:" + node.ID + ":" + portName
now := time.Now()
if existing, ok := e.errors[key]; ok {
existing.LastUpdated = now
e.t.NotifyUpdate()
return
}
e.nextID++
e.errors[key] = &Error{
ID: fmt.Sprintf("err-%d", e.nextID),
NodeID: node.ID,
NodeName: node.DisplayName(),
Port: portName,
Type: ErrorTypePortDown,
FirstSeen: now,
LastUpdated: now,
}
e.t.NotifyUpdate()
}
func (e *ErrorTracker) ClearError(errorID string) {
e.mu.Lock()
defer e.mu.Unlock()