Skip to content
Snippets Groups Projects
Commit d0e5c660 authored by Alexander Schlemmer's avatar Alexander Schlemmer
Browse files

Merge branch 'f-perf-test' into 'dev'

F perf test

See merge request !9
parents b10d5d0c e9262853
No related branches found
No related tags found
1 merge request!9F perf test
Pipeline #60065 passed with warnings
"""
Tests CPU and Memory usage of RuQaD
"""
import cProfile
import io
import os
import pstats
import shutil
from datetime import datetime, timezone
from pathlib import Path
from pstats import SortKey
from tempfile import TemporaryDirectory
from time import sleep, time
from memory_profiler import memory_usage
from memory_profiler import profile as mprofile
from ruqad.crawler import trigger_crawler
from ruqad.kadi import KadiManager, collect_records_created_after, download_eln_for
from ruqad.qualitycheck import QualityChecker
SKIP_QUALITY_CHECK = os.getenv("SKIP_QUALITY_CHECK") is not None
KADIARGS = {
"host": os.environ['KADIHOST'],
"pat": os.environ['KADITOKEN'],
}
"""
call this file to check memory and cpu usage of the RuQaD demonstrator
"""
def _run(n=-1):
cut_off_date = datetime.fromisoformat("1990-01-01 02:34:42.484312+00:00")
with KadiManager(**KADIARGS) as manager:
print(f"Checking for records created after {cut_off_date}...")
rec_ids = collect_records_created_after(manager, cut_off_date)
if len(rec_ids) == 0:
print("no new recs")
if n!=-1:
rec_ids = rec_ids[:n]
for rid in rec_ids:
with TemporaryDirectory(delete=False) as cdir:
eln_file = os.path.join(cdir, "export.eln")
download_eln_for(manager, rid, path=eln_file)
print(f"Downlaoded {eln_file}")
if SKIP_QUALITY_CHECK:
print("Found env 'SKIP_QUALITY_CHECK', skipping quality check")
else:
qc = QualityChecker()
qc.check(filename=eln_file, target_dir=cdir)
print(f"Quality check done. {os.listdir(cdir)}")
# trigger crawler on dir
remote_dir_path = os.path.join(cdir, "ruqad", str(rid))
os.makedirs(remote_dir_path)
if os.path.exists(os.path.join(cdir, "artifacts.zip")):
shutil.move(os.path.join(cdir, "artifacts.zip"),
os.path.join(remote_dir_path, "report.zip"))
#else:
# Path(os.path.join(remote_dir_path, "report.zip")).touch()
shutil.move(os.path.join(cdir, "export.eln"),
os.path.join(remote_dir_path, "export.eln"))
trigger_crawler(target_dir=cdir)
def test_memory():
# test that maximum memory usage is below 1GB
assert 1000>max(memory_usage((_run, [10], {})))
def test_cpu():
pr = cProfile.Profile()
pr.enable()
_run(n=1)
pr.disable()
with open("performance.txt", 'a') as s:
sortby = SortKey.CUMULATIVE
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats(10)
ps.print_stats("ruqad", 10)
ps.print_stats("crawler", 10)
def test_runtime_eln_download():
cut_off_date = datetime.fromisoformat("1990-01-01 02:34:42.484312+00:00")
with KadiManager(**KADIARGS) as manager:
rec_ids = collect_records_created_after(manager, cut_off_date)
if len(rec_ids) == 0:
print("no new recs")
with TemporaryDirectory(delete=False) as cdir:
eln_file = os.path.join(cdir, "export.eln")
start = time()
download_eln_for(manager, rec_ids[0], path=eln_file)
stop = time()
with open("performance.txt", 'a') as s:
s.write(f"time for downloading eln: {stop-start:.2f} s")
def test_runtime_crawler():
cut_off_date = datetime.fromisoformat("1990-01-01 02:34:42.484312+00:00")
with KadiManager(**KADIARGS) as manager:
rec_ids = collect_records_created_after(manager, cut_off_date)
if len(rec_ids) == 0:
print("no new recs")
with TemporaryDirectory(delete=False) as cdir:
eln_file = os.path.join(cdir, "export.eln")
download_eln_for(manager, rec_ids[0], path=eln_file)
# trigger crawler on dir
remote_dir_path = os.path.join(cdir, "ruqad", str(rec_ids[0]))
os.makedirs(remote_dir_path)
shutil.move(os.path.join(cdir, "export.eln"),
os.path.join(remote_dir_path, "export.eln"))
start = time()
trigger_crawler(target_dir=cdir)
stop = time()
with open("performance.txt", 'a') as s:
s.write(f"time for crawling eln: {stop-start:.2f} s")
if __name__ == "__main__":
test_memory()
test_runtime_eln_download()
test_cpu()
test_runtime_crawler()
......@@ -49,6 +49,8 @@ test = [
"pytest",
"pytest-env",
"pytest-cov",
"guppy3",
"memory_profiler",
]
all = [
"ruqad[dev]",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment