getDistanceVectorStatistics method
Gets comprehensive statistics for monitoring and analysis
routingTable - Routing table to analyze
Returns map with various statistics
Implementation
Map<String, dynamic> getDistanceVectorStatistics(
DistanceVectorRoutingTable<T> routingTable,
) {
final routes = routingTable.routes.values;
final costs = routes.map((r) => r.cost).toList();
final hopCounts = routes.map((r) => r.hopCount).toList();
return {
'totalRoutes': routes.length,
'totalNeighbors': routingTable.totalNeighbors,
'directlyConnected': routes.where((r) => r.isDirectlyConnected).length,
'indirectRoutes': routes.where((r) => !r.isDirectlyConnected).length,
'validRoutes': routes.where((r) => r.isValid).length,
'staleRoutes': routes.where((r) => r.isStale).length,
'averageCost':
costs.isEmpty ? 0.0 : costs.reduce((a, b) => a + b) / costs.length,
'maxCost': costs.isEmpty ? 0.0 : costs.reduce((a, b) => a > b ? a : b),
'minCost': costs.isEmpty ? 0.0 : costs.reduce((a, b) => a < b ? a : b),
'averageHopCount':
hopCounts.isEmpty
? 0.0
: hopCounts.reduce((a, b) => a + b) / hopCounts.length,
'maxHopCount':
hopCounts.isEmpty ? 0 : hopCounts.reduce((a, b) => a > b ? a : b),
'neighborUpdateFrequency': routingTable.neighborAdvertisements.length,
'recentAdvertisements':
routingTable.neighborAdvertisements.values
.where((ad) => ad.isRecent)
.length,
'convergenceStatus': _assessConvergenceStatus(routes.toList()),
};
}