mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Fleet] Update experimental indexing features text + allow disabling TSDB (#149594)
## Summary Closes #149591 Making some needed improvements/changes to our experimental data stream features: - Improve copy to better explain what these features are and what they do - Add explainer + link to https://www.elastic.co/guide/en/elasticsearch/reference/master/use-a-data-stream.html#manually-roll-over-a-data-stream for current need around manual rollovers (https://github.com/elastic/kibana/issues/143448 coming soon for automating this)  ## Screen recording https://user-images.githubusercontent.com/6766512/214861783-0efdbab9-51de-44f0-93ba-86011d6e9612.mov --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
a489d221dd
commit
fe34d7f27e
5 changed files with 126 additions and 43 deletions
|
@ -661,6 +661,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => {
|
|||
datastreams: `${FLEET_DOCS}data-streams.html`,
|
||||
datastreamsILM: `${FLEET_DOCS}data-streams.html#data-streams-ilm`,
|
||||
datastreamsNamingScheme: `${FLEET_DOCS}data-streams.html#data-streams-naming-scheme`,
|
||||
datastreamsManualRollover: `${ELASTICSEARCH_DOCS}use-a-data-stream.html#manually-roll-over-a-data-stream`,
|
||||
installElasticAgent: `${FLEET_DOCS}install-fleet-managed-elastic-agent.html`,
|
||||
installElasticAgentStandalone: `${FLEET_DOCS}install-standalone-elastic-agent.html`,
|
||||
upgradeElasticAgent: `${FLEET_DOCS}upgrade-elastic-agent.html`,
|
||||
|
|
|
@ -433,6 +433,7 @@ export interface DocLinks {
|
|||
datastreams: string;
|
||||
datastreamsILM: string;
|
||||
datastreamsNamingScheme: string;
|
||||
datastreamsManualRollover: string;
|
||||
installElasticAgent: string;
|
||||
installElasticAgentStandalone: string;
|
||||
packageSignatures: string;
|
||||
|
|
|
@ -178,14 +178,91 @@ describe('ExperimentDatastreamSettings', () => {
|
|||
},
|
||||
},
|
||||
]);
|
||||
expect(experimentalDataFeatures).toEqual([
|
||||
});
|
||||
});
|
||||
describe('TSDB', () => {
|
||||
it('should be enabled and unchecked by default', () => {
|
||||
const mockSetNewExperimentalDataFeatures = jest.fn();
|
||||
const res = createFleetTestRendererMock().render(
|
||||
<ExperimentDatastreamSettings
|
||||
registryDataStream={{ type: 'logs', dataset: 'test' } as unknown as RegistryDataStream}
|
||||
experimentalDataFeatures={[]}
|
||||
setNewExperimentalDataFeatures={mockSetNewExperimentalDataFeatures}
|
||||
/>
|
||||
);
|
||||
|
||||
const tsdbSwitch = res.getByTestId('packagePolicyEditor.tsdbExperimentalFeature.switch');
|
||||
|
||||
expect(tsdbSwitch).toBeEnabled();
|
||||
expect(tsdbSwitch).not.toBeChecked();
|
||||
expect(mockSetNewExperimentalDataFeatures).not.toBeCalled();
|
||||
});
|
||||
|
||||
it('should be enabled and checked if registry data streams includes "elasticsearch.index_mode: time_series"', () => {
|
||||
const mockSetNewExperimentalDataFeatures = jest.fn();
|
||||
const res = createFleetTestRendererMock().render(
|
||||
<ExperimentDatastreamSettings
|
||||
registryDataStream={
|
||||
{
|
||||
type: 'logs',
|
||||
dataset: 'test',
|
||||
elasticsearch: {
|
||||
index_mode: 'time_series',
|
||||
},
|
||||
} as unknown as RegistryDataStream
|
||||
}
|
||||
experimentalDataFeatures={[]}
|
||||
setNewExperimentalDataFeatures={mockSetNewExperimentalDataFeatures}
|
||||
/>
|
||||
);
|
||||
|
||||
const tsdbSwitch = res.getByTestId('packagePolicyEditor.tsdbExperimentalFeature.switch');
|
||||
|
||||
expect(tsdbSwitch).toBeEnabled();
|
||||
expect(tsdbSwitch).toBeChecked();
|
||||
expect(mockSetNewExperimentalDataFeatures).not.toBeCalled();
|
||||
});
|
||||
|
||||
it('should not mutate other experimental features when changed', () => {
|
||||
const experimentalDataFeatures = [
|
||||
{
|
||||
data_stream: 'logs-test',
|
||||
features: {
|
||||
synthetic_source: true,
|
||||
tsdb: false,
|
||||
doc_value_only_numeric: false,
|
||||
doc_value_only_other: false,
|
||||
synthetic_source: true,
|
||||
tsdb: false,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const mockSetNewExperimentalDataFeatures = jest.fn();
|
||||
const res = createFleetTestRendererMock().render(
|
||||
<ExperimentDatastreamSettings
|
||||
registryDataStream={
|
||||
{
|
||||
type: 'logs',
|
||||
dataset: 'test',
|
||||
} as unknown as RegistryDataStream
|
||||
}
|
||||
experimentalDataFeatures={experimentalDataFeatures}
|
||||
setNewExperimentalDataFeatures={mockSetNewExperimentalDataFeatures}
|
||||
/>
|
||||
);
|
||||
|
||||
act(() => {
|
||||
fireEvent.click(res.getByTestId('packagePolicyEditor.tsdbExperimentalFeature.switch'));
|
||||
});
|
||||
|
||||
expect(mockSetNewExperimentalDataFeatures).toBeCalled();
|
||||
expect(mockSetNewExperimentalDataFeatures.mock.calls[0][0]).toEqual([
|
||||
{
|
||||
data_stream: 'logs-test',
|
||||
features: {
|
||||
doc_value_only_numeric: false,
|
||||
doc_value_only_other: false,
|
||||
synthetic_source: true,
|
||||
tsdb: true,
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
|
|
@ -15,8 +15,11 @@ import {
|
|||
EuiText,
|
||||
EuiSpacer,
|
||||
EuiTitle,
|
||||
EuiToolTip,
|
||||
EuiLink,
|
||||
} from '@elastic/eui';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
import { useStartServices } from '../../../../../../../../hooks';
|
||||
|
||||
import type {
|
||||
ExperimentalDataStreamFeature,
|
||||
|
@ -50,6 +53,8 @@ export const ExperimentDatastreamSettings: React.FunctionComponent<Props> = ({
|
|||
experimentalDataFeatures,
|
||||
setNewExperimentalDataFeatures,
|
||||
}) => {
|
||||
const { docLinks } = useStartServices();
|
||||
|
||||
const isSyntheticSourceEditable = registryDataStream.elasticsearch?.source_mode !== 'default';
|
||||
|
||||
const syntheticSourceExperimentalValue = getExperimentalFeatureValue(
|
||||
|
@ -129,27 +134,35 @@ export const ExperimentDatastreamSettings: React.FunctionComponent<Props> = ({
|
|||
<h5>
|
||||
<FormattedMessage
|
||||
id="xpack.fleet.packagePolicyEditor.experimentalSettings.title"
|
||||
defaultMessage="Indexing settings (experimental)"
|
||||
defaultMessage="Indexing settings (technical preview)"
|
||||
/>
|
||||
</h5>
|
||||
</EuiTitle>
|
||||
</EuiFlexItem>
|
||||
<EuiFlexItem>
|
||||
<EuiText color="subdued" size="xs">
|
||||
<FormattedMessage
|
||||
id="xpack.fleet.packagePolicyEditor.stepConfigure.experimentalFeaturesDescription"
|
||||
defaultMessage="Select data streams to configure indexing options. This is an {experimentalFeature} and may have effects on other properties."
|
||||
values={{
|
||||
experimentalFeature: (
|
||||
<strong>
|
||||
<FormattedMessage
|
||||
id="xpack.fleet.packagePolicyEditor.experimentalFeatureText"
|
||||
defaultMessage="experimental feature"
|
||||
/>
|
||||
</strong>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
id="xpack.fleet.packagePolicyEditor.stepConfigure.experimentalFeaturesDescription"
|
||||
defaultMessage="Choose how you want to store backing indices for this data stream. Changing these settings may affect other properties."
|
||||
/>
|
||||
</p>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
id="xpack.fleet.packagePolicyEditor.stepConfigure.experimentalFeaturesRolloverWarning"
|
||||
defaultMessage="After changing these settings, you need to manually roll over the existing data stream for changes to take effect. {learnMoreLink}"
|
||||
values={{
|
||||
learnMoreLink: (
|
||||
<EuiLink href={docLinks.links.fleet.datastreamsManualRollover} target="_blank">
|
||||
{i18n.translate(
|
||||
'xpack.fleet.packagePolicyEditor.experimentalFeatureRolloverLearnMore',
|
||||
{ defaultMessage: 'Learn more' }
|
||||
)}
|
||||
</EuiLink>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
</EuiText>
|
||||
</EuiFlexItem>
|
||||
<EuiSpacer size="s" />
|
||||
|
@ -172,31 +185,21 @@ export const ExperimentDatastreamSettings: React.FunctionComponent<Props> = ({
|
|||
/>
|
||||
</EuiFlexItem>
|
||||
<EuiFlexItem>
|
||||
<EuiToolTip
|
||||
content={
|
||||
<EuiSwitch
|
||||
checked={newExperimentalIndexingFeature.tsdb ?? false}
|
||||
data-test-subj="packagePolicyEditor.tsdbExperimentalFeature.switch"
|
||||
label={
|
||||
<FormattedMessage
|
||||
id="xpack.fleet.packagePolicyEditor.experimentalFeatures.TSDBTooltip"
|
||||
defaultMessage="Enabling this feature is irreversible"
|
||||
id="xpack.fleet.packagePolicyEditor.experimentalFeatures.TSDBLabel"
|
||||
defaultMessage="Time-series indexing (TSDB)"
|
||||
/>
|
||||
}
|
||||
>
|
||||
<EuiSwitch
|
||||
disabled={newExperimentalIndexingFeature.tsdb ?? false}
|
||||
checked={newExperimentalIndexingFeature.tsdb ?? false}
|
||||
data-test-subj="packagePolicyEditor.tsdbExperimentalFeature.switch"
|
||||
label={
|
||||
<FormattedMessage
|
||||
id="xpack.fleet.packagePolicyEditor.experimentalFeatures.TSDBLabel"
|
||||
defaultMessage="Time-series indexing (TSDB)"
|
||||
/>
|
||||
}
|
||||
onChange={(e) => {
|
||||
onIndexingSettingChange({
|
||||
tsdb: e.target.checked,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</EuiToolTip>
|
||||
onChange={(e) => {
|
||||
onIndexingSettingChange({
|
||||
tsdb: e.target.checked,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</EuiFlexItem>
|
||||
<EuiFlexItem>
|
||||
<EuiSwitch
|
||||
|
|
|
@ -152,7 +152,7 @@ export async function handleExperimentalDatastreamFeatureOptIn({
|
|||
});
|
||||
}
|
||||
|
||||
if (isTSDBOptInChanged && featureMapEntry.features.tsdb) {
|
||||
if (isTSDBOptInChanged) {
|
||||
const indexTemplateRes = await esClient.indices.getIndexTemplate({
|
||||
name: featureMapEntry.data_stream,
|
||||
});
|
||||
|
@ -165,7 +165,7 @@ export async function handleExperimentalDatastreamFeatureOptIn({
|
|||
settings: {
|
||||
...(indexTemplate.template?.settings ?? {}),
|
||||
index: {
|
||||
mode: 'time_series',
|
||||
mode: featureMapEntry.features.tsdb ? 'time_series' : null,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -173,6 +173,7 @@ export async function handleExperimentalDatastreamFeatureOptIn({
|
|||
|
||||
await esClient.indices.putIndexTemplate({
|
||||
name: featureMapEntry.data_stream,
|
||||
// @ts-expect-error
|
||||
body: indexTemplateBody,
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue