[Reports] Small simplification in new HTML charts classes
This patch simplifies and unifies render() return value format for some HTML report classes, so format will be changed at JavaScript part. That is because there will be another data transformations (like setting of specific bar color) on frontend and there is no reason to split this processing between Python and JavaScript. Change-Id: I7764babaa53db618e90eb15d08353a48f699188d
This commit is contained in:
@@ -74,15 +74,7 @@ class Chart(object):
|
||||
"""Get values for processing, from given iteration."""
|
||||
|
||||
|
||||
class StackedAreaChart(Chart):
|
||||
"""Abstract class for generic stacked area."""
|
||||
|
||||
def render(self):
|
||||
return [{"key": k, "values": v}
|
||||
for k, v in super(StackedAreaChart, self).render()]
|
||||
|
||||
|
||||
class MainStackedAreaChart(StackedAreaChart):
|
||||
class MainStackedAreaChart(Chart):
|
||||
|
||||
def _map_iteration_values(self, iteration):
|
||||
if iteration["error"]:
|
||||
@@ -94,7 +86,7 @@ class MainStackedAreaChart(StackedAreaChart):
|
||||
("failed_duration", 0)]
|
||||
|
||||
|
||||
class AtomicStackedAreaChart(StackedAreaChart):
|
||||
class AtomicStackedAreaChart(Chart):
|
||||
|
||||
def _map_iteration_values(self, iteration):
|
||||
iteration = self._fix_atomic_actions(iteration)
|
||||
@@ -109,7 +101,7 @@ class AtomicStackedAreaChart(StackedAreaChart):
|
||||
return atomics
|
||||
|
||||
|
||||
class OutputStackedAreaChart(StackedAreaChart):
|
||||
class OutputStackedAreaChart(Chart):
|
||||
|
||||
def _map_iteration_values(self, iteration):
|
||||
return [(name, iteration["scenario_output"]["data"].get(name, 0))
|
||||
@@ -126,8 +118,7 @@ class AvgChart(Chart):
|
||||
self._data[name].add(value or 0)
|
||||
|
||||
def render(self):
|
||||
return [{"key": k, "values": v.result()}
|
||||
for k, v in self._data.items()]
|
||||
return [(k, v.result()) for k, v in self._data.items()]
|
||||
|
||||
|
||||
class AtomicAvgChart(AvgChart):
|
||||
|
@@ -70,40 +70,18 @@ class ChartTestCase(test.TestCase):
|
||||
chart._fix_atomic_actions({"atomic_actions": {"a": 5, "b": 6}}))
|
||||
|
||||
|
||||
class StackedAreaChartTestCase(test.TestCase):
|
||||
|
||||
class StackedAreaChart(charts.StackedAreaChart):
|
||||
def _map_iteration_values(self, iteration):
|
||||
return iteration["foo"].items()
|
||||
|
||||
def test_add_iteration_and_render(self):
|
||||
self.assertRaises(TypeError, charts.StackedAreaChart,
|
||||
{"iterations_count": 42})
|
||||
chart = self.StackedAreaChart({"iterations_count": 42})
|
||||
self.assertIsInstance(chart, charts.Chart)
|
||||
[chart.add_iteration({"foo": x}) for x in ({"a": 1.3, "b": 4.3},
|
||||
{"a": 2.4, "b": 5.4},
|
||||
{"a": 3.5, "b": 7.7})]
|
||||
self.assertEqual([{"key": "a",
|
||||
"values": [[1, 1.3], [2, 2.4], [3, 3.5]]},
|
||||
{"key": "b",
|
||||
"values": [[1, 4.3], [2, 5.4], [3, 7.7]]}],
|
||||
sorted(chart.render(), key=lambda x: x["key"]))
|
||||
|
||||
|
||||
class MainStackedAreaChartTestCase(test.TestCase):
|
||||
|
||||
def test_add_iteration_and_render(self):
|
||||
chart = charts.MainStackedAreaChart({"iterations_count": 3}, 10)
|
||||
self.assertIsInstance(chart, charts.StackedAreaChart)
|
||||
self.assertIsInstance(chart, charts.Chart)
|
||||
[chart.add_iteration(itr) for itr in (
|
||||
{"duration": 1.1, "idle_duration": 2.2, "error": None},
|
||||
{"error": True, "duration": 1.1, "idle_duration": 0.5},
|
||||
{"duration": 1.3, "idle_duration": 3.4, "error": None})]
|
||||
expected = [
|
||||
{"key": "duration", "values": [[1, 1.1], [2, 0], [3, 1.3]]},
|
||||
{"key": "idle_duration", "values": [[1, 2.2], [2, 0], [3, 3.4]]},
|
||||
{"key": "failed_duration", "values": [[1, 0], [2, 1.6], [3, 0]]}]
|
||||
expected = [("duration", [[1, 1.1], [2, 0], [3, 1.3]]),
|
||||
("idle_duration", [[1, 2.2], [2, 0], [3, 3.4]]),
|
||||
("failed_duration", [[1, 0], [2, 1.6], [3, 0]])]
|
||||
self.assertEqual(expected, chart.render())
|
||||
|
||||
|
||||
@@ -116,17 +94,14 @@ class AtomicStackedAreaChartTestCase(test.TestCase):
|
||||
"error": True, "duration": 40, "idle_duration": 2},
|
||||
{"atomic_actions": {"bar": 1.2},
|
||||
"error": True, "duration": 5.5, "idle_duration": 2.5})
|
||||
expected = [
|
||||
{"key": "bar", "values": [[1, 0], [2, 1.2], [3, 1.2]]},
|
||||
{"key": "failed_duration", "values": [[1, 0], [2, 39.7],
|
||||
[3, 6.8]]},
|
||||
{"key": "foo", "values": [[1, 1.1], [2, 1.1], [3, 0]]}]
|
||||
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(
|
||||
{"iterations_count": 3, "atomic": {"foo": {}, "bar": {}}}, 10)
|
||||
self.assertIsInstance(chart, charts.StackedAreaChart)
|
||||
self.assertIsInstance(chart, charts.Chart)
|
||||
[chart.add_iteration(iteration) for iteration in iterations]
|
||||
self.assertEqual(expected,
|
||||
sorted(chart.render(), key=lambda x: x["key"]))
|
||||
self.assertEqual(expected, sorted(chart.render()))
|
||||
|
||||
|
||||
class OutputStackedAreaChartTestCase(test.TestCase):
|
||||
@@ -134,13 +109,12 @@ class OutputStackedAreaChartTestCase(test.TestCase):
|
||||
def test_add_iteration_and_render(self):
|
||||
chart = charts.OutputStackedAreaChart(
|
||||
{"iterations_count": 3, "output_names": ["foo", "bar"]}, 10)
|
||||
self.assertIsInstance(chart, charts.StackedAreaChart)
|
||||
self.assertIsInstance(chart, charts.Chart)
|
||||
[chart.add_iteration({"scenario_output": {"data": x}})
|
||||
for x in ({"foo": 1.1, "bar": 1.2}, {"foo": 1.3}, {"bar": 1.4})]
|
||||
expected = [{"key": "bar", "values": [[1, 1.2], [2, 0], [3, 1.4]]},
|
||||
{"key": "foo", "values": [[1, 1.1], [2, 1.3], [3, 0]]}]
|
||||
self.assertEqual(expected,
|
||||
sorted(chart.render(), key=lambda x: x["key"]))
|
||||
expected = [("bar", [[1, 1.2], [2, 0], [3, 1.4]]),
|
||||
("foo", [[1, 1.1], [2, 1.3], [3, 0]])]
|
||||
self.assertEqual(expected, sorted(chart.render()))
|
||||
|
||||
|
||||
class AvgChartTestCase(test.TestCase):
|
||||
@@ -156,9 +130,7 @@ class AvgChartTestCase(test.TestCase):
|
||||
[chart.add_iteration({"foo": x}) for x in ({"a": 1.3, "b": 4.3},
|
||||
{"a": 2.4, "b": 5.4},
|
||||
{"a": 3.5, "b": 7.7})]
|
||||
self.assertEqual([{"key": "a", "values": 2.4},
|
||||
{"key": "b", "values": 5.8}],
|
||||
sorted(chart.render(), key=lambda x: x["key"]))
|
||||
self.assertEqual([("a", 2.4), ("b", 5.8)], sorted(chart.render()))
|
||||
|
||||
|
||||
class AtomicAvgChartTestCase(test.TestCase):
|
||||
@@ -169,9 +141,7 @@ class AtomicAvgChartTestCase(test.TestCase):
|
||||
self.assertIsInstance(chart, charts.AvgChart)
|
||||
[chart.add_iteration({"atomic_actions": costilius.OrderedDict(a)})
|
||||
for a in ([("foo", 2), ("bar", 5)], [("foo", 4)], [("bar", 7)])]
|
||||
self.assertEqual([{"key": "bar", "values": 4.0},
|
||||
{"key": "foo", "values": 2.0}],
|
||||
sorted(chart.render(), key=lambda x: x["key"]))
|
||||
self.assertEqual([("bar", 4.0), ("foo", 2.0)], sorted(chart.render()))
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
|
Reference in New Issue
Block a user