Newer
Older
import requests
import logging
from functools import reduce
logger = logging.getLogger(__name__)
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
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
def get_gws_direct(host):
r = requests.get(f'{host}/poller/gws/direct')
r.raise_for_status()
interfaces = r.json()
return interfaces