Make statsmanager and interfacemanager independent. Add reconnect logic for EventMonitoring

This commit is contained in:
Pim van Pelt
2025-06-24 07:36:10 +02:00
parent 1889934a9c
commit 3401c96112
5 changed files with 196 additions and 51 deletions

View File

@@ -15,19 +15,17 @@ type StatsCallback func(*api.InterfaceStats)
// StatsManager handles VPP statistics operations
type StatsManager struct {
client *VPPClient
interfaceManager *InterfaceManager
statsCallback StatsCallback
period time.Duration
running bool
client *VPPClient
statsCallback StatsCallback
period time.Duration
running bool
}
// NewStatsManager creates a new stats manager
func NewStatsManager(client *VPPClient, interfaceManager *InterfaceManager) *StatsManager {
func NewStatsManager(client *VPPClient) *StatsManager {
return &StatsManager{
client: client,
interfaceManager: interfaceManager,
period: time.Duration(*Period) * time.Second,
client: client,
period: time.Duration(*Period) * time.Second,
}
}
@@ -108,25 +106,6 @@ func (sm *StatsManager) statsRoutine() {
logger.Printf("VPP connection established")
wasConnected = true
// Initialize interface event watching
if sm.interfaceManager != nil {
if err := sm.interfaceManager.StartEventWatcher(); err != nil {
logger.Debugf("Failed to start interface event watching: %v", err)
} else {
logger.Debugf("Interface event watching started")
// Get initial interface details
if details, err := sm.interfaceManager.GetAllInterfaceDetails(); err != nil {
logger.Debugf("Failed to get initial interface details: %v", err)
} else {
logger.Debugf("Retrieved initial interface details for %d interfaces", len(details))
if sm.interfaceManager.eventCallback != nil {
sm.interfaceManager.eventCallback(details)
}
}
}
}
}
// Query stats if connected