[Index Management] Fix managed data streams badge (#173408)

## Summary

This PR fixes the badge "managed" missing from the data streams list.
The code used to check that the data stream has both conditions for a
managed data streams `meta.managed: true` and `meta.managed_by:
'ingest-manager'`. The check for `ingest-manager` is not coorect since
it's been renamed to fleet. Instead of updating the check though, I
decided to only leave the condition for `meta.managed : true` and I
removed all mentions of "Fleet" from the Data streams tab. I believe
that is more consistent for the UI, since we don't mention
"Fleet-managed" anywhere else like ILM, index templates etc.


### Screenshot
<img width="902" alt="Screenshot 2023-12-18 at 16 11 35"
src="d9e54d54-12a2-4031-a51a-e534e40822e3">

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Yulia Čech 2024-01-04 19:58:09 +01:00 committed by GitHub
parent 33f8368132
commit 6d909fff99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 43 additions and 53 deletions

View file

@ -71,7 +71,7 @@ describe('Data Streams tab', () => {
expect(exists('emptyPrompt')).toBe(true);
});
test('when Ingest Manager is disabled, goes to index templates tab when "Get started" link is clicked', async () => {
test('when Fleet is disabled, goes to index templates tab when "Get started" link is clicked', async () => {
testBed = await setup(httpSetup, {
plugins: {},
url: urlServiceMock,
@ -796,7 +796,7 @@ describe('Data Streams tab', () => {
_meta: {
package: 'test',
managed: true,
managed_by: 'ingest-manager',
managed_by: 'fleet',
},
});
const nonManagedDataStream = createDataStreamPayload({ name: 'non-managed-data-stream' });
@ -813,19 +813,12 @@ describe('Data Streams tab', () => {
testBed.component.update();
});
test('listed in the table with Fleet-managed label', () => {
test('listed in the table with managed label', () => {
const { table } = testBed;
const { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
[
'',
`managed-data-stream${nonBreakingSpace}Fleet-managed`,
'green',
'1',
'7 days',
'Delete',
],
['', `managed-data-stream${nonBreakingSpace}Managed`, 'green', '1', '7 days', 'Delete'],
['', 'non-managed-data-stream', 'green', '1', '7 days', 'Delete'],
]);
});
@ -835,14 +828,7 @@ describe('Data Streams tab', () => {
let { tableCellsValues } = table.getMetaData('dataStreamTable');
expect(tableCellsValues).toEqual([
[
'',
`managed-data-stream${nonBreakingSpace}Fleet-managed`,
'green',
'1',
'7 days',
'Delete',
],
['', `managed-data-stream${nonBreakingSpace}Managed`, 'green', '1', '7 days', 'Delete'],
['', 'non-managed-data-stream', 'green', '1', '7 days', 'Delete'],
]);

View file

@ -12,9 +12,8 @@ import { EuiIcon, EuiToolTip } from '@elastic/eui';
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'
return Boolean(dataStream._meta?.managed && dataStream._meta?.managed_by === 'ingest-manager');
export const isManaged = (dataStream: DataStream): boolean => {
return Boolean(dataStream._meta?.managed);
};
export const filterDataStreams = (
@ -23,13 +22,13 @@ export const filterDataStreams = (
): DataStream[] => {
return dataStreams.filter((dataStream: DataStream) => {
// include all data streams that are neither hidden nor managed
if (!dataStream.hidden && !isFleetManaged(dataStream)) {
if (!dataStream.hidden && !isManaged(dataStream)) {
return true;
}
if (dataStream.hidden && visibleTypes.includes('hidden')) {
return true;
}
return isFleetManaged(dataStream) && visibleTypes.includes('managed');
return isManaged(dataStream) && visibleTypes.includes('managed');
});
};

View file

@ -9,7 +9,7 @@ import React from 'react';
import { EuiBadge, EuiBadgeGroup } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { DataStream } from '../../../../../common';
import { isFleetManaged } from '../../../lib/data_streams';
import { isManaged } from '../../../lib/data_streams';
interface Props {
dataStream: DataStream;
@ -17,12 +17,12 @@ interface Props {
export const DataStreamsBadges: React.FunctionComponent<Props> = ({ dataStream }) => {
const badges = [];
if (isFleetManaged(dataStream)) {
if (isManaged(dataStream)) {
badges.push(
<EuiBadge color="hollow" key={'managed'}>
<FormattedMessage
id="xpack.idxMgmt.dataStreamList.table.managedDataStreamBadge"
defaultMessage="Fleet-managed"
defaultMessage="Managed"
/>
</EuiBadge>
);

View file

@ -84,7 +84,7 @@ export const DataStreamList: React.FunctionComponent<RouteComponentProps<MatchPa
const [filters, setFilters] = useState<Filters<DataStreamFilterName>>({
managed: {
name: i18n.translate('xpack.idxMgmt.dataStreamList.viewManagedLabel', {
defaultMessage: 'Fleet-managed data streams',
defaultMessage: 'Managed data streams',
}),
checked: 'on',
},
@ -226,7 +226,7 @@ export const DataStreamList: React.FunctionComponent<RouteComponentProps<MatchPa
{' ' /* We need this space to separate these two sentences. */}
{isFleetEnabled ? (
<FormattedMessage
id="xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerMessage"
id="xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaFleetMessage"
defaultMessage="Get started with data streams in {link}."
values={{
link: (
@ -235,7 +235,7 @@ export const DataStreamList: React.FunctionComponent<RouteComponentProps<MatchPa
href={getUrlForApp('fleet')}
>
{i18n.translate(
'xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerLink',
'xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaFleetLink',
{
defaultMessage: 'Fleet',
}

View file

@ -18390,7 +18390,6 @@
"xpack.idxMgmt.createIndex.successfullyCreatedIndexMessage": "Création réussie de l'index : {indexName}",
"xpack.idxMgmt.dataStreamList.dataStreamsDescription": "Les flux de données conservent des données de séries temporelles sur plusieurs index. {learnMoreLink}",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIndexTemplateMessage": "Lancez-vous avec les flux de données en créant un {link}.",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerMessage": "Lancez-vous avec les flux de données dans {link}.",
"xpack.idxMgmt.dataStreamList.table.deleteDataStreamsButtonLabel": "Supprimer {count, plural, one {le flux de données} many {flux de données} other {flux de données}}",
"xpack.idxMgmt.deleteDataStreamsConfirmationModal.confirmButtonLabel": "Supprimer {dataStreamsCount, plural, one {le flux de données} many {flux de données} other {flux de données}}",
"xpack.idxMgmt.deleteDataStreamsConfirmationModal.deleteDescription": "Vous êtes sur le point de supprimer {dataStreamsCount, plural, one {ce flux de données} many {ces flux de données} other {ces flux de données}} :",
@ -18687,7 +18686,6 @@
"xpack.idxMgmt.dataStreamDetailPanel.timestampFieldTitle": "Champ d'horodatage",
"xpack.idxMgmt.dataStreamDetailPanel.timestampFieldToolTip": "Champ d'horodatage partagé par tous les documents du flux de données.",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIndexTemplateLink": "modèle d'index composable",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerLink": "Fleet",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsDescription": "Les flux de données conservent des données de séries temporelles sur plusieurs index.",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsTitle": "Vous n'avez pas encore de flux de données",
"xpack.idxMgmt.dataStreamList.loadingDataStreamsDescription": "Chargement des flux de données en cours…",

View file

@ -18403,7 +18403,6 @@
"xpack.idxMgmt.createIndex.successfullyCreatedIndexMessage": "インデックスの作成が正常に完了しました:{indexName}",
"xpack.idxMgmt.dataStreamList.dataStreamsDescription": "データストリームは複数のインデックスの時系列データを格納します。{learnMoreLink}",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIndexTemplateMessage": "{link}を作成して、データストリームを開始します。",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerMessage": "{link}でデータストリームを開始します。",
"xpack.idxMgmt.dataStreamList.table.deleteDataStreamsButtonLabel": "{count, plural, other {データストリーム}}削除",
"xpack.idxMgmt.deleteDataStreamsConfirmationModal.confirmButtonLabel": "{dataStreamsCount, plural, other {データストリーム}}削除",
"xpack.idxMgmt.deleteDataStreamsConfirmationModal.deleteDescription": "{dataStreamsCount, plural, other {これらのデータストリーム}}を削除しようとしています:",
@ -18700,7 +18699,6 @@
"xpack.idxMgmt.dataStreamDetailPanel.timestampFieldTitle": "タイムスタンプフィールド",
"xpack.idxMgmt.dataStreamDetailPanel.timestampFieldToolTip": "タイムスタンプフィールドはデータストリームのすべてのドキュメントで共有されます。",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIndexTemplateLink": "作成可能なインデックステンプレート",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerLink": "Fleet",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsDescription": "データストリームは複数のインデックスの時系列データを格納します。",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsTitle": "まだデータストリームがありません",
"xpack.idxMgmt.dataStreamList.loadingDataStreamsDescription": "データストリームを読み込んでいます…",

View file

@ -18470,7 +18470,6 @@
"xpack.idxMgmt.createIndex.successfullyCreatedIndexMessage": "已成功创建索引:{indexName}",
"xpack.idxMgmt.dataStreamList.dataStreamsDescription": "数据流在多个索引上存储时序数据。{learnMoreLink}",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIndexTemplateMessage": "通过创建 {link} 来开始使用数据流。",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerMessage": "开始使用 {link} 中的数据流。",
"xpack.idxMgmt.dataStreamList.table.deleteDataStreamsButtonLabel": "删除 {count, plural, other {数据流}}",
"xpack.idxMgmt.deleteDataStreamsConfirmationModal.confirmButtonLabel": "删除 {dataStreamsCount, plural, other {数据流}}",
"xpack.idxMgmt.deleteDataStreamsConfirmationModal.deleteDescription": "您即将删除{dataStreamsCount, plural, other {以下数据流}}",
@ -18767,7 +18766,6 @@
"xpack.idxMgmt.dataStreamDetailPanel.timestampFieldTitle": "时间戳字段",
"xpack.idxMgmt.dataStreamDetailPanel.timestampFieldToolTip": "时间戳字段由数据流中的所有文档共享。",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIndexTemplateLink": "可组合索引模板",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsCtaIngestManagerLink": "Fleet",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsDescription": "数据流存储多个索引的时序数据。",
"xpack.idxMgmt.dataStreamList.emptyPrompt.noDataStreamsTitle": "您尚未有任何数据流",
"xpack.idxMgmt.dataStreamList.loadingDataStreamsDescription": "正在加载数据流……",

View file

@ -78,7 +78,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
it('shows the details flyout when clicking on a data stream', async () => {
// Open details flyout
await pageObjects.indexManagement.clickDataStreamAt(0);
await pageObjects.indexManagement.clickDataStreamNameLink(TEST_DS_NAME);
// Verify url is stateful
const url = await browser.getCurrentUrl();
expect(url).to.contain(`/data_streams/${TEST_DS_NAME}`);
@ -90,7 +90,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
it('allows to update data retention', async () => {
// Open details flyout
await pageObjects.indexManagement.clickDataStreamAt(0);
await pageObjects.indexManagement.clickDataStreamNameLink(TEST_DS_NAME);
// Open the edit retention dialog
await testSubjects.click('manageDataStreamButton');
await testSubjects.click('editDataRetentionButton');
@ -112,7 +112,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
it('allows to disable data retention', async () => {
// Open details flyout
await pageObjects.indexManagement.clickDataStreamAt(0);
await pageObjects.indexManagement.clickDataStreamNameLink(TEST_DS_NAME);
// Open the edit retention dialog
await testSubjects.click('manageDataStreamButton');
await testSubjects.click('editDataRetentionButton');

View file

@ -22,9 +22,6 @@ export function IndexManagementPageProvider({ getService }: FtrProviderContext)
async reloadIndicesButton() {
return await testSubjects.find('reloadIndicesButton');
},
async toggleRollupIndices() {
await testSubjects.click('checkboxToggles-rollupToggle');
},
async toggleHiddenIndices() {
await testSubjects.click('indexTableIncludeHiddenIndicesToggle');
},
@ -34,9 +31,8 @@ export function IndexManagementPageProvider({ getService }: FtrProviderContext)
await policyDetailsLinks[indexOfRow].click();
},
async clickDataStreamAt(indexOfRow: number): Promise<void> {
const dataStreamLinks = await testSubjects.findAll('nameLink');
await dataStreamLinks[indexOfRow].click();
async clickDataStreamNameLink(name: string): Promise<void> {
await find.clickByLinkText(name);
},
async clickDeleteEnrichPolicyAt(indexOfRow: number): Promise<void> {

View file

@ -9,11 +9,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context';
export default ({ loadTestFile }: FtrProviderContext) => {
describe('Serverless Common UI - Management', function () {
loadTestFile(require.resolve('./index_management/index_templates'));
loadTestFile(require.resolve('./index_management/indices'));
loadTestFile(require.resolve('./index_management/create_enrich_policy'));
loadTestFile(require.resolve('./index_management/enrich_policies'));
loadTestFile(require.resolve('./index_management/component_templates'));
loadTestFile(require.resolve('./index_management'));
loadTestFile(require.resolve('./transforms/search_bar_features'));
loadTestFile(require.resolve('./transforms/transform_list'));
loadTestFile(require.resolve('./advanced_settings'));

View file

@ -88,7 +88,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
it('shows the details flyout when clicking on a data stream', async () => {
// Open details flyout
await pageObjects.indexManagement.clickDataStreamAt(0);
await pageObjects.indexManagement.clickDataStreamNameLink(TEST_DS_NAME);
// Verify url is stateful
const url = await browser.getCurrentUrl();
expect(url).to.contain(`/data_streams/${TEST_DS_NAME}`);
@ -100,7 +100,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
it('allows to update data retention', async () => {
// Open details flyout
await pageObjects.indexManagement.clickDataStreamAt(0);
await pageObjects.indexManagement.clickDataStreamNameLink(TEST_DS_NAME);
// Open the edit retention dialog
await testSubjects.click('manageDataStreamButton');
await testSubjects.click('editDataRetentionButton');
@ -122,7 +122,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
it('allows to disable data retention', async () => {
// Open details flyout
await pageObjects.indexManagement.clickDataStreamAt(0);
await pageObjects.indexManagement.clickDataStreamNameLink(TEST_DS_NAME);
// Open the edit retention dialog
await testSubjects.click('manageDataStreamButton');
await testSubjects.click('editDataRetentionButton');

View file

@ -0,0 +1,19 @@
/*
* 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 { FtrProviderContext } from '../../../../ftr_provider_context';
export default ({ loadTestFile }: FtrProviderContext) => {
describe('Index Management', function () {
loadTestFile(require.resolve('./component_templates'));
loadTestFile(require.resolve('./create_enrich_policy'));
loadTestFile(require.resolve('./data_streams'));
loadTestFile(require.resolve('./enrich_policies'));
loadTestFile(require.resolve('./index_templates'));
loadTestFile(require.resolve('./indices'));
});
};