def _save_results_json(self): """Save detailed results to JSON file.""" data = "timestamp": datetime.now().isoformat(), "command": self.args.command, "total_tasks": len(self.results), "successful": sum(1 for r in self.results if r.success), "failed": sum(1 for r in self.results if not r.success), "results": [ "task_id": r.task_id, "args": dict(r.args), "success": r.success, "stdout": r.stdout, "stderr": r.stderr, "exit_code": r.exit_code, "duration": r.duration, "retries": r.retries for r in self.results ] with open(self.args.output_json, 'w') as f: json.dump(data, f, indent=2) self.logger.info(f"Results saved to self.args.output_json")
parser.add_argument( "-w", "--workers", type=int, default=4, help="Number of parallel workers (default: 4)" ) "results": [ "task_id": r.task_id
# Build command with replacements cmd = [] for arg in args_template: replaced = arg for key, value in replacements.items(): replaced = replaced.replace(f"key", str(value)) cmd.append(replaced) 'w') as f: json.dump(data
import argparse import logging import sys import time import subprocess import signal import threading from concurrent.futures import ProcessPoolExecutor, as_completed from typing import List, Dict, Any, Optional, Tuple from dataclasses import dataclass, field from datetime import datetime import json import os as_completed from typing import List
parser.add_argument( "-t", "--timeout", type=int, default=60, help="Timeout per command in seconds (default: 60)" )
No account yet?
Create an Account