getOSPFStatistics method
Map<String, dynamic>
getOSPFStatistics(
- OSPFRoutingTable<
T> routingTable, - Map<
T, List< lsdbLinkStateAdvertisement< >T> >
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,
),
),
),
};
}