diff --git a/.gitignore b/.gitignore index 1db500f5..a2c0e3ac 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ __pycache__/* kube-burner* kube_burner* recommender_*.json +resiliency*.json # Project files .ropeproject diff --git a/krkn/prometheus/collector.py b/krkn/prometheus/collector.py index 0e6be15f..42ee5168 100644 --- a/krkn/prometheus/collector.py +++ b/krkn/prometheus/collector.py @@ -68,7 +68,9 @@ def evaluate_slos( passed = slo_passed(response) if passed is None: - logging.warning("SLO '%s' query returned no data; excluding from score.", name) + # Absence of data indicates the condition did not trigger; treat as pass. + logging.debug("SLO '%s' query returned no data; assuming pass.", name) + results[name] = True else: results[name] = passed except Exception as exc: diff --git a/run_kraken.py b/run_kraken.py index 25091984..619c5ca1 100644 --- a/run_kraken.py +++ b/run_kraken.py @@ -32,6 +32,7 @@ from krkn_lib.ocp import KrknOpenshift from krkn_lib.telemetry.k8s import KrknTelemetryKubernetes from krkn_lib.telemetry.ocp import KrknTelemetryOpenshift from krkn_lib.models.telemetry import ChaosRunTelemetry +from krkn_lib.models.k8s import ResiliencyReport from krkn_lib.utils import SafeLogger from krkn_lib.utils.functions import get_yaml_item_value, get_junit_test_case @@ -113,10 +114,6 @@ def main(options, command: Optional[str]) -> int: config["performance_monitoring"], "enable_metrics", False ) - # Disable resiliency if Prometheus URL is not available - if (not prometheus_url or prometheus_url.strip() == "") and run_mode != "disabled": - logging.warning("Prometheus URL not provided; disabling resiliency score features.") - run_mode = "disabled" # Default placeholder; will be overridden if a Prometheus URL is available prometheus = None @@ -250,6 +247,11 @@ def main(options, command: Optional[str]) -> int: else: logging.info("Cluster version CRD not detected, skipping") + # Final check: ensure Prometheus URL is available; disable resiliency if not + if (not prometheus_url or prometheus_url.strip() == "") and run_mode != "disabled": + logging.warning("Prometheus URL not provided; disabling resiliency score features.") + run_mode = "disabled" + # KrknTelemetry init telemetry_k8s = KrknTelemetryKubernetes( safe_logger, kubecli, config["telemetry"] @@ -504,7 +506,13 @@ def main(options, command: Optional[str]) -> int: telemetry_json = chaos_telemetry.to_json() decoded_chaos_run_telemetry = ChaosRunTelemetry(json.loads(telemetry_json)) if resiliency_obj and hasattr(resiliency_obj, "summary"): - decoded_chaos_run_telemetry.overall_resiliency_report = resiliency_obj.get_summary() + summary_dict = resiliency_obj.get_summary() + decoded_chaos_run_telemetry.overall_resiliency_report = ResiliencyReport( + json_object=summary_dict, + resiliency_score=summary_dict.get("resiliency_score", 0), + passed_slos=summary_dict.get("passed_slos", 0), + total_slos=summary_dict.get("total_slos", 0) + ) chaos_output.telemetry = decoded_chaos_run_telemetry logging.info(f"Chaos data:\n{chaos_output.to_json()}") if enable_elastic: