82bede9a97
Summary: Implement measurements collection in QA Implement measurements collection in LDBC Implement measurements collection in stress tests Reviewers: mislav.bradac, buda, florijan Reviewed By: florijan Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D1087
47 lines
1.5 KiB
Python
Executable File
47 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
# paths
|
|
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
|
|
RESULTS_DIR = os.path.join(SCRIPT_DIR, "results")
|
|
MEASUREMENTS_PATH = os.path.join(SCRIPT_DIR, ".apollo_measurements")
|
|
|
|
LDBC_TIME_FACTORS = {
|
|
"SECONDS": 1.0,
|
|
"MILLISECONDS": 1000.0,
|
|
"MICROSECONDS": 1000000.0,
|
|
"NANOSECONDS": 1000000000.0
|
|
}
|
|
|
|
def generate_measurements(path):
|
|
ret = ""
|
|
action, db, scale, ldbc, results = os.path.basename(path).split("-")
|
|
test_path = "{}.{}.{}".format(action, scale, db)
|
|
with open(path) as f:
|
|
results = json.load(f)
|
|
metrics = ["total_duration", "total_count", "throughput"]
|
|
divs = [LDBC_TIME_FACTORS[results["unit"]], 1, 1]
|
|
for metric, div in zip(metrics, divs):
|
|
ret += "{}.{} {}\n".format(test_path, metric, results[metric] / div)
|
|
for result in results["all_metrics"]:
|
|
name = result["name"]
|
|
run_time = dict(result["run_time"])
|
|
unit = run_time.pop("unit")
|
|
run_time.pop("name")
|
|
for key, value in run_time.items():
|
|
scale = LDBC_TIME_FACTORS[unit] if key != "count" else 1
|
|
ret += "{}.queries.{}.{} {}\n".format(test_path, name, key, value / scale)
|
|
return ret
|
|
|
|
measurements = ""
|
|
for fname in sorted(os.listdir(RESULTS_DIR)):
|
|
path = os.path.join(RESULTS_DIR, fname)
|
|
if not os.path.isfile(path): continue
|
|
if not path.endswith(".json"): continue
|
|
measurements += generate_measurements(path)
|
|
|
|
with open(MEASUREMENTS_PATH, "w") as f:
|
|
f.write(measurements)
|