mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 01:13:23 -04:00
[Index Management] Be more explicit about data retention values (#170296)
This commit is contained in:
parent
4e065dac28
commit
e34b2ff35b
5 changed files with 136 additions and 61 deletions
|
@ -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'],
|
||||
]);
|
||||
});
|
||||
|
||||
|
|
|
@ -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',
|
||||
}),
|
||||
},
|
||||
];
|
|
@ -32,7 +32,7 @@ describe('Data stream helpers', () => {
|
|||
enabled: true,
|
||||
data_retention: '2d',
|
||||
})
|
||||
).toBe('2d');
|
||||
).toBe('2 days');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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) => {
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue