# All retries failed return TaskResult( task_id=task_id, args=tuple(replacements.items()), success=False, stdout="", stderr=stderr.strip() if 'stderr' in locals() else "Unknown error", exit_code=exit_code if 'exit_code' in locals() else -1, duration=time.time() - start_time, retries=retries ) class Mpall: """Main application class."""
formatter = logging.Formatter( '%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # Console handler console = logging.StreamHandler(sys.stdout) console.setLevel(logging.DEBUG if verbose else logging.INFO) console.setFormatter(formatter) self.logger.addHandler(console) # File handler (if specified) if log_file: file_handler = logging.FileHandler(log_file) file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(formatter) self.logger.addHandler(file_handler) duration=time.time() - start_time
parser.add_argument( "--output-summary", help="Save summary to text file" ) stderr = CommandExecutor.run(cmd
def _signal_handler(self, signum, frame): """Handle Ctrl+C gracefully.""" self.logger.warning("Interrupt received, finishing current tasks...") self.cancel = True retries=attempt ) if attempt <
# Execute with retries for attempt in range(retries + 1): exit_code, stdout, stderr = CommandExecutor.run(cmd, timeout, env) if exit_code == 0: return TaskResult( task_id=task_id, args=tuple(replacements.items()), success=True, stdout=stdout.strip(), stderr=stderr.strip(), exit_code=exit_code, duration=time.time() - start_time, retries=attempt ) if attempt < retries: time.sleep(1) # Wait before retry