diff --git a/brian_dashboard_manager/inventory_provider/interfaces.py b/brian_dashboard_manager/inventory_provider/interfaces.py index dcdd6dd332c66b07880b0a5bc17bca6bd831be12..dec23c68cd4cf98deee757122f8bf4e6bda41e83 100644 --- a/brian_dashboard_manager/inventory_provider/interfaces.py +++ b/brian_dashboard_manager/inventory_provider/interfaces.py @@ -1,8 +1,9 @@ -from enum import Enum, auto import requests import logging import jsonschema +from requests.exceptions import HTTPError +from enum import Enum, auto from functools import reduce logger = logging.getLogger(__name__) @@ -300,9 +301,14 @@ def _get_ip_info(host): prev[router_name] = router return prev - r = requests.get(f'{host}/data/interfaces') - r.raise_for_status() - interfaces = r.json() + try: + r = requests.get(f'{host}/data/interfaces') + r.raise_for_status() + interfaces = r.json() + except HTTPError: + logger.exception('Failed to get IP info') + interfaces = [] + jsonschema.validate(interfaces, ROUTER_INTERFACES_SCHEMA) return reduce(reduce_func, interfaces, {}) @@ -316,8 +322,13 @@ def get_interfaces(host): """ r = requests.get(f'{host}/poller/interfaces') - r.raise_for_status() - interfaces = r.json() + try: + r.raise_for_status() + interfaces = r.json() + except HTTPError: + logger.exception('Failed to get interfaces') + interfaces = [] + jsonschema.validate(interfaces, INTERFACE_LIST_SCHEMA) ip_info = _get_ip_info(host) @@ -336,6 +347,7 @@ def get_interfaces(host): interface['ipv4'] = ipv4 interface['ipv6'] = ipv6 return interface + filtered = filter(lambda i: len(i['dashboards']) > 0, interfaces) enriched = list(map(enrich, filtered)) return enriched @@ -351,8 +363,13 @@ def get_gws_direct(host): """ r = requests.get(f'{host}/poller/gws/direct') - r.raise_for_status() - interfaces = r.json() + try: + r.raise_for_status() + interfaces = r.json() + except HTTPError: + logger.exception('Failed to get GWS direct data') + interfaces = [] + jsonschema.validate(interfaces, GWS_DIRECT_DATA_SCHEMA) return interfaces @@ -364,10 +381,13 @@ def get_gws_indirect(host): :param host: Hostname to perform the request to. :return: GWS Indirect data """ - - r = requests.get(f'{host}/poller/gws/indirect') - r.raise_for_status() - interfaces = r.json() + try: + r = requests.get(f'{host}/poller/gws/indirect') + r.raise_for_status() + interfaces = r.json() + except HTTPError: + logger.exception('Failed to get GWS indirect data') + interfaces = [] return interfaces @@ -378,9 +398,13 @@ def get_eumetsat_multicast_subscriptions(host): :param host: Hostname to perform the request to. :return: EUMETSAT multicast subscriptions """ + try: + r = requests.get(f'{host}/poller/eumetsat-multicast') + r.raise_for_status() + data = r.json() + except HTTPError: + logger.exception('Failed to get EUMETSAT multicast subscriptions') + data = [] - r = requests.get(f'{host}/poller/eumetsat-multicast') - r.raise_for_status() - data = r.json() jsonschema.validate(data, MULTICAST_SUBSCRIPTION_LIST_SCHEMA) return data