Skip to content

Commit d220c73

Browse files
Add Enable Flattened custom result index checkbox (opensearch-project#830)
* Add Enable Flattened custom result index checkbox Signed-off-by: Jackie Han <jkhanjob@gmail.com> * add hint text Signed-off-by: Jackie Han <jkhanjob@gmail.com> --------- Signed-off-by: Jackie Han <jkhanjob@gmail.com>
1 parent 7529afd commit d220c73

File tree

15 files changed

+300
-14
lines changed

15 files changed

+300
-14
lines changed

public/models/interfaces.ts

+1
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ export type Detector = {
190190
resultIndexMinAge?: number;
191191
resultIndexMinSize?: number;
192192
resultIndexTtl?: number;
193+
flattenCustomResultIndex?: boolean;
193194
filterQuery: { [key: string]: any };
194195
featureAttributes: FeatureAttributes[];
195196
windowDelay: { period: Schedule };

public/pages/DefineDetector/components/CustomResultIndex/CustomResultIndex.tsx

+46-13
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ function CustomResultIndex(props: CustomResultIndexProps) {
6666
}
6767
},[customResultIndexConditionsEnabled])
6868

69+
const hintTextStyle = {
70+
color: '#69707d',
71+
fontSize: '12px',
72+
lineHeight: '16px',
73+
fontWeight: 'normal',
74+
fontFamily: 'Helvetica, sans-serif',
75+
textAlign: 'left',
76+
width: '400px',
77+
};
78+
6979
return (
7080
<ContentPanel
7181
title={
@@ -136,23 +146,46 @@ function CustomResultIndex(props: CustomResultIndexProps) {
136146
</EuiFormRow>
137147
</EuiFlexItem>
138148
) : null}
139-
140-
{enabled ? (
141-
<EuiFlexItem>
142-
<EuiCheckbox
143-
id={'resultIndexConditionCheckbox'}
144-
label="Enable custom result index lifecycle management"
145-
checked={customResultIndexConditionsEnabled}
146-
onChange={() => {
147-
setCustomResultIndexConditionsEnabled(!customResultIndexConditionsEnabled);
148-
}}
149-
/>
150-
</EuiFlexItem>
151-
) : null}
152149
</EuiFlexGroup>
153150
)}
154151
</Field>
155152

