Skip to content

Commit 4cb6fed

Browse files
feat(StorageGroups): add latency and allocation units columns (#1390)
1 parent f30a38f commit 4cb6fed

File tree

8 files changed

+98
-19
lines changed

8 files changed

+98
-19
lines changed

src/components/StorageGroupInfo/StorageGroupInfo.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ export function StorageGroupInfo({data, className, ...infoViewerProps}: StorageG
3636
State,
3737
MissingDisks,
3838
Available,
39-
LatencyPutTabletLog,
40-
LatencyPutUserData,
41-
LatencyGetFast,
39+
LatencyPutTabletLogMs,
40+
LatencyPutUserDataMs,
41+
LatencyGetFastMs,
4242
} = data || {};
4343

4444
const storageGroupInfoFirstColumn = [];
@@ -122,22 +122,22 @@ export function StorageGroupInfo({data, className, ...infoViewerProps}: StorageG
122122
value: <EntityStatus status={Latency} />,
123123
});
124124
}
125-
if (valueIsDefined(LatencyPutTabletLog)) {
125+
if (valueIsDefined(LatencyPutTabletLogMs)) {
126126
storageGroupInfoSecondColumn.push({
127127
label: storageGroupInfoKeyset('latency-put-tablet-log'),
128-
value: formatToMs(LatencyPutTabletLog),
128+
value: formatToMs(LatencyPutTabletLogMs),
129129
});
130130
}
131-
if (valueIsDefined(LatencyPutUserData)) {
131+
if (valueIsDefined(LatencyPutUserDataMs)) {
132132
storageGroupInfoSecondColumn.push({
133133
label: storageGroupInfoKeyset('latency-put-user-data'),
134-
value: formatToMs(LatencyPutUserData),
134+
value: formatToMs(LatencyPutUserDataMs),
135135
});
136136
}
137-
if (valueIsDefined(LatencyGetFast)) {
137+
if (valueIsDefined(LatencyGetFastMs)) {
138138
storageGroupInfoSecondColumn.push({
139139
label: storageGroupInfoKeyset('latency-get-fast'),
140-
value: formatToMs(LatencyGetFast),
140+
value: formatToMs(LatencyGetFastMs),
141141
});
142142
}
143143
if (valueIsDefined(AllocationUnits)) {

src/containers/Storage/StorageGroups/columns/columns.tsx

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ import {InternalLink} from '../../../../components/InternalLink';
1010
import {UsageLabel} from '../../../../components/UsageLabel/UsageLabel';
1111
import {VDiskWithDonorsStack} from '../../../../components/VDisk/VDiskWithDonorsStack';
1212
import {getStorageGroupPath} from '../../../../routes';
13+
import {valueIsDefined} from '../../../../utils';
1314
import {cn} from '../../../../utils/cn';
14-
import {stringifyVdiskId} from '../../../../utils/dataFormatters/dataFormatters';
15+
import {EMPTY_DATA_PLACEHOLDER} from '../../../../utils/constants';
16+
import {formatNumber, stringifyVdiskId} from '../../../../utils/dataFormatters/dataFormatters';
1517
import {isSortableStorageProperty} from '../../../../utils/storage';
18+
import {formatToMs, parseUsToMs} from '../../../../utils/timeParsers';
1619
import {bytesToGB, bytesToSpeed} from '../../../../utils/utils';
1720
import {Disks} from '../../Disks/Disks';
1821
import {getDegradedSeverity, getUsageSeverityForStorageGroup, isVdiskActive} from '../../utils';
@@ -183,6 +186,30 @@ const writeColumn: StorageGroupsColumn = {
183186
align: DataTable.RIGHT,
184187
};
185188

189+
const latencyColumn: StorageGroupsColumn = {
190+
name: STORAGE_GROUPS_COLUMNS_IDS.Latency,
191+
header: STORAGE_GROUPS_COLUMNS_TITLES.Latency,
192+
width: 100,
193+
render: ({row}) => {
194+
return valueIsDefined(row.LatencyPutTabletLogMs)
195+
? formatToMs(parseUsToMs(row.LatencyPutTabletLogMs))
196+
: EMPTY_DATA_PLACEHOLDER;
197+
},
198+
align: DataTable.RIGHT,
199+
};
200+
201+
const allocationUnitsColumn: StorageGroupsColumn = {
202+
name: STORAGE_GROUPS_COLUMNS_IDS.AllocationUnits,
203+
header: STORAGE_GROUPS_COLUMNS_TITLES.AllocationUnits,
204+
width: 150,
205+
render: ({row}) => {
206+
return valueIsDefined(row.AllocationUnits)
207+
? formatNumber(row.AllocationUnits)
208+
: EMPTY_DATA_PLACEHOLDER;
209+
},
210+
align: DataTable.RIGHT,
211+
};
212+
186213
const getVDisksColumn = (data?: GetStorageColumnsData): StorageGroupsColumn => ({
187214
name: STORAGE_GROUPS_COLUMNS_IDS.VDisks,
188215
header: STORAGE_GROUPS_COLUMNS_TITLES.VDisks,
@@ -236,7 +263,7 @@ export const getStorageTopGroupsColumns: StorageColumnsGetter = () => {
236263
});
237264
};
238265

239-
export const getStorageGroupsColumns: StorageColumnsGetter = (data?: GetStorageColumnsData) => {
266+
export const getStorageGroupsColumns: StorageColumnsGetter = (data) => {
240267
const columns = [
241268
groupIdColumn,
242269
poolNameColumn,
@@ -249,6 +276,8 @@ export const getStorageGroupsColumns: StorageColumnsGetter = (data?: GetStorageC
249276
usedSpaceFlagColumn,
250277
readColumn,
251278
writeColumn,
279+
latencyColumn,
280+
allocationUnitsColumn,
252281
getVDisksColumn(data),
253282
getDisksColumn(data),
254283
];

src/containers/Storage/StorageGroups/columns/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export const STORAGE_GROUPS_COLUMNS_IDS = {
2323
Read: 'Read',
2424
Write: 'Write',
2525
Latency: 'Latency',
26+
AllocationUnits: 'AllocationUnits',
2627
VDisks: 'VDisks',
2728
VDisksPDisks: 'VDisksPDisks',
2829
MissingDisks: 'MissingDisks',
@@ -89,6 +90,9 @@ export const STORAGE_GROUPS_COLUMNS_TITLES = {
8990
get Latency() {
9091
return i18n('latency');
9192
},
93+
get AllocationUnits() {
94+
return i18n('allocation-units');
95+
},
9296
get VDisks() {
9397
return i18n('vdisks');
9498
},

src/containers/Storage/StorageGroups/columns/i18n/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"read": "Read",
1616
"write": "Write",
1717
"latency": "Latency",
18+
"allocation-units": "Allocation Units",
1819
"vdisks": "VDisks",
1920
"vdisks-pdisks": "VDisks with PDisks"
2021
}

src/store/reducers/storage/types.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,10 @@ export interface PreparedStorageGroup {
8888
State?: string;
8989
MissingDisks?: string | number;
9090
Available?: string;
91-
LatencyPutTabletLog?: number;
92-
LatencyPutUserData?: number;
93-
LatencyGetFast?: number;
91+
92+
LatencyPutTabletLogMs?: number;
93+
LatencyPutUserDataMs?: number;
94+
LatencyGetFastMs?: number;
9495
}
9596

9697
export interface StorageSortParams {

src/store/reducers/storage/utils.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {getColorSeverity, getSeverityColor} from '../../../utils/disks/helpers';
1515
import {preparePDiskData, prepareVDiskData} from '../../../utils/disks/prepareDisks';
1616
import {prepareNodeSystemState} from '../../../utils/nodes';
1717
import {getUsage} from '../../../utils/storage';
18+
import {parseUsToMs} from '../../../utils/timeParsers';
1819

1920
import type {
2021
PreparedStorageGroup,
@@ -247,7 +248,19 @@ export const prepareStorageResponse = (data: TStorageInfo): PreparedStorageRespo
247248
export function prepareGroupsResponse(data: StorageGroupsResponse): PreparedStorageResponse {
248249
const {FoundGroups, TotalGroups, StorageGroups = [], StorageGroupGroups} = data;
249250
const preparedGroups: PreparedStorageGroup[] = StorageGroups.map((group) => {
250-
const {Usage, Read, Write, Used, Limit, MissingDisks, VDisks = [], Overall} = group;
251+
const {
252+
Usage,
253+
Read,
254+
Write,
255+
Used,
256+
Limit,
257+
MissingDisks,
258+
VDisks = [],
259+
Overall,
260+
LatencyPutTabletLog,
261+
LatencyPutUserData,
262+
LatencyGetFast,
263+
} = group;
251264

252265
const vDisks = VDisks.map((disk) => {
253266
const whiteboardVDisk = disk.Whiteboard;
@@ -275,6 +288,11 @@ export function prepareGroupsResponse(data: StorageGroupsResponse): PreparedStor
275288
Write: Number(Write),
276289
Used: Number(Used),
277290
Limit: Number(Limit),
291+
292+
LatencyPutTabletLogMs: parseUsToMs(LatencyPutTabletLog),
293+
LatencyPutUserDataMs: parseUsToMs(LatencyPutUserData),
294+
LatencyGetFastMs: parseUsToMs(LatencyGetFast),
295+
278296
Degraded: Number(MissingDisks),
279297
Overall,
280298

src/types/api/storage.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,25 @@ export interface TGroupsStorageGroupInfo {
159159
/** float */
160160
DiskSpaceUsage?: number;
161161

162+
/**
163+
* uint64
164+
*
165+
* time in us
166+
*/
167+
LatencyPutTabletLog?: string;
168+
/**
169+
* uint64
170+
*
171+
* time in us
172+
*/
173+
LatencyPutUserData?: string;
174+
/**
175+
* uint64
176+
*
177+
* time in us
178+
*/
179+
LatencyGetFast?: string;
180+
162181
VDisks?: TStorageVDisk[];
163182
}
164183

@@ -219,7 +238,13 @@ export type StorageV2SortValue =
219238
| 'Used'
220239
| 'Limit'
221240
| 'Read'
222-
| 'Write';
241+
| 'Write'
242+
243+
// These fields are not present in storage v2
244+
// So this sort does nothing
245+
// Added them here for types compatibility
246+
| 'AllocationUnits'
247+
| 'Latency';
223248

224249
/**
225250
* Values to sort /storage/groups response
@@ -230,9 +255,7 @@ export type GroupsSortField =
230255
| 'State'
231256
| 'Available'
232257
| 'DiskSpaceUsage'
233-
| 'Encryption'
234-
| 'AllocationUnits'
235-
| 'Latency';
258+
| 'Encryption';
236259

237260
export type StorageV2Sort = BackendSortParam<StorageV2SortValue>;
238261
export type GroupsSort = BackendSortParam<GroupsSortField>;

src/utils/storage.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ const STORAGE_SORT_VALUES: StorageV2SortValue[] = [
2424
'Limit',
2525
'Read',
2626
'Write',
27+
28+
'AllocationUnits',
29+
'Latency',
2730
];
2831

2932
export const isSortableStorageProperty = (value: unknown): value is StorageV2SortValue =>

0 commit comments

Comments
 (0)