47 lines
1.5 KiB
Plaintext
47 lines
1.5 KiB
Plaintext
|
#!/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)
|