diff --git a/dtcli/utilities/cadcclient.py b/dtcli/utilities/cadcclient.py index 1ba461c..4e78074 100644 --- a/dtcli/utilities/cadcclient.py +++ b/dtcli/utilities/cadcclient.py @@ -3,6 +3,7 @@ import logging import os import sys +from concurrent.futures import ThreadPoolExecutor from io import StringIO from multiprocessing import Process # Use the standard library only from typing import Any, Dict, List, Optional, Tuple @@ -410,23 +411,25 @@ def status( ] if not certfile: certfile = procure(key="vospace_certfile") - minoc_status = False - luskan_status = False - for index, url in enumerate(urls): + + def check_url(url: str) -> bool: response = requests.get(url, cert=certfile, allow_redirects=True) try: response.raise_for_status() authorised = response.headers.get("x-vo-authenticated") if isinstance(authorised, str): - if index == 0: - minoc_status = True - else: - luskan_status = True + return True else: raise TypeError except HTTPError as error: logger.warning(error) logger.warning(f"{url.split('/')[3]} is down.") + return False except TypeError: logger.error("Canfar certificate is not valid.") - return minoc_status, luskan_status + return False + + with ThreadPoolExecutor(max_workers=len(urls)) as executor: + results = list(executor.map(check_url, urls)) + + return results[0], results[1]