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}