From 20d42f6860521a474a0a935fc993a3d85bb66f51 Mon Sep 17 00:00:00 2001 From: Vadim Ogievetsky Date: Wed, 16 Oct 2024 11:16:18 -0700 Subject: [PATCH 01/12] some query tab fixes --- .../src/druid-models/execution/execution.ts | 5 ++ .../number-menu-items/number-menu-items.tsx | 9 ++-- .../column-tree/column-tree.tsx | 4 +- .../execution-summary-panel.tsx | 2 +- .../workbench-view/query-tab/query-tab.tsx | 54 +++++++++++-------- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/web-console/src/druid-models/execution/execution.ts b/web-console/src/druid-models/execution/execution.ts index f218acc0386d..f4a73eb97207 100644 --- a/web-console/src/druid-models/execution/execution.ts +++ b/web-console/src/druid-models/execution/execution.ts @@ -285,6 +285,10 @@ export class Execution { }); } + static fromDartReport(dartReport: MsqTaskReportResponse): Execution { + return Execution.fromTaskReport(dartReport).changeEngine('sql-msq-dart'); + } + static fromTaskReport(taskReport: MsqTaskReportResponse): Execution { // Must have status set for a valid report const id = deepGet(taskReport, 'multiStageQuery.taskId'); @@ -327,6 +331,7 @@ export class Execution { new Column({ name: sig.name, nativeType: sig.type, sqlType: sqlTypeNames?.[i] }), ), rows: results, + queryDuration: durationMs, }).inflateDatesFromSqlTypes(); } diff --git a/web-console/src/views/workbench-view/column-tree/column-tree-menu/number-menu-items/number-menu-items.tsx b/web-console/src/views/workbench-view/column-tree/column-tree-menu/number-menu-items/number-menu-items.tsx index 8ec4573c2adc..bf383f99254a 100644 --- a/web-console/src/views/workbench-view/column-tree/column-tree-menu/number-menu-items/number-menu-items.tsx +++ b/web-console/src/views/workbench-view/column-tree/column-tree-menu/number-menu-items/number-menu-items.tsx @@ -135,10 +135,11 @@ export const NumberMenuItems = React.memo(function NumberMenuItems(props: Number return ( - {aggregateMenuItem(F('SUM', column), `sum_${columnName}`)} - {aggregateMenuItem(F('MIN', column), `min_${columnName}`)} - {aggregateMenuItem(F('MAX', column), `max_${columnName}`)} - {aggregateMenuItem(F('AVG', column), `avg_${columnName}`)} + {aggregateMenuItem(F.sum(column), `sum_${columnName}`)} + {aggregateMenuItem(F.min(column), `min_${columnName}`)} + {aggregateMenuItem(F.max(column), `max_${columnName}`)} + {aggregateMenuItem(F.avg(column), `avg_${columnName}`)} + {aggregateMenuItem(F.countDistinct(column), `dist_${columnName}`)} {aggregateMenuItem(F('APPROX_QUANTILE', column, 0.98), `p98_${columnName}`)} {aggregateMenuItem(F('LATEST', column), `latest_${columnName}`)} diff --git a/web-console/src/views/workbench-view/column-tree/column-tree.tsx b/web-console/src/views/workbench-view/column-tree/column-tree.tsx index a89b4da57d1c..385cab937cef 100644 --- a/web-console/src/views/workbench-view/column-tree/column-tree.tsx +++ b/web-console/src/views/workbench-view/column-tree/column-tree.tsx @@ -104,7 +104,7 @@ type SearchMode = 'tables-and-columns' | 'tables-only' | 'columns-only'; const SEARCH_MODES: SearchMode[] = ['tables-and-columns', 'tables-only', 'columns-only']; -const SEARCH_MDOE_TITLE: Record = { +const SEARCH_MODE_TITLE: Record = { 'tables-and-columns': 'Tables and columns', 'tables-only': 'Tables only', 'columns-only': 'Columns only', @@ -641,7 +641,7 @@ export class ColumnTree extends React.PureComponent this.setState({ searchMode: mode })} /> ))} diff --git a/web-console/src/views/workbench-view/execution-summary-panel/execution-summary-panel.tsx b/web-console/src/views/workbench-view/execution-summary-panel/execution-summary-panel.tsx index b1930ae50d2b..62cc9c3a375b 100644 --- a/web-console/src/views/workbench-view/execution-summary-panel/execution-summary-panel.tsx +++ b/web-console/src/views/workbench-view/execution-summary-panel/execution-summary-panel.tsx @@ -142,7 +142,7 @@ export const ExecutionSummaryPanel = React.memo(function ExecutionSummaryPanel( - - - {this.renderBulkSegmentsActions()} - this.setState({ showSegmentTimeline: !showSegmentTimeline })} - disabled={!capabilities.hasSqlOrCoordinatorAccess()} - /> - - this.setState(prevState => ({ - visibleColumns: prevState.visibleColumns.toggle(column), - })) - } - onClose={added => { - if (!added) return; - this.fetchData(groupByInterval); + > + None + + + + {this.renderBulkSegmentsActions()} + this.setState({ showSegmentTimeline: !showSegmentTimeline })} + disabled={!capabilities.hasSqlOrCoordinatorAccess()} + /> + + this.setState(prevState => ({ + visibleColumns: prevState.visibleColumns.toggle(column), + })) + } + onClose={added => { + if (!added) return; + this.fetchData(groupByInterval); + }} + tableColumnsHidden={visibleColumns.getHiddenColumns()} + /> + + {showSegmentTimeline && } {this.renderSegmentsTable()} - + {this.renderTerminateSegmentAction()} {segmentTableActionDialogId && datasourceTableActionDialogId && ( this.setState({ showFullShardSpec: undefined })} /> )} - + ); } } From cb82983a4f910f167e253a26a6b21a0206ee7c40 Mon Sep 17 00:00:00 2001 From: Vadim Ogievetsky Date: Wed, 23 Oct 2024 11:14:27 -0700 Subject: [PATCH 11/12] fix snapshots --- .../datasources-view.spec.tsx.snap | 657 +++++++++--------- .../__snapshots__/segments-view.spec.tsx.snap | 175 ++--- 2 files changed, 424 insertions(+), 408 deletions(-) diff --git a/web-console/src/views/datasources-view/__snapshots__/datasources-view.spec.tsx.snap b/web-console/src/views/datasources-view/__snapshots__/datasources-view.spec.tsx.snap index 2444d1a4f236..6da41f6eb763 100644 --- a/web-console/src/views/datasources-view/__snapshots__/datasources-view.spec.tsx.snap +++ b/web-console/src/views/datasources-view/__snapshots__/datasources-view.spec.tsx.snap @@ -108,335 +108,344 @@ exports[`DatasourcesView matches snapshot 1`] = ` } /> - - Datasource -
- name - , - "accessor": "datasource", - "show": true, - "width": 150, - }, - { - "Cell": [Function], - "Header": "Availability", - "accessor": "num_segments", - "className": "padded", - "filterable": false, - "show": true, - "sortMethod": [Function], - "width": 220, - }, - { - "Cell": [Function], - "Header": - Historical -
- load/drop queues -
, - "accessor": "num_segments_to_load", - "className": "padded", - "filterable": false, - "show": true, - "width": 180, - }, - { - "Cell": [Function], - "Header": - Total -
- data size -
, - "accessor": "total_data_size", - "className": "padded", - "filterable": false, - "show": true, - "width": 100, - }, - { - "Cell": [Function], - "Header": "Running tasks", - "accessor": [Function], - "filterable": false, - "id": "running_tasks", - "show": true, - "width": 200, - }, - { - "Cell": [Function], - "Header": - Segment rows -
- minimum / average / maximum -
, - "accessor": "avg_segment_rows", - "className": "padded", - "filterable": false, - "show": true, - "width": 230, - }, - { - "Cell": [Function], - "Header": - Segment size -
- minimum / average / maximum -
, - "accessor": "avg_segment_size", - "className": "padded", - "filterable": false, - "show": false, - "width": 270, - }, - { - "Cell": [Function], - "Header": - Segment -
- granularity -
, - "accessor": [Function], - "className": "padded", - "filterable": false, - "id": "segment_granularity", - "show": false, - "width": 100, - }, - { - "Cell": [Function], - "Header": - Total -
- rows -
, - "accessor": "total_rows", - "className": "padded", - "filterable": false, - "show": true, - "width": 110, - }, - { - "Cell": [Function], - "Header": - Avg. row size -
- (bytes) -
, - "accessor": "avg_row_size", - "className": "padded", - "filterable": false, - "show": true, - "width": 100, - }, - { - "Cell": [Function], - "Header": - Replicated -
- size -
, - "accessor": "replicated_size", - "className": "padded", - "filterable": false, - "show": true, - "width": 100, - }, - { - "Cell": [Function], - "Header": "Compaction", - "accessor": [Function], - "filterable": false, - "id": "compactionStatus", - "show": true, - "width": 180, - }, - { - "Cell": [Function], - "Header": - % Compacted -
- bytes / segments / intervals -
, - "accessor": [Function], - "className": "padded", - "filterable": false, - "id": "percentCompacted", - "show": true, - "width": 200, - }, - { - "Cell": [Function], - "Header": - Left to be -
- compacted -
, - "accessor": [Function], - "className": "padded", - "filterable": false, - "id": "leftToBeCompacted", - "show": true, - "width": 100, - }, + + + Datasource +
+ name + , + "accessor": "datasource", + "show": true, + "width": 150, + }, + { + "Cell": [Function], + "Header": "Availability", + "accessor": "num_segments", + "className": "padded", + "filterable": false, + "show": true, + "sortMethod": [Function], + "width": 220, + }, + { + "Cell": [Function], + "Header": + Historical +
+ load/drop queues +
, + "accessor": "num_segments_to_load", + "className": "padded", + "filterable": false, + "show": true, + "width": 180, + }, + { + "Cell": [Function], + "Header": + Total +
+ data size +
, + "accessor": "total_data_size", + "className": "padded", + "filterable": false, + "show": true, + "width": 100, + }, + { + "Cell": [Function], + "Header": "Running tasks", + "accessor": [Function], + "filterable": false, + "id": "running_tasks", + "show": true, + "width": 200, + }, + { + "Cell": [Function], + "Header": + Segment rows +
+ minimum / average / maximum +
, + "accessor": "avg_segment_rows", + "className": "padded", + "filterable": false, + "show": true, + "width": 230, + }, + { + "Cell": [Function], + "Header": + Segment size +
+ minimum / average / maximum +
, + "accessor": "avg_segment_size", + "className": "padded", + "filterable": false, + "show": false, + "width": 270, + }, + { + "Cell": [Function], + "Header": + Segment +
+ granularity +
, + "accessor": [Function], + "className": "padded", + "filterable": false, + "id": "segment_granularity", + "show": false, + "width": 100, + }, + { + "Cell": [Function], + "Header": + Total +
+ rows +
, + "accessor": "total_rows", + "className": "padded", + "filterable": false, + "show": true, + "width": 110, + }, + { + "Cell": [Function], + "Header": + Avg. row size +
+ (bytes) +
, + "accessor": "avg_row_size", + "className": "padded", + "filterable": false, + "show": true, + "width": 100, + }, + { + "Cell": [Function], + "Header": + Replicated +
+ size +
, + "accessor": "replicated_size", + "className": "padded", + "filterable": false, + "show": true, + "width": 100, + }, + { + "Cell": [Function], + "Header": "Compaction", + "accessor": [Function], + "filterable": false, + "id": "compactionStatus", + "show": true, + "width": 180, + }, + { + "Cell": [Function], + "Header": + % Compacted +
+ bytes / segments / intervals +
, + "accessor": [Function], + "className": "padded", + "filterable": false, + "id": "percentCompacted", + "show": true, + "width": 200, + }, + { + "Cell": [Function], + "Header": + Left to be +
+ compacted +
, + "accessor": [Function], + "className": "padded", + "filterable": false, + "id": "leftToBeCompacted", + "show": true, + "width": 100, + }, + { + "Cell": [Function], + "Header": "Retention", + "accessor": [Function], + "filterable": false, + "id": "retention", + "show": true, + "width": 200, + }, + { + "Cell": [Function], + "Header": "Actions", + "accessor": "datasource", + "filterable": false, + "id": "actions", + "sortable": false, + "width": 70, + }, + ] + } + data={[]} + defaultExpanded={{}} + defaultFilterMethod={[Function]} + defaultFiltered={[]} + defaultPage={0} + defaultPageSize={50} + defaultResized={[]} + defaultSortDesc={false} + defaultSortMethod={[Function]} + defaultSorted={[]} + expanderDefaults={ { - "Cell": [Function], - "Header": "Actions", - "accessor": "datasource", "filterable": false, - "id": "actions", + "resizable": false, "sortable": false, - "width": 70, - }, - ] - } - data={[]} - defaultExpanded={{}} - defaultFilterMethod={[Function]} - defaultFiltered={[]} - defaultPage={0} - defaultPageSize={50} - defaultResized={[]} - defaultSortDesc={false} - defaultSortMethod={[Function]} - defaultSorted={[]} - expanderDefaults={ - { - "filterable": false, - "resizable": false, - "sortable": false, - "width": 35, + "width": 35, + } } - } - filterable={true} - filtered={[]} - freezeWhenExpanded={false} - getLoadingProps={[Function]} - getNoDataProps={[Function]} - getPaginationProps={[Function]} - getProps={[Function]} - getResizerProps={[Function]} - getTableProps={[Function]} - getTbodyProps={[Function]} - getTdProps={[Function]} - getTfootProps={[Function]} - getTfootTdProps={[Function]} - getTfootTrProps={[Function]} - getTheadFilterProps={[Function]} - getTheadFilterThProps={[Function]} - getTheadFilterTrProps={[Function]} - getTheadGroupProps={[Function]} - getTheadGroupThProps={[Function]} - getTheadGroupTrProps={[Function]} - getTheadProps={[Function]} - getTheadThProps={[Function]} - getTheadTrProps={[Function]} - getTrGroupProps={[Function]} - getTrProps={[Function]} - groupedByPivotKey="_groupedByPivot" - indexKey="_index" - loading={true} - loadingText="Loading..." - multiSort={true} - nestingLevelKey="_nestingLevel" - nextText="Next" - noDataText="" - ofText="of" - onFetchData={[Function]} - onFilteredChange={[Function]} - originalKey="_original" - pageJumpText="jump to page" - pageSizeOptions={ - [ - 50, - 100, - 200, - ] - } - pageText="Page" - pivotDefaults={{}} - pivotIDKey="_pivotID" - pivotValKey="_pivotVal" - previousText="Previous" - resizable={true} - resolveData={[Function]} - rowsSelectorText="rows per page" - rowsText="rows" - showPageJump={true} - showPageSizeOptions={true} - showPagination={false} - showPaginationBottom={true} - showPaginationTop={false} - sortable={true} - style={{}} - subRowsKey="_subRows" - /> + filterable={true} + filtered={[]} + freezeWhenExpanded={false} + getLoadingProps={[Function]} + getNoDataProps={[Function]} + getPaginationProps={[Function]} + getProps={[Function]} + getResizerProps={[Function]} + getTableProps={[Function]} + getTbodyProps={[Function]} + getTdProps={[Function]} + getTfootProps={[Function]} + getTfootTdProps={[Function]} + getTfootTrProps={[Function]} + getTheadFilterProps={[Function]} + getTheadFilterThProps={[Function]} + getTheadFilterTrProps={[Function]} + getTheadGroupProps={[Function]} + getTheadGroupThProps={[Function]} + getTheadGroupTrProps={[Function]} + getTheadProps={[Function]} + getTheadThProps={[Function]} + getTheadTrProps={[Function]} + getTrGroupProps={[Function]} + getTrProps={[Function]} + groupedByPivotKey="_groupedByPivot" + indexKey="_index" + loading={true} + loadingText="Loading..." + multiSort={true} + nestingLevelKey="_nestingLevel" + nextText="Next" + noDataText="" + ofText="of" + onFetchData={[Function]} + onFilteredChange={[Function]} + originalKey="_original" + pageJumpText="jump to page" + pageSizeOptions={ + [ + 50, + 100, + 200, + ] + } + pageText="Page" + pivotDefaults={{}} + pivotIDKey="_pivotID" + pivotValKey="_pivotVal" + previousText="Previous" + resizable={true} + resolveData={[Function]} + rowsSelectorText="rows per page" + rowsText="rows" + showPageJump={true} + showPageSizeOptions={true} + showPagination={false} + showPaginationBottom={true} + showPaginationTop={false} + sortable={true} + style={{}} + subRowsKey="_subRows" + /> +
`; diff --git a/web-console/src/views/segments-view/__snapshots__/segments-view.spec.tsx.snap b/web-console/src/views/segments-view/__snapshots__/segments-view.spec.tsx.snap index e91e6d44eafb..e177003b7eed 100755 --- a/web-console/src/views/segments-view/__snapshots__/segments-view.spec.tsx.snap +++ b/web-console/src/views/segments-view/__snapshots__/segments-view.spec.tsx.snap @@ -1,90 +1,97 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`SegmentsView matches snapshot 1`] = ` - -
+ - - - - Group by - - - - None - - - Interval - - - - - - - + + Group by + + + + None + + + Interval + + + + - + + + + + -
-
+ + `; From 3ac17c1a508badbfccedcf0b4c33423e82b6c242 Mon Sep 17 00:00:00 2001 From: Vadim Ogievetsky Date: Mon, 28 Oct 2024 15:13:37 -0700 Subject: [PATCH 12/12] pin full --- web-console/src/variables.scss | 8 ++++++++ .../src/views/datasources-view/datasources-view.scss | 8 ++++++-- web-console/src/views/segments-view/segments-view.scss | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/web-console/src/variables.scss b/web-console/src/variables.scss index 4ccc4b5e8298..3157ac9cbb85 100644 --- a/web-console/src/variables.scss +++ b/web-console/src/variables.scss @@ -55,3 +55,11 @@ $table-cell-h-padding: 5px; box-shadow: $pt-dark-elevation-shadow-1; } } + +@mixin pin-full { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} diff --git a/web-console/src/views/datasources-view/datasources-view.scss b/web-console/src/views/datasources-view/datasources-view.scss index d5e3548d837f..b0abe78ec56a 100644 --- a/web-console/src/views/datasources-view/datasources-view.scss +++ b/web-console/src/views/datasources-view/datasources-view.scss @@ -42,7 +42,11 @@ height: 100%; } - .clickable-cell { - cursor: pointer; + .ReactTable { + @include pin-full; + + .clickable-cell { + cursor: pointer; + } } } diff --git a/web-console/src/views/segments-view/segments-view.scss b/web-console/src/views/segments-view/segments-view.scss index b58201515c9f..a45d8860db1f 100644 --- a/web-console/src/views/segments-view/segments-view.scss +++ b/web-console/src/views/segments-view/segments-view.scss @@ -42,6 +42,8 @@ } .ReactTable { + @include pin-full; + .-totalPages { display: none; }