getOSPFStatistics method

Map<String, dynamic> getOSPFStatistics(
  1. OSPFRoutingTable<T> routingTable,
  2. Map<T, List<LinkStateAdvertisement<T>>> lsdb
)

Gets OSPF statistics for monitoring and analysis

routingTable - Routing table to analyze lsdb - Link-state database to analyze

Returns map with various statistics

Implementation

Map<String, dynamic> getOSPFStatistics(
  OSPFRoutingTable<T> routingTable,
  Map<T, List<LinkStateAdvertisement<T>>> lsdb,
) {
  final routes = routingTable.routes.values;
  final costs = routes.map((r) => r.cost).toList();
  final areas = routingTable.areaRoutes.keys.toList();

  return {
    'totalRoutes': routes.length,
    'totalAreas': areas.length,
    'directlyConnected': routes.where((r) => r.isDirectlyConnected).length,
    'indirectRoutes': routes.where((r) => !r.isDirectlyConnected).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),
    'lsdbSize': lsdb.values.fold(0, (sum, lsas) => sum + lsas.length),
    'areaDistribution': Map.fromEntries(
      areas.map(
        (area) => MapEntry(area, routingTable.getRoutesInArea(area).length),
      ),
    ),
    'routeTypeDistribution': Map.fromEntries(
      LinkStateType.values.map(
        (type) => MapEntry(
          type.toString(),
          routingTable.getRoutesByType(type).length,
        ),
      ),
    ),
  };
}