From b00023344e81f4245a93d2e7775cfd48259b3b91 Mon Sep 17 00:00:00 2001 From: Drumil Patel <42701709+drumilpatel2000@users.noreply.github.com> Date: Sun, 9 Feb 2020 18:11:57 -0500 Subject: [PATCH] Formatting short tables for readability (#6762) * Formatting short tables for readability Signed-off-by: Drumil Patel * Solving linting issues in DataTable.tsx Signed-off-by: Drumil Patel * Increasing maxFormattable Size to 1000 and changing value of toFormatStyle Signed-off-by: Drumil Patel * Solve tests failure for multiple alerts on size gretaer than 10000 Signed-off-by: Drumil Patel * Solve linting errors Signed-off-by: Drumil Patel * Add tests for alert of not formatting Signed-off-by: Drumil Patel --- .../src/pages/graph/DataTable.test.tsx | 38 ++++++++++++++++++- .../react-app/src/pages/graph/DataTable.tsx | 12 +++++- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/web/ui/react-app/src/pages/graph/DataTable.test.tsx b/web/ui/react-app/src/pages/graph/DataTable.test.tsx index adb5d2a734..382653df24 100755 --- a/web/ui/react-app/src/pages/graph/DataTable.test.tsx +++ b/web/ui/react-app/src/pages/graph/DataTable.test.tsx @@ -103,8 +103,42 @@ describe('DataTable', () => { }); it('renders a warning', () => { - const alert = dataTable.find(Alert); - expect(alert.render().text()).toEqual('Warning: Fetched 10001 metrics, only displaying first 10000.'); + const alerts = dataTable.find(Alert); + expect( + alerts + .first() + .render() + .text() + ).toEqual('Warning: Fetched 10001 metrics, only displaying first 10000.'); + }); + }); + + describe('when resultType is vector and size is more than maximum limit of formatting', () => { + const dataTableProps: QueryResult = { + data: { + resultType: 'vector', + result: Array.from(Array(1001).keys()).map(i => { + return { + metric: { + __name__: `metric_name_${i}`, + label1: 'value_1', + labeln: 'value_n', + }, + value: [1572098246.599, `${i}`], + }; + }), + }, + }; + const dataTable = shallow(); + + it('renders a warning', () => { + const alerts = dataTable.find(Alert); + expect( + alerts + .first() + .render() + .text() + ).toEqual('Notice: Showing more than 1000 series, turning off label formatting for performance reasons.'); }); }); diff --git a/web/ui/react-app/src/pages/graph/DataTable.tsx b/web/ui/react-app/src/pages/graph/DataTable.tsx index 27b10222c2..a6e728e9a2 100644 --- a/web/ui/react-app/src/pages/graph/DataTable.tsx +++ b/web/ui/react-app/src/pages/graph/DataTable.tsx @@ -56,8 +56,10 @@ const DataTable: FC = ({ data }) => { return Empty query result; } + const maxFormattableSize = 1000; let rows: ReactNode[] = []; let limited = false; + const doFormat = data.result.length <= maxFormattableSize; switch (data.resultType) { case 'vector': rows = (limitSeries(data.result) as InstantSample[]).map( @@ -65,7 +67,7 @@ const DataTable: FC = ({ data }) => { return ( - + {s.value[1]} @@ -84,7 +86,7 @@ const DataTable: FC = ({ data }) => { return ( - + {valueText} @@ -119,6 +121,12 @@ const DataTable: FC = ({ data }) => { Warning: Fetched {data.result.length} metrics, only displaying first {rows.length}. )} + {!doFormat && ( + + Notice: Showing more than {maxFormattableSize} series, turning off label formatting for + performance reasons. + + )} {rows}