[Index Management] Be more explicit about data retention values (#170296)

This commit is contained in:
Ignacio Rivas 2023-11-03 15:53:33 +01:00 committed by GitHub
parent 4e065dac28
commit e34b2ff35b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 136 additions and 61 deletions

View file

@ -191,8 +191,8 @@ describe('Data Streams tab', () => {
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', 'dataStream1', 'green', '1', '7d', 'Delete'],
['', 'dataStream2', 'green', '1', '7d', 'Delete'],
['', 'dataStream1', 'green', '1', '7 days', 'Delete'],
['', 'dataStream2', 'green', '1', '7 days', 'Delete'],
]);
});
@ -230,8 +230,26 @@ describe('Data Streams tab', () => {
// The table renders with the stats columns though.
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '5b', '1', '7d', 'Delete'],
['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1kb', '1', '7d', 'Delete'],
[
'',
'dataStream1',
'green',
'December 31st, 1969 7:00:00 PM',
'5b',
'1',
'7 days',
'Delete',
],
[
'',
'dataStream2',
'green',
'December 31st, 1969 7:00:00 PM',
'1kb',
'1',
'7 days',
'Delete',
],
]);
});
@ -250,8 +268,26 @@ describe('Data Streams tab', () => {
// the human-readable string values.
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '5b', '1', '7d', 'Delete'],
['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1kb', '1', '7d', 'Delete'],
[
'',
'dataStream1',
'green',
'December 31st, 1969 7:00:00 PM',
'5b',
'1',
'7 days',
'Delete',
],
[
'',
'dataStream2',
'green',
'December 31st, 1969 7:00:00 PM',
'1kb',
'1',
'7 days',
'Delete',
],
]);
});
@ -279,8 +315,8 @@ describe('Data Streams tab', () => {
// The table renders with the stats columns except the Storage size column
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '1', '7d', 'Delete'],
['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1', '7d', 'Delete'],
['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '1', '7 days', 'Delete'],
['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1', '7 days', 'Delete'],
]);
});
@ -618,7 +654,7 @@ describe('Data Streams tab', () => {
const { actions, find, exists } = testBed;
await actions.clickNameAt(1);
expect(find('dataRetentionDetail').text()).toBe('7d');
expect(find('dataRetentionDetail').text()).toBe('7 days');
actions.clickEditDataRetentionButton();
@ -782,8 +818,15 @@ describe('Data Streams tab', () => {
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', `managed-data-stream${nonBreakingSpace}Fleet-managed`, 'green', '1', '7d', 'Delete'],
['', 'non-managed-data-stream', 'green', '1', '7d', 'Delete'],
[
'',
`managed-data-stream${nonBreakingSpace}Fleet-managed`,
'green',
'1',
'7 days',
'Delete',
],
['', 'non-managed-data-stream', 'green', '1', '7 days', 'Delete'],
]);
});
@ -792,15 +835,22 @@ describe('Data Streams tab', () => {
let { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', `managed-data-stream${nonBreakingSpace}Fleet-managed`, 'green', '1', '7d', 'Delete'],
['', 'non-managed-data-stream', 'green', '1', '7d', 'Delete'],
[
'',
`managed-data-stream${nonBreakingSpace}Fleet-managed`,
'green',
'1',
'7 days',
'Delete',
],
['', 'non-managed-data-stream', 'green', '1', '7 days', 'Delete'],
]);
actions.toggleViewFilterAt(0);
({ tableCellsValues } = table.getMetaData('dataStreamTable'));
expect(tableCellsValues).toEqual([
['', 'non-managed-data-stream', 'green', '1', '7d', 'Delete'],
['', 'non-managed-data-stream', 'green', '1', '7 days', 'Delete'],
]);
});
});
@ -832,7 +882,7 @@ describe('Data Streams tab', () => {
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', `hidden-data-stream${nonBreakingSpace}Hidden`, 'green', '1', '7d', 'Delete'],
['', `hidden-data-stream${nonBreakingSpace}Hidden`, 'green', '1', '7 days', 'Delete'],
]);
});
});
@ -879,10 +929,10 @@ describe('Data Streams tab', () => {
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
['', 'dataStreamNoDelete', 'green', '1', '7d', ''],
['', 'dataStreamNoEditRetention', 'green', '1', '7d', 'Delete'],
['', 'dataStreamNoPermissions', 'green', '1', '7d', ''],
['', 'dataStreamWithDelete', 'green', '1', '7d', 'Delete'],
['', 'dataStreamNoDelete', 'green', '1', '7 days', ''],
['', 'dataStreamNoEditRetention', 'green', '1', '7 days', 'Delete'],
['', 'dataStreamNoPermissions', 'green', '1', '7 days', ''],
['', 'dataStreamWithDelete', 'green', '1', '7 days', 'Delete'],
]);
});

