diff --git a/src/benchcab/benchcab.py b/src/benchcab/benchcab.py index ac6ef08..ee079aa 100644 --- a/src/benchcab/benchcab.py +++ b/src/benchcab/benchcab.py @@ -293,14 +293,22 @@ def fluxsite_run_tasks(self, config_path: str): config = self._get_config(config_path) self._validate_environment(project=config["project"], modules=config["modules"]) tasks = self._get_fluxsite_tasks(config) + n_models = len(self._get_models(config)) + n_sites = len(get_met_forcing_file_names(config["fluxsite"]["experiment"])) + n_science_configurations = len(config["science_configurations"]) - logger.info("Running fluxsite tasks...") + logger.info(f"Running fluxsite tasks...") + logger.info(f"tasks: {len(tasks)} (models: {n_models}, sites: {n_sites}, science configurations: {n_science_configurations})") if config["fluxsite"]["multiprocess"]: ncpus = config["fluxsite"]["pbs"]["ncpus"] fluxsite.run_tasks_in_parallel(tasks, n_processes=ncpus) else: fluxsite.run_tasks(tasks) - logger.info("Successfully ran fluxsite tasks") + + tasks_failed = [task for task in tasks if not task.success] + n_failed = len(tasks_failed) + n_success = len(tasks) - n_failed + logger.info(f"{n_failed} failed, {n_success} passed") def fluxsite_bitwise_cmp(self, config_path: str): """Endpoint for `benchcab fluxsite-bitwise-cmp`.""" @@ -316,14 +324,22 @@ def fluxsite_bitwise_cmp(self, config_path: str): comparisons = fluxsite.get_fluxsite_comparisons( self._get_fluxsite_tasks(config) ) + n_models = len(self._get_models(config)) + n_sites = len(get_met_forcing_file_names(config["fluxsite"]["experiment"])) + n_science_configurations = len(config["science_configurations"]) logger.info("Running comparison tasks...") + logger.info(f"tasks: {len(comparisons)} (models: {n_models}, sites: {n_sites}, science configurations: {n_science_configurations})") if config["fluxsite"]["multiprocess"]: ncpus = config["fluxsite"]["pbs"]["ncpus"] run_comparisons_in_parallel(comparisons, n_processes=ncpus) else: run_comparisons(comparisons) - logger.info("Successfully ran comparison tasks") + + tasks_failed = [task for task in comparisons if not task.success] + n_failed = len(tasks_failed) + n_success = len(comparisons) - n_failed + logger.info(f"{n_failed} failed, {n_success} passed") def fluxsite(self, config_path: str, no_submit: bool, skip: list[str]): """Endpoint for `benchcab fluxsite`.""" diff --git a/src/benchcab/comparison.py b/src/benchcab/comparison.py index 495b9d7..cfe0161 100644 --- a/src/benchcab/comparison.py +++ b/src/benchcab/comparison.py @@ -37,6 +37,7 @@ def __init__( self.files = files self.task_name = task_name self.logger = get_logger() + self.success = True def run(self) -> None: """Executes `nccmp -df` on the NetCDF files pointed to by `self.files`.""" @@ -57,6 +58,7 @@ def run(self) -> None: ) with output_file.open("w", encoding="utf-8") as file: file.write(exc.stdout) + self.success = False self.logger.error(f"Failure: files {file_a.name} {file_b.name} differ. ") self.logger.error(f"Results of diff have been written to {output_file}") diff --git a/src/benchcab/fluxsite.py b/src/benchcab/fluxsite.py index 816f5a4..738dc6e 100644 --- a/src/benchcab/fluxsite.py +++ b/src/benchcab/fluxsite.py @@ -59,6 +59,7 @@ def __init__( self.sci_conf_id = sci_conf_id self.sci_config = sci_config self.logger = get_logger() + self.success = True def get_task_name(self) -> str: """Returns the file name convention used for this task.""" @@ -240,6 +241,7 @@ def run_cable(self): ) except CalledProcessError as exc: self.logger.debug(f"Error: CABLE returned an error for task {task_name}") + self.success = False raise CableError from exc def add_provenance_info(self):