153+
<EuiFlexGroup direction="column">
154+
<EuiFlexItem>
155+
{ enabled ? (
156+
<Field
157+
name="flattenCustomResultIndex">
158+
{({ field, form }: FieldProps) => (
159+
<EuiFlexGroup>
160+
<EuiFlexItem>
161+
<EuiCheckbox
162+
id={'flattenCustomResultIndex'}
163+
label="Enable flattened custom result index"
164+
checked={field.value ? field.value : get(props.formikProps, 'values.flattenCustomResultIndex')}
165+
{...field}
166+
/>
167+
<p style={hintTextStyle}>Flattening the custom result index will make it easier to query them on the dashboard. It also allows you to perform term aggregations on categorical fields.</p>
168+
</EuiFlexItem>
169+
</EuiFlexGroup>
170+
)}
171+
</Field>) : null}
172+
</EuiFlexItem>
173+
<EuiFlexItem>
174+
{enabled ? (
175+
<EuiFlexItem>
176+
<EuiCheckbox
177+
id={'resultIndexConditionCheckbox'}
178+
label="Enable custom result index lifecycle management"
179+
checked={customResultIndexConditionsEnabled}
180+
onChange={() => {
181+
setCustomResultIndexConditionsEnabled(!customResultIndexConditionsEnabled);
182+
}}
183+
/>
184+
</EuiFlexItem>
185+
) : null}
186+
</EuiFlexItem>
187+
</EuiFlexGroup>
188+
156189
{ (enabled && customResultIndexConditionsEnabled) ? (<Field
157190
name="resultIndexMinAge"
158191
validate={(enabled && customResultIndexConditionsEnabled) ? validateEmptyOrPositiveInteger : null}

public/pages/DefineDetector/containers/DefineDetector.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ export const DefineDetector = (props: DefineDetectorProps) => {
229229
formikProps.setFieldTouched('resultIndexMinAge');
230230
formikProps.setFieldTouched('resultIndexMinSize');
231231
formikProps.setFieldTouched('resultIndexTtl');
232+
formikProps.setFieldTouched('flattenCustomResultIndex');
232233
formikProps.validateForm().then((errors) => {
233234
if (isEmpty(errors)) {
234235
if (props.isEdit) {

public/pages/DefineDetector/containers/__tests__/__snapshots__/DefineDetector.test.tsx.snap

+30
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,16 @@ exports[`<DefineDetector /> Full creating detector definition renders the compon
972972
</div>
973973
</div>
974974
</div>
975+
<div
976+
class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionColumn euiFlexGroup--responsive"
977+
>
978+
<div
979+
class="euiFlexItem"
980+
/>
981+
<div
982+
class="euiFlexItem"
983+
/>
984+
</div>
975985
</div>
976986
</div>
977987
</div>
@@ -1949,6 +1959,16 @@ exports[`<DefineDetector /> empty creating detector definition renders the compo
19491959
</div>
19501960
</div>
19511961
</div>
1962+
<div
1963+
class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionColumn euiFlexGroup--responsive"
1964+
>
1965+
<div
1966+
class="euiFlexItem"
1967+
/>
1968+
<div
1969+
class="euiFlexItem"
1970+
/>
1971+
</div>
19521972
</div>
19531973
</div>
19541974
</div>
@@ -2959,6 +2979,16 @@ exports[`<DefineDetector /> empty editing detector definition renders the compon
29592979
</div>
29602980
</div>
29612981
</div>
2982+
<div
2983+
class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionColumn euiFlexGroup--responsive"
2984+
>
2985+
<div
2986+
class="euiFlexItem"
2987+
/>
2988+
<div
2989+
class="euiFlexItem"
2990+
/>
2991+
</div>
29622992
</div>
29632993
</div>
29642994
</div>

public/pages/DefineDetector/models/interfaces.ts

+1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ export interface DetectorDefinitionFormikValues {
2525
resultIndexMinAge?: number | string;
2626
resultIndexMinSize?: number | string;
2727
resultIndexTtl?:number | string;
28+
flattenCustomResultIndex?: boolean;
2829
}

public/pages/DefineDetector/utils/__tests__/helpers.test.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ describe('detectorDefinitionToFormik', () => {
4444
resultIndexMinAge: randomDetector.resultIndexMinAge,
4545
resultIndexMinSize: randomDetector.resultIndexMinSize,
4646
resultIndexTtl: randomDetector.resultIndexTtl,
47+
flattenCustomResultIndex: randomDetector.flattenCustomResultIndex,
4748
});
4849
});
4950
test('should return if detector does not have metadata', () => {
@@ -64,6 +65,7 @@ describe('detectorDefinitionToFormik', () => {
6465
resultIndexMinAge: randomDetector.resultIndexMinAge,
6566
resultIndexMinSize: randomDetector.resultIndexMinSize,
6667
resultIndexTtl: randomDetector.resultIndexTtl,
68+
flattenCustomResultIndex: randomDetector.flattenCustomResultIndex,
6769
});
6870
});
6971
test("upgrade old detector's filters to include filter type", () => {

public/pages/DefineDetector/utils/constants.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,5 @@ export const INITIAL_DETECTOR_DEFINITION_VALUES: DetectorDefinitionFormikValues
4747
resultIndexMinAge: 7,
4848
resultIndexMinSize: 51200,
4949
resultIndexTtl: 60,
50+
flattenCustomResultIndex: false,
5051
};

public/pages/DefineDetector/utils/helpers.ts

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export function detectorDefinitionToFormik(
4848
resultIndexMinAge: get(ad, 'resultIndexMinAge', undefined),
4949
resultIndexMinSize:get(ad, 'resultIndexMinSize', undefined),
5050
resultIndexTtl: get(ad, 'resultIndexTtl', undefined),
51+
flattenCustomResultIndex: get(ad, 'flattenCustomResultIndex', false),
5152
};
5253
}
5354

@@ -125,6 +126,7 @@ export function formikToDetectorDefinition(
125126
resultIndexMinAge: values.resultIndexMinAge,
126127
resultIndexMinSize: values.resultIndexMinSize,
127128
resultIndexTtl: values.resultIndexTtl,
129+
flattenCustomResultIndex: values.flattenCustomResultIndex,
128130
} as Detector;
129131

130132
return detectorBody;

public/pages/DetectorConfig/containers/__tests__/__snapshots__/DetectorConfig.test.tsx.snap

+68
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,40 @@ exports[`<DetectorConfig /> spec renders the component 1`] = `
430430
</div>
431431
</div>
432432
</div>
433+
<div
434+
class="euiFlexItem"
435+
>
436+
<div
437+
class="euiFormRow"
438+
id="random_html_id-row"
439+
style="width: 250px;"
440+
>
441+
<div
442+
class="euiFormRow__labelWrapper"
443+
>
444+
<label
445+
class="euiFormLabel euiFormRow__label"
446+
for="random_html_id"
447+
>
448+
Flatten custom result index
449+
</label>
450+
</div>
451+
<div
452+
class="euiFormRow__fieldWrapper"
453+
>
454+
<div
455+
class="euiText euiText--medium"
456+
id="random_html_id"
457+
>
458+
<p
459+
class="enabled"
460+
>
461+
Yes
462+
</p>
463+
</div>
464+
</div>
465+
</div>
466+
</div>
433467
<div
434468
class="euiFlexItem"
435469
>
@@ -1706,6 +1740,40 @@ exports[`<DetectorConfig /> spec renders the component with 2 custom and 1 simpl
17061740
</div>
17071741
</div>
17081742
</div>
1743+
<div
1744+
class="euiFlexItem"
1745+
>
1746+
<div
1747+
class="euiFormRow"
1748+
id="random_html_id-row"
1749+
style="width: 250px;"
1750+
>
1751+
<div
1752+
class="euiFormRow__labelWrapper"
1753+
>
1754+
<label
1755+
class="euiFormLabel euiFormRow__label"
1756+
for="random_html_id"
1757+
>
1758+
Flatten custom result index
1759+
</label>
1760+
</div>
1761+
<div
1762+
class="euiFormRow__fieldWrapper"
1763+
>
1764+
<div
1765+
class="euiText euiText--medium"
1766+
id="random_html_id"
1767+
>
1768+
<p
1769+
class="enabled"
1770+
>
1771+
Yes
1772+
</p>
1773+
</div>
1774+
</div>
1775+
</div>
1776+
</div>
17091777
<div
17101778
class="euiFlexItem"
17111779
>

public/pages/ReviewAndCreate/components/DetectorDefinitionFields/DetectorDefinitionFields.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ export const DetectorDefinitionFields = (
137137
const minSize = (minSizeValue === undefined) ? '-' : minSizeValue + " MB";
138138
const ttlValue = get(props, 'detector.resultIndexTtl', undefined);
139139
const ttl = (ttlValue === undefined) ? '-' : ttlValue + " Days";
140-
140+
const flattenCustomResultIndex = get(props, 'detector.flattenCustomResultIndex', undefined);
141+
const flatten = (flattenCustomResultIndex === undefined) ? '-' : flattenCustomResultIndex ? 'Yes' : 'No';
141142

142143
return (
143144
<ContentPanel
@@ -225,6 +226,12 @@ export const DetectorDefinitionFields = (
225226
description={get(props, 'detector.resultIndex', '-')}
226227
/>
227228
</EuiFlexItem>
229+
<EuiFlexItem>
230+
<ConfigCell
231+
title="Flatten custom result index"
232+
description={flatten}
233+
/>
234+
</EuiFlexItem>
228235
<EuiFlexItem>
229236
<ConfigCell
230237
title="Custom result index min age"

public/pages/ReviewAndCreate/components/__tests__/DetectorDefinitionFields.test.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ const testDetector = {
5858
resultIndexMinAge: 7,
5959
resultIndexMinSize: 51200,
6060
resultIndexTtl: 60,
61+
flattenCustomResultIndex: true,
6162
} as Detector;
6263

6364
describe('<AdditionalSettings /> spec', () => {
@@ -85,6 +86,7 @@ describe('<AdditionalSettings /> spec', () => {
8586
getByText('test-timefield');
8687
getByText('1 Minutes');
8788
getByText('opensearch-ad-plugin-result-test');
89+
getByText('Yes')
8890
getByText('7 Days');
8991
getByText('51200 MB');
9092
getByText('60 Days');

public/pages/ReviewAndCreate/components/__tests__/__snapshots__/DetectorDefinitionFields.test.tsx.snap

+68
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,40 @@ exports[`<AdditionalSettings /> spec renders the component in create mode (no ID
342342
</div>
343343
</div>
344344
</div>
345+
<div
346+
class="euiFlexItem"
347+
>
348+
<div
349+
class="euiFormRow"
350+
id="random_html_id-row"
351+
style="width: 250px;"
352+
>
353+
<div
354+
class="euiFormRow__labelWrapper"
355+
>
356+
<label
357+
class="euiFormLabel euiFormRow__label"
358+
for="random_html_id"
359+
>
360+
Flatten custom result index
361+
</label>
362+
</div>
363+
<div
364+
class="euiFormRow__fieldWrapper"
365+
>
366+
<div
367+
class="euiText euiText--medium"
368+
id="random_html_id"
369+
>
370+
<p
371+
class="enabled"
372+
>
373+
Yes
374+
</p>
375+
</div>
376+
</div>
377+
</div>
378+
</div>
345379
<div
346380
class="euiFlexItem"
347381
>
@@ -862,6 +896,40 @@ exports[`<AdditionalSettings /> spec renders the component in edit mode (with ID
862896
</div>
863897
</div>
864898
</div>
899+
<div
900+
class="euiFlexItem"
901+
>
902+
<div
903+
class="euiFormRow"
904+
id="random_html_id-row"
905+
style="width: 250px;"
906+
>
907+
<div
908+
class="euiFormRow__labelWrapper"
909+
>
910+
<label
911+
class="euiFormLabel euiFormRow__label"
912+
for="random_html_id"
913+
>
914+
Flatten custom result index
915+
</label>
916+
</div>
917+
<div
918+
class="euiFormRow__fieldWrapper"
919+
>
920+
<div
921+
class="euiText euiText--medium"
922+
id="random_html_id"
923+
>
924+
<p
925+
class="enabled"
926+
>
927+
Yes
928+
</p>
929+
</div>
930+
</div>
931+
</div>
932+
</div>
865933
<div
866934
class="euiFlexItem"
867935
>

0 commit comments

Comments
 (0)