View file

@ -0,0 +1,57 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { i18n } from '@kbn/i18n';
export const timeUnits = [
{
value: 'd',
text: i18n.translate('xpack.idxMgmt.dataStream.retention.timeUnits.daysLabel', {
defaultMessage: 'days',
}),
},
{
value: 'h',
text: i18n.translate('xpack.idxMgmt.dataStream.retention.timeUnits.hoursLabel', {
defaultMessage: 'hours',
}),
},
{
value: 'm',
text: i18n.translate('xpack.idxMgmt.dataStream.retention.timeUnits.minutesLabel', {
defaultMessage: 'minutes',
}),
},
{
value: 's',
text: i18n.translate('xpack.idxMgmt.dataStream.retention.timeUnits.secondsLabel', {
defaultMessage: 'seconds',
}),
},
];
// These are the time units that are not supported by the UI, but are supported by the ES API.
export const extraTimeUnits = [
{
value: 'ms',
text: i18n.translate('xpack.idxMgmt.dataStream.retention.timeUnits.msLabel', {
defaultMessage: 'milliseconds',
}),
},
{
value: 'micros',
text: i18n.translate('xpack.idxMgmt.dataStream.retention.timeUnits.microsLabel', {
defaultMessage: 'microseconds',
}),
},
{
value: 'nanos',
text: i18n.translate('xpack.idxMgmt.dataStream.retention.timeUnits.nanosLabel', {
defaultMessage: 'nanoseconds',
}),
},
];

View file

@ -32,7 +32,7 @@ describe('Data stream helpers', () => {
enabled: true,
data_retention: '2d',
})
).toBe('2d');
).toBe('2 days');
});
});
});

View file

@ -9,7 +9,8 @@ import React from 'react';
import { i18n } from '@kbn/i18n';
import { EuiIcon, EuiToolTip } from '@elastic/eui';
import { DataStream } from '../../../common';
import { splitSizeAndUnits, DataStream } from '../../../common';
import { timeUnits, extraTimeUnits } from '../constants/time_units';
export const isFleetManaged = (dataStream: DataStream): boolean => {
// TODO check if the wording will change to 'fleet'
@ -74,7 +75,12 @@ export const getLifecycleValue = (
return infiniteDataRetention;
}
return lifecycle?.data_retention;
// Extract size and unit, in order to correctly map the unit to the correct text
const { size, unit } = splitSizeAndUnits(lifecycle?.data_retention as string);
const availableTimeUnits = [...timeUnits, ...extraTimeUnits];
const match = availableTimeUnits.find((timeUnit) => timeUnit.value === unit);
return `${size} ${match?.text ?? unit}`;
};
export const isDataStreamFullyManagedByILM = (dataStream?: DataStream | null) => {

View file

@ -39,6 +39,7 @@ import { reactRouterNavigate } from '../../../../../shared_imports';
import { getIndexListUri } from '../../../../services/routing';
import { documentationService } from '../../../../services/documentation';
import { splitSizeAndUnits, DataStream } from '../../../../../../common';
import { timeUnits } from '../../../../constants/time_units';
import { isDSLWithILMIndices } from '../../../../lib/data_streams';
import { useAppContext } from '../../../../app_context';
import { UnitField } from './unit_field';
@ -51,45 +52,6 @@ interface Props {
onClose: (data?: { hasUpdatedDataRetention: boolean }) => void;
}
export const timeUnits = [
{
value: 'd',
text: i18n.translate(
'xpack.idxMgmt.dataStreamsDetailsPanel.editDataRetentionModal.timeUnits.daysLabel',
{
defaultMessage: 'days',
}
),
},
{
value: 'h',
text: i18n.translate(
'xpack.idxMgmt.dataStreamsDetailsPanel.editDataRetentionModal.timeUnits.hoursLabel',
{
defaultMessage: 'hours',
}
),
},
{
value: 'm',
text: i18n.translate(
'xpack.idxMgmt.dataStreamsDetailsPanel.editDataRetentionModal.timeUnits.minutesLabel',
{
defaultMessage: 'minutes',
}
),
},
{
value: 's',
text: i18n.translate(
'xpack.idxMgmt.dataStreamsDetailsPanel.editDataRetentionModal.timeUnits.secondsLabel',
{
defaultMessage: 'seconds',
}
),
},
];
const configurationFormSchema: FormSchema = {
dataRetention: {
type: FIELD_TYPES.TEXT,