in report/generate_master_report.py [0:0]
def _prepare_time_series_data(raw_data):
"""Massage the data to fit a format suitable for graph generation."""
headers = ["Date"]
project_to_pos = {}
date_to_wall = {}
date_to_mem = {}
# First pass to gather the projects and form the headers.
for row in raw_data:
if row.project_label not in project_to_pos:
project_to_pos[row.project_label] = len(project_to_pos)
headers.extend(
[row.project_label, {
"role": "interval"
}, {
"role": "interval"
}])
for row in raw_data:
if row.report_date not in date_to_wall:
# Commits on day X are benchmarked on day X + 1.
date_str = "{} ({})".format(
(row.report_date - datetime.timedelta(days=1)).strftime("%Y-%m-%d"),
_short_hash(row.bazel_commit))
date_to_wall[row.report_date] = ["null"] * len(headers)
date_to_mem[row.report_date] = ["null"] * len(headers)
date_to_wall[row.report_date][0] = date_str
date_to_mem[row.report_date][0] = date_str
base_pos = project_to_pos[row.project_label] * 3
date_to_wall[row.report_date][base_pos + 1] = row.median_wall
date_to_wall[row.report_date][base_pos + 2] = row.min_wall
date_to_wall[row.report_date][base_pos + 3] = row.max_wall
date_to_mem[row.report_date][base_pos + 1] = row.median_memory
date_to_mem[row.report_date][base_pos + 2] = row.min_memory
date_to_mem[row.report_date][base_pos + 3] = row.max_memory
return [headers] + list(date_to_wall.values()), [headers] + list(
date_to_mem.values()), project_to_pos.keys()