(dir, days)
| 448 | |
| 449 | |
| 450 | def test_step_memory(dir, days): |
| 451 | days_since = int(days) |
| 452 | sacct_start_date = (datetime.now() - timedelta(days=days_since)).strftime( |
| 453 | "%Y-%m-%d" |
| 454 | ) |
| 455 | sacct_command = f"sacct --starttime {sacct_start_date} -u {os.environ['USER']} --noheader -o jobid,jobname%80,AllocTRES%80,ElapsedRaw,stat%30,NodeList,Start,MaxRSS" |
| 456 | print(f"Running + {sacct_command}") |
| 457 | sacct_output = subprocess.check_output(sacct_command.split()).decode() |
| 458 | relevant_started_jobs = [] |
| 459 | mem_dict = dict(re.findall(r"([0-9]+)\.0 +.* +([0-9]*.?[0-9]*[KMG])", sacct_output)) |
| 460 | |
| 461 | completed_seeds = os.path.join(dir, "finished_seeds.txt") |
| 462 | seeds = open(completed_seeds).read() |
| 463 | |
| 464 | for sacct_line in sacct_output.splitlines(): |
| 465 | parsed_job = parse_sacct_line(sacct_line) |
| 466 | if parsed_job is None: |
| 467 | continue |
| 468 | for name in re.findall(f"{Path(dir).stem}_([^ _]+)_.*", parsed_job.name): |
| 469 | if name in seeds: |
| 470 | if parsed_job.job_id in mem_dict: |
| 471 | max_memory = mem_dict[parsed_job.job_id] |
| 472 | parsed_job.max_memory_gb = ( |
| 473 | float(max_memory[:-1]) / MEM_FACTOR[max_memory[-1]] |
| 474 | ) |
| 475 | relevant_started_jobs.append(parsed_job) |
| 476 | |
| 477 | step_mem = { |
| 478 | "fineterrain": [], |
| 479 | "coarse": [], |
| 480 | "populate": [], |
| 481 | "rendershort": [], |
| 482 | "blendergt": [], |
| 483 | } |
| 484 | |
| 485 | for job in relevant_started_jobs: |
| 486 | for step in step_mem: |
| 487 | if step in job.name: |
| 488 | step_mem[step].append(job.max_memory_gb) |
| 489 | |
| 490 | step_mem_df = pd.DataFrame.from_dict(step_mem, orient="index") |
| 491 | step_mem_stats = make_stats(step_mem_df) |
| 492 | print("\nMemory Usage by Step") |
| 493 | print(tabulate(step_mem_stats, headers="keys", tablefmt="fancy_grid")) |
| 494 | |
| 495 | |
| 496 | def test_brightness(dir): |
no test coverage detected