def test_add_iteration_and_render(self): chart = charts.AtomicHistogramChart( {"iterations_count": 3, "atomic": costilius.OrderedDict( [("foo", {"min_duration": 1.6, "max_duration": 2.8}), ("bar", {"min_duration": 3.1, "max_duration": 5.5})])}) self.assertIsInstance(chart, charts.HistogramChart) [chart.add_iteration({"atomic_actions": a}) for a in ({"foo": 1.6, "bar": 3.1}, {"foo": 2.8}, {"bar": 5.5})] expected = [ [{"disabled": 0, "key": "foo", "view": "Square Root Choice", "values": [{"x": 2.2, "y": 2}, {"x": 2.8, "y": 1}]}, {"disabled": 0, "key": "foo", "view": "Sturges Formula", "values": [{"x": 2.0, "y": 2}, {"x": 2.4, "y": 0}, {"x": 2.8, "y": 1}]}, {"disabled": 0, "key": "foo", "view": "Rice Rule", "values": [{"x": 2.0, "y": 2}, {"x": 2.4, "y": 0}, {"x": 2.8, "y": 1}]}], [{"disabled": 1, "key": "bar", "view": "Square Root Choice", "values": [{"x": 4.3, "y": 2}, {"x": 5.5, "y": 1}]}, {"disabled": 1, "key": "bar", "view": "Sturges Formula", "values": [{"x": 3.9, "y": 2}, {"x": 4.7, "y": 0}, {"x": 5.5, "y": 1}]}, {"disabled": 1, "key": "bar", "view": "Rice Rule", "values": [{"x": 3.9, "y": 2}, {"x": 4.7, "y": 0}, {"x": 5.5, "y": 1}]}]] self.assertEqual(expected, chart.render())
def test_add_iteration_and_render(self): chart = charts.AtomicHistogramChart( {"total_iteration_count": 3, "statistics": { "atomics": collections.OrderedDict( [("foo", {"min_duration": 1.6, "max_duration": 2.8}), ("bar", {"min_duration": 3.1, "max_duration": 5.5})])}}) self.assertIsInstance(chart, charts.HistogramChart) [chart.add_iteration({"atomic_actions": a}) for a in ([{"name": "foo", "started_at": 0, "finished_at": 1.6}, {"name": "bar", "started_at": 0, "finished_at": 3.1}], [{"name": "foo", "started_at": 0, "finished_at": 2.8}], [{"name": "bar", "started_at": 0, "finished_at": 5.5}])] expected = { "data": [ [{"disabled": 0, "key": "foo", "view": "Square Root Choice", "values": [{"x": 2.2, "y": 2}, {"x": 2.8, "y": 1}]}, {"disabled": 1, "key": "bar", "view": "Square Root Choice", "values": [{"x": 4.3, "y": 2}, {"x": 5.5, "y": 1}]}], [{"disabled": 0, "key": "foo", "view": "Sturges Formula", "values": [{"x": 2.0, "y": 2}, {"x": 2.4, "y": 0}, {"x": 2.8, "y": 1}]}, {"disabled": 1, "key": "bar", "view": "Sturges Formula", "values": [{"x": 3.9, "y": 2}, {"x": 4.7, "y": 0}, {"x": 5.5, "y": 1}]}], [{"disabled": 0, "key": "foo", "view": "Rice Rule", "values": [{"x": 2.0, "y": 2}, {"x": 2.4, "y": 0}, {"x": 2.8, "y": 1}]}, {"disabled": 1, "key": "bar", "view": "Rice Rule", "values": [{"x": 3.9, "y": 2}, {"x": 4.7, "y": 0}, {"x": 5.5, "y": 1}]}]], "views": [{"id": 0, "name": "Square Root Choice"}, {"id": 1, "name": "Sturges Formula"}, {"id": 2, "name": "Rice Rule"}]} self.assertEqual(expected, chart.render())
def _process_workload(workload, workload_cfg, pos): main_area = charts.MainStackedAreaChart(workload) main_hist = charts.MainHistogramChart(workload) main_stat = charts.MainStatsTable(workload) load_profile = charts.LoadProfileChart(workload) atomic_pie = charts.AtomicAvgChart(workload) atomic_area = charts.AtomicStackedAreaChart(workload) atomic_hist = charts.AtomicHistogramChart(workload) errors = [] output_errors = [] additive_output_charts = [] complete_output = [] for idx, itr in enumerate(workload["data"], 1): if itr["error"]: typ, msg, trace = itr["error"] timestamp = dt.datetime.fromtimestamp( itr["timestamp"]).isoformat(sep="\n") errors.append({"iteration": idx, "timestamp": timestamp, "type": typ, "message": msg, "traceback": trace}) for i, additive in enumerate(itr["output"]["additive"]): try: additive_output_charts[i].add_iteration(additive["data"]) except IndexError: chart_cls = plugin.Plugin.get(additive["chart_plugin"]) chart = chart_cls( workload, title=additive["title"], description=additive.get("description", ""), label=additive.get("label", ""), axis_label=additive.get("axis_label", "Iteration sequence number")) chart.add_iteration(additive["data"]) additive_output_charts.append(chart) complete_charts = [] for complete in itr["output"]["complete"]: chart_cls = plugin.Plugin.get(complete["chart_plugin"]) complete["widget"] = chart_cls.widget complete_charts.append(chart_cls.render_complete_data(complete)) complete_output.append(complete_charts) for chart in (main_area, main_hist, main_stat, load_profile, atomic_pie, atomic_area, atomic_hist): chart.add_iteration(itr) cls, method = workload["name"].split(".") additive_output = [chart.render() for chart in additive_output_charts] return { "cls": cls, "met": method, "pos": str(pos), "name": method + (pos and " [%d]" % (pos + 1) or ""), "runner": workload["runner_type"], "config": json.dumps(workload_cfg, indent=2), "hooks": _process_hooks(workload["hooks"]), "description": workload.get("description", ""), "iterations": { "iter": main_area.render(), "pie": [("success", (workload["total_iteration_count"] - len(errors))), ("errors", len(errors))], "histogram": main_hist.render()}, "load_profile": load_profile.render(), "atomic": {"histogram": atomic_hist.render(), "iter": atomic_area.render(), "pie": atomic_pie.render()}, "table": main_stat.render(), "additive_output": additive_output, "complete_output": complete_output, "has_output": any(additive_output) or any(complete_output), "output_errors": output_errors, "errors": errors, "load_duration": workload["load_duration"], "full_duration": workload["full_duration"], "created_at": workload["created_at"], "sla": workload["sla_results"].get("sla"), "sla_success": workload["pass_sla"], "iterations_count": workload["total_iteration_count"], }
def _process_scenario(data, pos): main_area = charts.MainStackedAreaChart(data["info"]) main_hist = charts.MainHistogramChart(data["info"]) main_stat = charts.MainStatsTable(data["info"]) load_profile = charts.LoadProfileChart(data["info"]) atomic_pie = charts.AtomicAvgChart(data["info"]) atomic_area = charts.AtomicStackedAreaChart(data["info"]) atomic_hist = charts.AtomicHistogramChart(data["info"]) errors = [] output_errors = [] additive_output_charts = [] complete_output = [] for idx, itr in enumerate(data["iterations"], 1): if itr["error"]: typ, msg, trace = itr["error"] errors.append({"iteration": idx, "type": typ, "message": msg, "traceback": trace}) for i, additive in enumerate(itr["output"]["additive"]): try: additive_output_charts[i].add_iteration(additive["data"]) except IndexError: chart_cls = plugin.Plugin.get(additive["chart_plugin"]) chart = chart_cls( data["info"], title=additive["title"], description=additive.get("description", ""), label=additive.get("label", ""), axis_label=additive.get("axis_label", "Iteration sequence number")) chart.add_iteration(additive["data"]) additive_output_charts.append(chart) complete_charts = [] for complete in itr["output"]["complete"]: complete_chart = dict(complete) chart_cls = plugin.Plugin.get(complete_chart.pop("chart_plugin")) complete_chart["widget"] = chart_cls.widget complete_charts.append(complete_chart) complete_output.append(complete_charts) for chart in (main_area, main_hist, main_stat, load_profile, atomic_pie, atomic_area, atomic_hist): chart.add_iteration(itr) kw = data["key"]["kw"] cls, method = data["key"]["name"].split(".") additive_output = [chart.render() for chart in additive_output_charts] iterations_count = data["info"]["iterations_count"] return { "cls": cls, "met": method, "pos": str(pos), "name": method + (pos and " [%d]" % (pos + 1) or ""), "runner": kw["runner"]["type"], "config": json.dumps({data["key"]["name"]: [kw]}, indent=2), "iterations": { "iter": main_area.render(), "pie": [("success", (data["info"]["iterations_count"] - len(errors))), ("errors", len(errors))], "histogram": main_hist.render()}, "load_profile": load_profile.render(), "atomic": {"histogram": atomic_hist.render(), "iter": atomic_area.render(), "pie": atomic_pie.render()}, "table": main_stat.render(), "additive_output": additive_output, "complete_output": complete_output, "output_errors": output_errors, "errors": errors, "load_duration": data["info"]["load_duration"], "full_duration": data["info"]["full_duration"], "sla": data["sla"], "sla_success": all([s["success"] for s in data["sla"]]), "iterations_count": iterations_count, }
def _process_scenario(data, pos): main_area = charts.MainStackedAreaChart(data["info"]) main_hist = charts.MainHistogramChart(data["info"]) main_stat = charts.MainStatsTable(data["info"]) load_profile = charts.LoadProfileChart(data["info"]) atomic_pie = charts.AtomicAvgChart(data["info"]) atomic_area = charts.AtomicStackedAreaChart(data["info"]) atomic_hist = charts.AtomicHistogramChart(data["info"]) output_area = charts.OutputStackedAreaChart(data["info"]) errors = [] output_errors = [] for idx, itr in enumerate(data["iterations"]): if itr["error"]: typ, msg, trace = itr["error"] errors.append({ "iteration": idx, "type": typ, "message": msg, "traceback": trace }) if itr["scenario_output"]["errors"]: output_errors.append((idx, itr["scenario_output"]["errors"])) for chart in (main_area, main_hist, main_stat, load_profile, atomic_pie, atomic_area, atomic_hist, output_area): chart.add_iteration(itr) kw = data["key"]["kw"] cls, method = data["key"]["name"].split(".") return { "cls": cls, "met": method, "pos": str(pos), "name": method + (pos and " [%d]" % (pos + 1) or ""), "runner": kw["runner"]["type"], "config": json.dumps({data["key"]["name"]: [kw]}, indent=2), "iterations": { "iter": main_area.render(), "pie": [("success", (data["info"]["iterations_count"] - len(errors))), ("errors", len(errors))], "histogram": main_hist.render()[0] }, "load_profile": load_profile.render(), "atomic": { "histogram": atomic_hist.render(), "iter": atomic_area.render(), "pie": atomic_pie.render() }, "table": main_stat.render(), "output": output_area.render(), "output_errors": output_errors, "errors": errors, "load_duration": data["info"]["load_duration"], "full_duration": data["info"]["full_duration"], "sla": data["sla"], "sla_success": all([s["success"] for s in data["sla"]]), "iterations_count": data["info"]["iterations_count"], }