Skip to content

Commit a9f79a3

Browse files
fix: fields required in all groups and nodes requests (#1515)
1 parent 1868e18 commit a9f79a3

File tree

8 files changed

+75
-17
lines changed

8 files changed

+75
-17
lines changed

src/containers/Storage/Storage.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export const Storage = ({database, viewContext, nodeId, groupId, pDiskId}: Stora
107107
groupId,
108108
pDiskId,
109109
shouldUseGroupsHandler: groupsHandlerAvailable,
110+
fieldsRequired: 'all',
110111
},
111112
{
112113
skip: !isGroups || !capabilitiesLoaded,

src/containers/StorageGroupPage/StorageGroupPage.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ export function StorageGroupPage() {
4040
const shouldUseGroupsHandler = useStorageGroupsHandlerAvailable();
4141
const capabilitiesLoaded = useCapabilitiesLoaded();
4242
const groupQuery = storageApi.useGetStorageGroupsInfoQuery(
43-
valueIsDefined(groupId) ? {groupId, shouldUseGroupsHandler, with: 'all'} : skipToken,
43+
valueIsDefined(groupId)
44+
? {groupId, shouldUseGroupsHandler, with: 'all', fieldsRequired: 'all'}
45+
: skipToken,
4446
{
4547
pollingInterval: autoRefreshInterval,
4648
skip: !capabilitiesLoaded,

src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,27 @@ import {
55
getHostColumn,
66
getNodeIdColumn,
77
} from '../../../../../components/nodesColumns/columns';
8-
import {NODES_COLUMNS_WIDTH_LS_KEY} from '../../../../../components/nodesColumns/constants';
8+
import {
9+
NODES_COLUMNS_TO_DATA_FIELDS,
10+
NODES_COLUMNS_WIDTH_LS_KEY,
11+
} from '../../../../../components/nodesColumns/constants';
912
import type {GetNodesColumnsParams} from '../../../../../components/nodesColumns/types';
1013
import {nodesApi} from '../../../../../store/reducers/nodes/nodes';
1114
import type {NodesPreparedEntity} from '../../../../../store/reducers/nodes/types';
1215
import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
1316
import type {AdditionalNodesProps} from '../../../../../types/additionalProps';
17+
import type {NodesRequiredField} from '../../../../../types/api/nodes';
1418
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../../utils/constants';
1519
import {useAutoRefreshInterval, useSearchQuery} from '../../../../../utils/hooks';
20+
import {getRequiredDataFields} from '../../../../../utils/tableUtils/getRequiredDataFields';
1621
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
1722
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
1823
import {getSectionTitle} from '../getSectionTitle';
1924
import i18n from '../i18n';
2025

2126
export function getTopNodesByCpuColumns(
2227
params: GetNodesColumnsParams,
23-
): Column<NodesPreparedEntity>[] {
28+
): [Column<NodesPreparedEntity>[], NodesRequiredField[]] {
2429
const hostColumn = {...getHostColumn<NodesPreparedEntity>(params), width: undefined};
2530

2631
const columns = [
@@ -29,10 +34,15 @@ export function getTopNodesByCpuColumns(
2934
hostColumn,
3035
];
3136

32-
return columns.map((column) => ({
37+
const preparedColumns = columns.map((column) => ({
3338
...column,
3439
sortable: false,
3540
}));
41+
42+
const columnsIds = preparedColumns.map((column) => column.name);
43+
const dataFieldsRequired = getRequiredDataFields(columnsIds, NODES_COLUMNS_TO_DATA_FIELDS);
44+
45+
return [preparedColumns, dataFieldsRequired];
3646
}
3747

3848
interface TopNodesByCpuProps {
@@ -44,7 +54,7 @@ export function TopNodesByCpu({tenantName, additionalNodesProps}: TopNodesByCpuP
4454
const query = useSearchQuery();
4555

4656
const [autoRefreshInterval] = useAutoRefreshInterval();
47-
const columns = getTopNodesByCpuColumns({
57+
const [columns, fieldsRequired] = getTopNodesByCpuColumns({
4858
getNodeRef: additionalNodesProps?.getNodeRef,
4959
database: tenantName,
5060
});
@@ -55,6 +65,8 @@ export function TopNodesByCpu({tenantName, additionalNodesProps}: TopNodesByCpuP
5565
type: 'any',
5666
sort: '-CPU',
5767
limit: TENANT_OVERVIEW_TABLES_LIMIT,
68+
tablets: false,
69+
fieldsRequired,
5870
},
5971
{pollingInterval: autoRefreshInterval},
6072
);

src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,27 @@ import {
66
getNodeIdColumn,
77
getVersionColumn,
88
} from '../../../../../components/nodesColumns/columns';
9-
import {NODES_COLUMNS_WIDTH_LS_KEY} from '../../../../../components/nodesColumns/constants';
9+
import {
10+
NODES_COLUMNS_TO_DATA_FIELDS,
11+
NODES_COLUMNS_WIDTH_LS_KEY,
12+
} from '../../../../../components/nodesColumns/constants';
1013
import type {GetNodesColumnsParams} from '../../../../../components/nodesColumns/types';
1114
import {nodesApi} from '../../../../../store/reducers/nodes/nodes';
1215
import type {NodesPreparedEntity} from '../../../../../store/reducers/nodes/types';
1316
import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
1417
import type {AdditionalNodesProps} from '../../../../../types/additionalProps';
18+
import type {NodesRequiredField} from '../../../../../types/api/nodes';
1519
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../../utils/constants';
1620
import {useAutoRefreshInterval, useSearchQuery} from '../../../../../utils/hooks';
21+
import {getRequiredDataFields} from '../../../../../utils/tableUtils/getRequiredDataFields';
1722
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
1823
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
1924
import {getSectionTitle} from '../getSectionTitle';
2025
import i18n from '../i18n';
2126

22-
function getTopNodesByLoadColumns(params: GetNodesColumnsParams): Column<NodesPreparedEntity>[] {
27+
function getTopNodesByLoadColumns(
28+
params: GetNodesColumnsParams,
29+
): [Column<NodesPreparedEntity>[], NodesRequiredField[]] {
2330
const hostColumn = {
2431
...getHostColumn<NodesPreparedEntity>(params),
2532
width: undefined,
@@ -32,10 +39,15 @@ function getTopNodesByLoadColumns(params: GetNodesColumnsParams): Column<NodesPr
3239
getVersionColumn<NodesPreparedEntity>(),
3340
];
3441

35-
return columns.map((column) => ({
42+
const preparedColumns = columns.map((column) => ({
3643
...column,
3744
sortable: false,
3845
}));
46+
47+
const columnsIds = preparedColumns.map((column) => column.name);
48+
const dataFieldsRequired = getRequiredDataFields(columnsIds, NODES_COLUMNS_TO_DATA_FIELDS);
49+
50+
return [preparedColumns, dataFieldsRequired];
3951
}
4052

4153
interface TopNodesByLoadProps {
@@ -47,7 +59,7 @@ export function TopNodesByLoad({tenantName, additionalNodesProps}: TopNodesByLoa
4759
const query = useSearchQuery();
4860

4961
const [autoRefreshInterval] = useAutoRefreshInterval();
50-
const columns = getTopNodesByLoadColumns({
62+
const [columns, fieldsRequired] = getTopNodesByLoadColumns({
5163
getNodeRef: additionalNodesProps?.getNodeRef,
5264
database: tenantName,
5365
});
@@ -58,6 +70,8 @@ export function TopNodesByLoad({tenantName, additionalNodesProps}: TopNodesByLoa
5870
type: 'any',
5971
sort: '-LoadAverage',
6072
limit: TENANT_OVERVIEW_TABLES_LIMIT,
73+
tablets: false,
74+
fieldsRequired,
6175
},
6276
{pollingInterval: autoRefreshInterval},
6377
);

src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,27 @@ import {
1010
getTabletsColumn,
1111
getUptimeColumn,
1212
} from '../../../../../components/nodesColumns/columns';
13-
import {NODES_COLUMNS_WIDTH_LS_KEY} from '../../../../../components/nodesColumns/constants';
13+
import {
14+
NODES_COLUMNS_TO_DATA_FIELDS,
15+
NODES_COLUMNS_WIDTH_LS_KEY,
16+
} from '../../../../../components/nodesColumns/constants';
1417
import type {GetNodesColumnsParams} from '../../../../../components/nodesColumns/types';
1518
import {nodesApi} from '../../../../../store/reducers/nodes/nodes';
1619
import type {NodesPreparedEntity} from '../../../../../store/reducers/nodes/types';
1720
import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
1821
import type {AdditionalNodesProps} from '../../../../../types/additionalProps';
22+
import type {NodesRequiredField} from '../../../../../types/api/nodes';
1923
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../../utils/constants';
2024
import {useAutoRefreshInterval, useSearchQuery} from '../../../../../utils/hooks';
25+
import {getRequiredDataFields} from '../../../../../utils/tableUtils/getRequiredDataFields';
2126
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
2227
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
2328
import {getSectionTitle} from '../getSectionTitle';
2429
import i18n from '../i18n';
2530

26-
function getTopNodesByMemoryColumns(params: GetNodesColumnsParams): Column<NodesPreparedEntity>[] {
31+
function getTopNodesByMemoryColumns(
32+
params: GetNodesColumnsParams,
33+
): [Column<NodesPreparedEntity>[], NodesRequiredField[]] {
2734
const memoryColumn = {
2835
...getMemoryColumn<NodesPreparedEntity>(),
2936
header: i18n('column-header.process'),
@@ -40,10 +47,15 @@ function getTopNodesByMemoryColumns(params: GetNodesColumnsParams): Column<Nodes
4047
getTabletsColumn<NodesPreparedEntity>(params),
4148
];
4249

43-
return columns.map((column) => ({
50+
const preparedColumns = columns.map((column) => ({
4451
...column,
4552
sortable: false,
4653
}));
54+
55+
const columnsIds = preparedColumns.map((column) => column.name);
56+
const dataFieldsRequired = getRequiredDataFields(columnsIds, NODES_COLUMNS_TO_DATA_FIELDS);
57+
58+
return [preparedColumns, dataFieldsRequired];
4759
}
4860

4961
interface TopNodesByMemoryProps {
@@ -55,7 +67,7 @@ export function TopNodesByMemory({tenantName, additionalNodesProps}: TopNodesByM
5567
const query = useSearchQuery();
5668

5769
const [autoRefreshInterval] = useAutoRefreshInterval();
58-
const columns = getTopNodesByMemoryColumns({
70+
const [columns, fieldsRequired] = getTopNodesByMemoryColumns({
5971
getNodeRef: additionalNodesProps?.getNodeRef,
6072
database: tenantName,
6173
});
@@ -67,6 +79,7 @@ export function TopNodesByMemory({tenantName, additionalNodesProps}: TopNodesByM
6779
tablets: true,
6880
sort: '-Memory',
6981
limit: TENANT_OVERVIEW_TABLES_LIMIT,
82+
fieldsRequired,
7083
},
7184
{pollingInterval: autoRefreshInterval},
7285
);

src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,30 @@ import {
44
} from '../../../../../store/reducers/capabilities/hooks';
55
import {storageApi} from '../../../../../store/reducers/storage/storage';
66
import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants';
7+
import type {GroupsRequiredField} from '../../../../../types/api/storage';
78
import {TENANT_OVERVIEW_TABLES_LIMIT} from '../../../../../utils/constants';
89
import {useAutoRefreshInterval, useSearchQuery} from '../../../../../utils/hooks';
10+
import {getRequiredDataFields} from '../../../../../utils/tableUtils/getRequiredDataFields';
911
import {getStorageTopGroupsColumns} from '../../../../Storage/StorageGroups/columns/columns';
10-
import {STORAGE_GROUPS_COLUMNS_WIDTH_LS_KEY} from '../../../../Storage/StorageGroups/columns/constants';
12+
import {
13+
GROUPS_COLUMNS_TO_DATA_FIELDS,
14+
STORAGE_GROUPS_COLUMNS_WIDTH_LS_KEY,
15+
} from '../../../../Storage/StorageGroups/columns/constants';
16+
import type {StorageGroupsColumn} from '../../../../Storage/StorageGroups/columns/types';
1117
import {TenantTabsGroups, getTenantPath} from '../../../TenantPages';
1218
import {TenantOverviewTableLayout} from '../TenantOverviewTableLayout';
1319
import {getSectionTitle} from '../getSectionTitle';
1420
import i18n from '../i18n';
1521

22+
function getColumns(): [StorageGroupsColumn[], GroupsRequiredField[]] {
23+
const preparedColumns = getStorageTopGroupsColumns();
24+
25+
const columnsIds = preparedColumns.map((column) => column.name);
26+
const dataFieldsRequired = getRequiredDataFields(columnsIds, GROUPS_COLUMNS_TO_DATA_FIELDS);
27+
28+
return [preparedColumns, dataFieldsRequired];
29+
}
30+
1631
interface TopGroupsProps {
1732
tenant?: string;
1833
}
@@ -24,7 +39,7 @@ export function TopGroups({tenant}: TopGroupsProps) {
2439
const groupsHandlerAvailable = useStorageGroupsHandlerAvailable();
2540
const [autoRefreshInterval] = useAutoRefreshInterval();
2641

27-
const columns = getStorageTopGroupsColumns();
42+
const [columns, fieldsRequired] = getColumns();
2843

2944
const {currentData, isFetching, error} = storageApi.useGetStorageGroupsInfoQuery(
3045
{
@@ -33,6 +48,7 @@ export function TopGroups({tenant}: TopGroupsProps) {
3348
with: 'all',
3449
limit: TENANT_OVERVIEW_TABLES_LIMIT,
3550
shouldUseGroupsHandler: groupsHandlerAvailable,
51+
fieldsRequired,
3652
},
3753
{
3854
pollingInterval: autoRefreshInterval,

src/services/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ export class YdbEmbeddedAPI extends AxiosWrapper {
251251
);
252252
}
253253
getStorageGroups(
254-
{nodeId, pDiskId, groupId, fieldsRequired = 'all', filter, ...params}: GroupsRequestParams,
254+
{nodeId, pDiskId, groupId, fieldsRequired, filter, ...params}: GroupsRequestParams,
255255
{concurrentId, signal}: AxiosOptions = {},
256256
) {
257257
const preparedNodeId = Array.isArray(nodeId)

src/utils/tableUtils/getRequiredDataFields.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ export function getRequiredDataFields<ColumnId extends string, RequiredField ext
1111
return fields;
1212
}, new Set<RequiredField>());
1313

14-
return Array.from(requiredFieldsSet);
14+
return Array.from(requiredFieldsSet).sort();
1515
}

0 commit comments

Comments
 (0)