in ailab/benchmark/views.py [0:0]
def visualize(request):
# Get columns included from user-specified checkbox list
columns_sel = (
[]
if request.GET.get("selection_form") is None
else json.loads(request.GET.get("selection_form"))
)
include_column_set = set()
graph_type = ""
rank_column = ""
for column in columns_sel:
if column["name"] == "columns":
include_column_set.add(column["value"])
if column["name"] == "graph-type-dropdown":
graph_type = column["value"]
if column["name"] == "rank-column-dropdown":
rank_column = column["value"]
if len(include_column_set) == 0:
include_column_set.add("p50")
include_column_set.add("type")
# Filter data base on request
filters = (
{}
if request.GET.get("filters") is None
else json.loads(request.GET.get("filters"))
)
if len(filters) == 0 or "valid" not in filters or not filters["valid"]:
filters = {
"condition": "AND",
"rules": [{"id": "type", "operator": "equal", "value": "NET"}],
}
result_q = construct_q(filters)
qs = BenchmarkResult.objects.filter(result_q)
# Build table with specified columns
table = ResultTable(qs)
available_columns = []
exclude_column_list = []
for name, _ in table.base_columns.items():
if name != "time":
available_columns.append(name)
if name not in include_column_set:
exclude_column_list.append(name)
table.exclude = tuple(exclude_column_list)
RequestConfig(request, paginate={"per_page": 25}).configure(table)
data = {}
# Build graph to display
if graph_type == "bar-graph":
labels = [str(i) for i in range(10)]
# Construct data to display
sort_attr = request.GET.get("sort")
if sort_attr is None:
if rank_column != "":
sort_attr = "-" + rank_column
else:
sort_attr = "p50"
else:
rank_column = sort_attr
if rank_column.startswith("-"):
rank_column = rank_column[1:]
column = sort_attr[1:] if sort_attr.startswith("-") else sort_attr
sorted_qs = qs.order_by(sort_attr)[:10]
labels = [o.type for o in sorted_qs]
chartdata = {"x": labels}
vals = [getattr(o, column) for o in sorted_qs]
chartdata["name1"] = column
chartdata["y1"] = vals
# Chart info for NVD3
charttype = "discreteBarChart"
chartcontainer = "linechart_container" # container name
data = {
"charttype": charttype,
"chartdata": chartdata,
"chartcontainer": chartcontainer,
"extra": {
"x_is_date": False,
"tag_script_js": True,
"jquery_on_ready": False,
},
}
else:
labels = [o.time * 1000 for o in qs]
chartdata = {"x": labels}
# Construct data to display
for column, i in zip(include_column_set, range(len(include_column_set))):
if column not in PLOTABLE_COL_SET:
continue
index = i + 1
vals = [getattr(o, column) for o in qs]
chartdata["name{}".format(index)] = column
chartdata["y{}".format(index)] = vals
# Chart info for NVD3
charttype = "lineChart"
chartcontainer = "linechart_container" # container name
data = {
"charttype": charttype,
"chartdata": chartdata,
"chartcontainer": chartcontainer,
"extra": {
"x_is_date": True,
"tag_script_js": True,
"jquery_on_ready": False,
"x_axis_format": "%b %d %H:%m",
},
}
data["table"] = table
data["available_columns"] = zip(*[iter(available_columns)] * COL_PER_ROW)
# Pass selection states to display
data["filter_rules"] = json.dumps(filters)
data["graph_type"] = graph_type
data["rank_column"] = rank_column
data["selected_columns"] = include_column_set
if request.is_ajax():
rendered_graph = render_to_string("graph_view.html", data, request)
rendered_table = render_to_string("table_view.html", data, request)
response = {
"graph": rendered_graph,
"table": rendered_table,
}
return HttpResponse(json.dumps(response))
rendered = render_to_string("result_visualization.html", data, request)
return HttpResponse(rendered)