mirror of
https://github.com/mblanke/GooseStrike.git
synced 2026-03-01 05:50:22 -05:00
Add roadmap API and mock dashboard
This commit is contained in:
47
runner_utils.py
Normal file
47
runner_utils.py
Normal file
@@ -0,0 +1,47 @@
|
||||
"""Shared helpers for GooseStrike tool runners."""
|
||||
from __future__ import annotations
|
||||
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
LOG_DIR = Path("logs")
|
||||
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
|
||||
def run_subprocess(command: List[str], log_prefix: str, stdin: Optional[str] = None) -> Dict[str, Any]:
|
||||
timestamp = datetime.utcnow().strftime("%Y%m%d-%H%M%S")
|
||||
log_path = LOG_DIR / f"{log_prefix}_{timestamp}.log"
|
||||
with log_path.open("w", encoding="utf-8") as log_file:
|
||||
log_file.write(f"COMMAND: {' '.join(command)}\n")
|
||||
if stdin:
|
||||
log_file.write("STDIN:\n")
|
||||
log_file.write(stdin)
|
||||
log_file.write("\n--- END STDIN ---\n")
|
||||
try:
|
||||
proc = subprocess.run(
|
||||
command,
|
||||
input=stdin,
|
||||
text=True,
|
||||
capture_output=True,
|
||||
check=False,
|
||||
)
|
||||
except FileNotFoundError:
|
||||
log_file.write(f"ERROR: command not found: {command[0]}\n")
|
||||
return {
|
||||
"status": "error",
|
||||
"exit_code": None,
|
||||
"error": f"Command not found: {command[0]}",
|
||||
"log_path": str(log_path),
|
||||
}
|
||||
log_file.write("STDOUT:\n")
|
||||
log_file.write(proc.stdout)
|
||||
log_file.write("\nSTDERR:\n")
|
||||
log_file.write(proc.stderr)
|
||||
status = "success" if proc.returncode == 0 else "failed"
|
||||
return {
|
||||
"status": status,
|
||||
"exit_code": proc.returncode,
|
||||
"log_path": str(log_path),
|
||||
}
|
||||
Reference in New Issue
Block a user