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_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"]) 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"], }