From d95f2d560a59cdc3c83ce0004e31294e29eb88d5 Mon Sep 17 00:00:00 2001 From: Ilya Shakhat Date: Mon, 2 Dec 2013 15:43:45 +0400 Subject: [PATCH] Added indexes into stats responses Closes bug 1256818 Change-Id: I4c90873471d8a05146e54b90869b6089f612b6ad --- dashboard/static/js/stackalytics-ui.js | 10 +--------- dashboard/web.py | 2 ++ stackalytics/processor/utils.py | 11 +++++++++++ tests/unit/test_utils.py | 13 +++++++++++++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/dashboard/static/js/stackalytics-ui.js b/dashboard/static/js/stackalytics-ui.js index 4263ddbaa..daa83eb7d 100644 --- a/dashboard/static/js/stackalytics-ui.js +++ b/dashboard/static/js/stackalytics-ui.js @@ -95,9 +95,8 @@ function renderTableAndChart(url, container_id, table_id, chart_id, link_param, var tableData = []; var chartData = []; - var limit = 10; + const limit = 10; var aggregate = 0; - var index = 1; var i; data = data["stats"]; @@ -114,12 +113,6 @@ function renderTableAndChart(url, container_id, table_id, chart_id, link_param, aggregate += data[i].metric; } - var index_label = index; - if (data[i].name == "*independent") { - index_label = ""; - } else { - index++; - } if (!data[i].link) { if (data[i].id) { data[i]["link"] = make_link(data[i].id, data[i].name, link_param); @@ -127,7 +120,6 @@ function renderTableAndChart(url, container_id, table_id, chart_id, link_param, data[i]["link"] = data[i].name } } - data[i]["index"] = index_label; tableData.push(data[i]); } diff --git a/dashboard/web.py b/dashboard/web.py index 757545754..2d6702905 100644 --- a/dashboard/web.py +++ b/dashboard/web.py @@ -88,6 +88,7 @@ def _get_aggregated_stats(records, metric_filter, keys, param_id, response = [finalize_handler(result[r]) for r in result if result[r]['metric']] response.sort(key=lambda x: x['metric'], reverse=True) + utils.add_index(response, item_filter=lambda x: x['id'] != '*independent') return response @@ -264,6 +265,7 @@ def get_bpd(records): }) result.sort(key=lambda x: x['metric'], reverse=True) + utils.add_index(result) return result diff --git a/stackalytics/processor/utils.py b/stackalytics/processor/utils.py index 7352a697e..1b6f691d6 100644 --- a/stackalytics/processor/utils.py +++ b/stackalytics/processor/utils.py @@ -144,3 +144,14 @@ def merge_records(original, new): def get_blueprint_id(module, name): return module + ':' + name + + +def add_index(sequence, start=1, item_filter=lambda x: True): + n = start + for item in sequence: + if item_filter(item): + item['index'] = n + n += 1 + else: + item['index'] = '' + return sequence diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 200281540..e173d1def 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -64,3 +64,16 @@ class TestUtils(testtools.TestCase): 'stackalytics/​+spec/​stackalytics-core') self.assertEqual(expected, utils.format_text(original)) + + def test_add_index(self): + sequence = [{'name': 'A'}, {'name': 'B'}, {'name': 'C'}] + expected = [{'index': 1, 'name': 'A'}, {'index': 2, 'name': 'B'}, + {'index': 3, 'name': 'C'}] + self.assertEqual(expected, utils.add_index(sequence)) + + def test_add_index_with_filter(self): + sequence = [{'name': 'A'}, {'name': 'B'}, {'name': 'C'}] + expected = [{'index': 0, 'name': 'A'}, {'index': '', 'name': 'B'}, + {'index': 1, 'name': 'C'}] + self.assertEqual(expected, utils.add_index( + sequence, start=0, item_filter=lambda x: x['name'] != 'B'))