From 76b70ca710be4f146e8d5e0c16a735b56eb7d3de Mon Sep 17 00:00:00 2001
From: Bjarke Madsen <bjarke@nordu.net>
Date: Tue, 11 Feb 2025 15:29:49 +0100
Subject: [PATCH] add timeouts and logging on previously hidden errors

---
 brian_dashboard_manager/grafana/provision.py    | 17 +++++++++++++----
 .../inventory_provider/interfaces.py            | 10 +++++-----
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py
index 6cfafec..941346e 100644
--- a/brian_dashboard_manager/grafana/provision.py
+++ b/brian_dashboard_manager/grafana/provision.py
@@ -942,7 +942,12 @@ def provision(config):
     """
 
     start = time.time()
-    all_orgs = _provision_orgs(config)
+    try:
+        all_orgs = _provision_orgs(config)
+    except Exception:
+        logger.exception('Error when provisioning orgs')
+        return
+
     request = AdminRequest(**config)
     try:
         # needed for older versions of grafana (<11.0)
@@ -961,9 +966,13 @@ def provision(config):
             return None
 
     orgs = list(filter(lambda t: t[1] is not None, [(org, _find_org_config(org)) for org in all_orgs]))
-    interfaces = get_interfaces(config['inventory_provider'])
-    services = fetch_services(config['reporting_provider'])
-    regions = get_nren_regions(config['inventory_provider'])
+    try:
+        interfaces = get_interfaces(config['inventory_provider'])
+        services = fetch_services(config['reporting_provider'])
+        regions = get_nren_regions(config['inventory_provider'])
+    except Exception:
+        logger.exception('Error when fetching interfaces:')
+        return
     for org, org_config in orgs:
         _provision_org(config, org, org_config, interfaces, services, regions)
 
diff --git a/brian_dashboard_manager/inventory_provider/interfaces.py b/brian_dashboard_manager/inventory_provider/interfaces.py
index c342817..df6ba65 100644
--- a/brian_dashboard_manager/inventory_provider/interfaces.py
+++ b/brian_dashboard_manager/inventory_provider/interfaces.py
@@ -322,7 +322,7 @@ def _get_ip_info(host):
 
         return prev
     try:
-        r = requests.get(f'{host}/data/interfaces')
+        r = requests.get(f'{host}/data/interfaces', timeout=5)
         r.raise_for_status()
         interfaces = r.json()
     except HTTPError:
@@ -341,7 +341,7 @@ def get_interfaces(host):
     :return: A list of interfaces with IP information added, if present.
     """
 
-    r = requests.get(f'{host}/poller/interfaces')
+    r = requests.get(f'{host}/poller/interfaces', timeout=5)
     try:
         r.raise_for_status()
         interfaces = r.json()
@@ -415,7 +415,7 @@ def get_gws_direct(host):
     :return: GWS direct data
     """
 
-    r = requests.get(f'{host}/poller/gws/direct')
+    r = requests.get(f'{host}/poller/gws/direct', timeout=5)
     try:
         r.raise_for_status()
         interfaces = r.json()
@@ -435,7 +435,7 @@ def get_gws_indirect(host):
     :return: GWS Indirect data
     """
     try:
-        r = requests.get(f'{host}/poller/gws/indirect')
+        r = requests.get(f'{host}/poller/gws/indirect', timeout=5)
         r.raise_for_status()
         interfaces = r.json()
     except HTTPError:
@@ -452,7 +452,7 @@ def get_eumetsat_multicast_subscriptions(host):
     :return: EUMETSAT multicast subscriptions
     """
     try:
-        r = requests.get(f'{host}/poller/eumetsat-multicast')
+        r = requests.get(f'{host}/poller/eumetsat-multicast', timeout=5)
         r.raise_for_status()
         data = r.json()
     except HTTPError:
-- 
GitLab