diff --git a/brian_dashboard_manager/inventory_provider/interfaces.py b/brian_dashboard_manager/inventory_provider/interfaces.py index a6cbbcc0898919aa79634004807bc56e46c1e23d..a27ceecfaee82f49d18c984e012665ac9ff6050e 100644 --- a/brian_dashboard_manager/inventory_provider/interfaces.py +++ b/brian_dashboard_manager/inventory_provider/interfaces.py @@ -1,10 +1,49 @@ import requests import logging +from functools import reduce logger = logging.getLogger(__name__) -def get_interfaces(host): +def _get_ip_info(host): # pragma: no cover + def reduce_func(prev, curr): + + interface_name = curr.get('name') + router_name = curr.get('router') + if interface_name and router_name: + router = prev.get(router_name, {}) + interface = router.get(interface_name, {}) + ipv4 = curr.get('ipv4', []) + ipv6 = curr.get('ipv6', []) + interface['ipv4'] = ipv4 + interface['ipv6'] = ipv6 + router[interface_name] = interface + prev[router_name] = router + + return prev + r = requests.get(f'{host}/data/interfaces') + r.raise_for_status() + interfaces = r.json() + return reduce(reduce_func, interfaces, {}) + + +def get_interfaces(host): # pragma: no cover r = requests.get(f'{host}/poller/interfaces') r.raise_for_status() - return r.json() + interfaces = r.json() + ip_info = _get_ip_info(host) + + def enrich(interface): + router_name = interface.get('router') + router = ip_info.get(router_name) + if not router: + return interface + + ip = router.get(interface['name']) + ipv4 = ip['ipv4'] + ipv6 = ip['ipv6'] + interface['ipv4'] = ipv4 + interface['ipv6'] = ipv6 + return interface + enriched = list(map(enrich, interfaces)) + return enriched