rasta/rasta_data_manipulation/rasta_triturage/ressources.py
Jean-Marie Mineau cd1e91bb99
first commit
2023-11-16 14:30:24 +01:00

62 lines
2.2 KiB
Python

import sqlite3
import sys
import csv
from pathlib import Path
from typing import Optional
def get_ressource(
db: Path,
folder: Optional[Path] = None,
):
data_time = {}
data_mem = {}
tools = set()
with sqlite3.connect(db) as con:
cur = con.cursor()
for tool, status, avg_time, var_time, avg_mem, var_mem in cur.execute(
"SELECT tool_name, exec.tool_status, "
" AVG(time), AVG(time*time) - AVG(time)*AVG(time), "
" AVG(max_rss_mem), AVG(max_rss_mem*max_rss_mem) - AVG(max_rss_mem)*AVG(max_rss_mem) "
"FROM exec "
"GROUP BY tool_name, tool_status;"
):
tools.add(tool)
if var_time is None:
var_time = 0
if var_mem is None:
var_mem = 0
data_time[(tool, status)] = (avg_time, var_time ** (1 / 2))
data_mem[(tool, status)] = (avg_mem, var_mem ** (1 / 2))
fieldnames = list(tools)
fieldnames.sort()
fieldnames = ["", *fieldnames]
if folder is None:
fd_time = sys.stdout
fd_mem = sys.stdout
else:
fd_time = (folder / "average_time.csv").open("w")
fd_mem = (folder / "average_mem.csv").open("w")
writer_time = csv.DictWriter(fd_time, fieldnames=fieldnames)
writer_mem = csv.DictWriter(fd_mem, fieldnames=fieldnames)
writer_time.writeheader()
writer_mem.writeheader()
for status in ("FINISHED", "FAILED", "TIMEOUT"):
row_time = {"": status}
row_mem = {"": status}
for tool in tools:
row_time[tool] = round(data_time.get((tool, status), (0, 0))[0], 2)
row_mem[tool] = round(data_mem.get((tool, status), (0, 0))[0], 2)
writer_time.writerow(row_time)
writer_mem.writerow(row_mem)
row_time = {"": "standard deviation"}
row_mem = {"": "standard deviation"}
for tool in tools:
row_time[tool] = round(data_time.get((tool, status), (0, 0))[1], 2)
row_mem[tool] = round(data_mem.get((tool, status), (0, 0))[1], 2)
writer_time.writerow(row_time)
writer_mem.writerow(row_mem)
if folder is not None:
fd_time.close()
fd_mem.close()