getDistanceVectorStatistics method

Map<String, dynamic> getDistanceVectorStatistics(
  1. DistanceVectorRoutingTable<T> routingTable
)

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()),
  };
}