diff --git a/locales/en.json b/locales/en.json index 8643d8716..c3fd4f837 100644 --- a/locales/en.json +++ b/locales/en.json @@ -158,6 +158,7 @@ "diagnosis_found_warnings": "Found {warnings} item(s) that could be improved for {category}.", "diagnosis_everything_ok": "Everything looks good for {category}!", "diagnosis_failed": "Failed to fetch diagnosis result for category '{category}' : {error}", + "diagnosis_no_cache": "No diagnosis cache yet for category '{category}'", "diagnosis_ip_connected_ipv4": "The server is connected to the Internet through IPv4 !", "diagnosis_ip_no_ipv4": "The server does not have a working IPv4.", "diagnosis_ip_connected_ipv6": "The server is connected to the Internet through IPv6 !", diff --git a/src/yunohost/diagnosis.py b/src/yunohost/diagnosis.py index 121a0c2ae..018140a49 100644 --- a/src/yunohost/diagnosis.py +++ b/src/yunohost/diagnosis.py @@ -61,28 +61,37 @@ def diagnosis_show(categories=[], issues=False, full=False, share=False): # Fetch all reports all_reports = [] for category in categories: - try: - report = Diagnoser.get_cached_report(category) - except Exception as e: - logger.error(m18n.n("diagnosis_failed", category=category, error=str(e))) + if not os.path.exists(Diagnoser.cache_file(category)): + logger.warning(m18n.n("diagnosis_no_cache", category=category)) + report = {"id": category, + "cached_for": -1, + "timestamp": -1, + "items": []} + Diagnoser.i18n(report) else: - add_ignore_flag_to_issues(report) - if not full: - del report["timestamp"] - del report["cached_for"] - report["items"] = [item for item in report["items"] if not item["ignored"]] - for item in report["items"]: - del item["meta"] - del item["ignored"] - if "data" in item: - del item["data"] - if issues: - report["items"] = [item for item in report["items"] if item["status"] in ["WARNING", "ERROR"]] - # Ignore this category if no issue was found - if not report["items"]: - continue + try: + report = Diagnoser.get_cached_report(category) + except Exception as e: + logger.error(m18n.n("diagnosis_failed", category=category, error=str(e))) + continue - all_reports.append(report) + add_ignore_flag_to_issues(report) + if not full: + del report["timestamp"] + del report["cached_for"] + report["items"] = [item for item in report["items"] if not item["ignored"]] + for item in report["items"]: + del item["meta"] + del item["ignored"] + if "data" in item: + del item["data"] + if issues: + report["items"] = [item for item in report["items"] if item["status"] in ["WARNING", "ERROR"]] + # Ignore this category if no issue was found + if not report["items"]: + continue + + all_reports.append(report) if share: from yunohost.utils.yunopaste import yunopaste