Skip to content

Commit 15c24aa

Browse files
committed
Support rollover
1 parent 64d3a3c commit 15c24aa

File tree

5 files changed

+76
-35
lines changed

5 files changed

+76
-35
lines changed

x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_create/component_template_create.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import { ComponentTemplateDeserialized } from '../../shared_imports';
1616
import { useComponentTemplatesContext } from '../../component_templates_context';
1717
import { ComponentTemplateForm } from '../component_template_form';
1818
import { useStepFromQueryString } from '../use_step_from_query_string';
19+
import { useDatastreamsRollover } from '../component_template_datastreams_rollover/use_datastreams_rollover';
20+
import { MANAGED_BY_FLEET } from '../../constants';
1921

2022
interface Props {
2123
/**
@@ -58,6 +60,7 @@ export const ComponentTemplateCreate: React.FunctionComponent<RouteComponentProp
5860
}, [locationSearchParams, sourceComponentTemplate]);
5961

6062
const { api } = useComponentTemplatesContext();
63+
const { showDatastreamRolloverModal } = useDatastreamsRollover();
6164

6265
const onSave = async (componentTemplate: ComponentTemplateDeserialized) => {
6366
const { name } = componentTemplate;
@@ -73,6 +76,9 @@ export const ComponentTemplateCreate: React.FunctionComponent<RouteComponentProp
7376
setSaveError(error);
7477
return;
7578
}
79+
if (componentTemplate._meta?.managed_by === MANAGED_BY_FLEET) {
80+
await showDatastreamRolloverModal(componentTemplate.name);
81+
}
7682

7783
redirectTo(encodeURI(`/component_templates/${encodeURIComponent(name)}`));
7884
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
import React, { useCallback } from 'react';
9+
import { toMountPoint } from '@kbn/kibana-react-plugin/public';
10+
11+
import { useComponentTemplatesContext } from '../../component_templates_context';
12+
import { MappingsDatastreamRolloverModal } from './mappings_datastreams_rollover_modal';
13+
14+
export const test = {};
15+
16+
export function useDatastreamsRollover() {
17+
const { api, overlays } = useComponentTemplatesContext();
18+
19+
const showDatastreamRolloverModal = useCallback(
20+
async (componentTemplateName: string) => {
21+
const { data: dataStreamResponse } = await api.getComponentTemplateDatastreams(
22+
componentTemplateName
23+
);
24+
const dataStreams = dataStreamResponse?.data_streams ?? [];
25+
26+
const dataStreamsToRollover: string[] = [];
27+
for (const dataStream of dataStreams) {
28+
try {
29+
const { error: applyMappingError } = await api.postDataStreamMappingsFromTemplate(
30+
dataStream
31+
);
32+
if (applyMappingError) {
33+
throw applyMappingError;
34+
}
35+
} catch (err) {
36+
dataStreamsToRollover.push(dataStream);
37+
}
38+
}
39+
40+
if (dataStreamsToRollover.length) {
41+
const ref = overlays.openModal(
42+
toMountPoint(
43+
<MappingsDatastreamRolloverModal
44+
componentTemplatename={componentTemplateName}
45+
dataStreams={dataStreamsToRollover}
46+
api={api}
47+
onClose={() => {
48+
ref.close();
49+
}}
50+
/>
51+
)
52+
);
53+
54+
await ref.onClose;
55+
}
56+
},
57+
[api, overlays]
58+
);
59+
60+
return {
61+
showDatastreamRolloverModal,
62+
};
63+
}

x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx

Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import React, { useState, useEffect, useMemo } from 'react';
99
import { RouteComponentProps } from 'react-router-dom';
1010
import { FormattedMessage } from '@kbn/i18n-react';
11-
import { toMountPoint } from '@kbn/kibana-react-plugin/public';
1211
import { EuiPageSection, EuiPageHeader, EuiSpacer } from '@elastic/eui';
1312

1413
import { breadcrumbService, IndexManagementBreadcrumb } from '../../../../services/breadcrumbs';
@@ -24,8 +23,8 @@ import { ComponentTemplateForm } from '../component_template_form';
2423
import { useRedirectPath } from '../../../../hooks/redirect_path';
2524
import { MANAGED_BY_FLEET } from '../../constants';
2625

27-
import { MappingsDatastreamRolloverModal } from './mappings_datastreams_rollover_modal';
2826
import { useStepFromQueryString } from '../use_step_from_query_string';
27+
import { useDatastreamsRollover } from '../component_template_datastreams_rollover/use_datastreams_rollover';
2928

3029
interface MatchParams {
3130
name: string;
@@ -37,7 +36,7 @@ export const ComponentTemplateEdit: React.FunctionComponent<RouteComponentProps<
3736
},
3837
history,
3938
}) => {
40-
const { api, overlays } = useComponentTemplatesContext();
39+
const { api } = useComponentTemplatesContext();
4140
const { activeStep: defaultActiveStep, updateStep } = useStepFromQueryString(history);
4241
const redirectTo = useRedirectPath(history);
4342

@@ -50,6 +49,8 @@ export const ComponentTemplateEdit: React.FunctionComponent<RouteComponentProps<
5049
const { data: dataStreamResponse } = api.useLoadComponentTemplatesDatastream(decodedName);
5150
const dataStreams = useMemo(() => dataStreamResponse?.data_streams ?? [], [dataStreamResponse]);
5251

52+
const { showDatastreamRolloverModal } = useDatastreamsRollover();
53+
5354
useEffect(() => {
5455
breadcrumbService.setBreadcrumbs(IndexManagementBreadcrumb.componentTemplateEdit);
5556
}, []);
@@ -67,37 +68,8 @@ export const ComponentTemplateEdit: React.FunctionComponent<RouteComponentProps<
6768
return;
6869
}
6970

70-
if (updatedComponentTemplate._meta?.managed_by === MANAGED_BY_FLEET && dataStreams.length) {
71-
const dataStreamsToRollover: string[] = [];
72-
for (const dataStream of dataStreams) {
73-
try {
74-
const { error: applyMappingError } = await api.postDataStreamMappingsFromTemplate(
75-
dataStream
76-
);
77-
if (applyMappingError) {
78-
throw applyMappingError;
79-
}
80-
} catch (err) {
81-
dataStreamsToRollover.push(dataStream);
82-
}
83-
}
84-
85-
if (dataStreamsToRollover.length) {
86-
const ref = overlays.openModal(
87-
toMountPoint(
88-
<MappingsDatastreamRolloverModal
89-
componentTemplatename={updatedComponentTemplate.name}
90-
dataStreams={dataStreamsToRollover}
91-
api={api}
92-
onClose={() => {
93-
ref.close();
94-
}}
95-
/>
96-
)
97-
);
98-
99-
await ref.onClose;
100-
}
71+
if (updatedComponentTemplate._meta?.managed_by === MANAGED_BY_FLEET) {
72+
await showDatastreamRolloverModal(updatedComponentTemplate.name);
10173
}
10274
redirectTo({
10375
pathname: encodeURI(

x-pack/plugins/index_management/public/application/components/component_templates/lib/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export const getApi = (
9797

9898
async function postDataStreamRollover(name: string) {
9999
return sendRequest<ComponentTemplateDatastreams>({
100-
path: `${apiBasePath}/data_streams/${encodeURIComponent(name)}/rollover`,
100+
path: `${apiBasePath}/data_streams/${encodeURIComponent(name)}/rollover?lazy`,
101101
method: 'post',
102102
});
103103
}

0 commit comments

Comments
 (0)