Example #1
0
 def test_add_iteration_and_render_with_failed_iterations(self):
     iterations = (
         {
             "atomic_actions": [
                 {"name": "foo",
                  "started_at": 0,
                  "finished_at": 1.1,
                  "children": []}
             ],
             "error": []
         },
         {
             "atomic_actions": [
                 {"name": "foo",
                  "started_at": 0,
                  "finished_at": 1.1,
                  "children": []},
                 {"name": "bar",
                  "started_at": 0,
                  "finished_at": 1.2,
                  "children": []}
             ],
             "error": ["foo_err"], "duration": 40, "idle_duration": 2},
         {
             "atomic_actions": [
                 {"name": "bar",
                  "started_at": 0,
                  "finished_at": 1.2,
                  "children": []}
             ],
             "error": ["foo_err"], "duration": 5.5, "idle_duration": 2.5})
     expected = [("bar", [[1, 0], [2, 1.2], [3, 1.2]]),
                 ("failed_duration", [[1, 0], [2, 39.7], [3, 6.8]]),
                 ("foo", [[1, 1.1], [2, 1.1], [3, 0]])]
     chart = charts.AtomicStackedAreaChart(
         {"total_iteration_count": 3, "failed_iteration_count": 2,
          "statistics": {
              "durations": {
                  "total": {"name": "total",
                            "display_name": "total",
                            "duration": 4,
                            "count": 1,
                            "children": []},
                  "atomics": [
                      {"name": "foo",
                       "display_name": "foo",
                       "duration": 2,
                       "count": 1,
                       "children": []},
                      {"name": "bar",
                       "display_name": "bar",
                       "duration": 2,
                       "count": 1,
                       "children": []}
                  ]}}}, 10)
     self.assertIsInstance(chart, charts.Chart)
     [chart.add_iteration(iteration) for iteration in iterations]
     self.assertEqual(expected, sorted(chart.render()))
 def test_add_iteration_and_render(self):
     iterations = (
         {"atomic_actions": {"foo": 1.1}, "error": []},
         {"atomic_actions": {"foo": 1.1, "bar": 1.2},
          "error": [], "duration": 40, "idle_duration": 2},
         {"atomic_actions": {"bar": 1.2},
          "error": [], "duration": 5.5, "idle_duration": 2.5})
     expected = [("bar", [[1, 0], [2, 1.2], [3, 1.2]]),
                 ("foo", [[1, 1.1], [2, 1.1], [3, 0]])]
     chart = charts.AtomicStackedAreaChart(
         {"iterations_count": 3, "iterations_failed": 0,
          "atomic": {"foo": {}, "bar": {}}}, 10)
     self.assertIsInstance(chart, charts.Chart)
     [chart.add_iteration(iteration) for iteration in iterations]
     self.assertEqual(expected, sorted(chart.render()))
Example #3
0
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"],
    }
Example #4
0
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,
    }
Example #5
0
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"],
    }