From 8c6a8bd0a80b346731d7a36397e98bc113d1bd9f Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Tue, 6 Jun 2023 18:13:38 -0700 Subject: [PATCH 1/7] fix bug bash bugs Signed-off-by: Jackie Han --- .../AddAnomalyDetector.tsx | 24 ++++++++++++------- .../CreateAnomalyDetector/helpers.tsx | 21 +++++++++++++--- .../FeatureAccordion/FeatureAccordion.tsx | 12 ++++++++++ public/utils/contextMenu/getActions.tsx | 4 ++-- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx index 9e490801a..512542243 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx @@ -70,6 +70,7 @@ import { import { focusOnFirstWrongFeature, initialFeatureValue, + validateFeatures, } from '../../../../public/pages/ConfigureModel/utils/helpers'; import { getIndices, @@ -109,6 +110,8 @@ function AddAnomalyDetector({ selectedDetector, setSelectedDetector, }) { + console.log(embeddable); + const dispatch = useDispatch(); const [queryText, setQueryText] = useState(''); useEffect(() => { @@ -157,12 +160,16 @@ function AddAnomalyDetector({ const notifications = getNotifications(); const handleValidationAndSubmit = (formikProps) => { - if (!isEmpty(formikProps.errors)) { - focusOnFirstWrongFeature(formikProps.errors, formikProps.setFieldTouched); - notifications.toasts.addDanger('One or more input fields is invalid'); - } else { - handleSubmit(formikProps); - } + console.log("formikProps, ", JSON.stringify(formikProps)) + formikProps.setFieldTouched('featureList', true); + formikProps.validateForm().then((errors) => { + if (!isEmpty(errors)) { + focusOnFirstWrongFeature(errors, formikProps.setFieldTouched); + notifications.toasts.addDanger('One or more input fields is invalid'); + } else { + handleSubmit(formikProps); + } + }) }; const uiSettings = getUISettings(); @@ -425,7 +432,7 @@ function AddAnomalyDetector({ {(formikProps) => ( <> @@ -767,7 +774,7 @@ function AddAnomalyDetector({

The dashboard does not support high-cardinality - detectors. + detectors. Learn more @@ -788,7 +795,6 @@ function AddAnomalyDetector({ isOpen={accordionsOpen.modelFeatures} onToggle={() => onAccordionToggle('modelFeatures')} > - {({ diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx index 5c69015ce..5688aed5e 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx @@ -44,18 +44,33 @@ const getFeatureNameFromVisParams = (id, seriesParams) => { }; function visAggregationToFormik(value) { + if (Object.values(value.params).length !== 0) { + return [ + { + label: value.params.field.name, + type: value.type, + }, + ]; + } return [ { - label: value.params.field.name, - type: 'number', + label: '', + type: value.type, }, ]; } function visAggregationQueryToFormik(value, seriesParams) { + if (Object.values(value.params).length !== 0) { + return { + [snakeCase(getFeatureNameFromVisParams(value.id, seriesParams))]: { + sum: { field: value.params.field.name }, + }, + }; + } return { [snakeCase(getFeatureNameFromVisParams(value.id, seriesParams))]: { - sum: { field: value.params.field.name }, + sum: { field: 'count' }, }, }; } diff --git a/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx b/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx index f18058580..e5e567320 100644 --- a/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx +++ b/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx @@ -80,6 +80,18 @@ export const FeatureAccordion = (props: FeatureAccordionProps) => { }; const featureButtonContent = (feature: any, index: number) => { + if (props.displayMode === 'flyout') { + return ( +

+ +
+ {feature.featureName ? feature.featureName : 'Add feature'} +
+
+ {showSubtitle ? showFeatureDescription(feature) : null} +
+ ); + } return (
diff --git a/public/utils/contextMenu/getActions.tsx b/public/utils/contextMenu/getActions.tsx index cccfd3997..26369e60d 100644 --- a/public/utils/contextMenu/getActions.tsx +++ b/public/utils/contextMenu/getActions.tsx @@ -21,7 +21,7 @@ import { FLYOUT_MODES } from '../../../public/components/FeatureAnywhereContextM const grouping: Action['grouping'] = [ { id: 'ad-dashboard-context-menu', - getDisplayName: () => 'Anomaly Detector', + getDisplayName: () => 'Anomaly Detection', getIconType: () => APM_TRACE, }, ]; @@ -54,7 +54,7 @@ export const getActions = () => { title: i18n.translate( 'dashboard.actions.adMenuItem.createAnomalyDetector.displayName', { - defaultMessage: 'Create anomaly detector', + defaultMessage: 'Add anomaly detector', } ), icon: 'plusInCircle' as EuiIconType, From a9f28c13e6edab7cb561bc35cbdfcd2280720f8d Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Wed, 7 Jun 2023 16:37:22 -0700 Subject: [PATCH 2/7] bug fix Signed-off-by: Jackie Han --- .../AddAnomalyDetector.tsx | 45 ++++++++++--------- .../CreateAnomalyDetector/helpers.tsx | 45 +++++++++++-------- .../FeatureAccordion/FeatureAccordion.tsx | 3 +- .../components/FeatureAccordion/styles.scss | 3 ++ 4 files changed, 57 insertions(+), 39 deletions(-) create mode 100644 public/pages/ConfigureModel/components/FeatureAccordion/styles.scss diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx index 512542243..f79fd1ce2 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx @@ -109,9 +109,7 @@ function AddAnomalyDetector({ setMode, selectedDetector, setSelectedDetector, -}) { - console.log(embeddable); - +}) { const dispatch = useDispatch(); const [queryText, setQueryText] = useState(''); useEffect(() => { @@ -160,16 +158,19 @@ function AddAnomalyDetector({ const notifications = getNotifications(); const handleValidationAndSubmit = (formikProps) => { - console.log("formikProps, ", JSON.stringify(formikProps)) - formikProps.setFieldTouched('featureList', true); - formikProps.validateForm().then((errors) => { - if (!isEmpty(errors)) { - focusOnFirstWrongFeature(errors, formikProps.setFieldTouched); - notifications.toasts.addDanger('One or more input fields is invalid'); - } else { - handleSubmit(formikProps); - } - }) + if (formikProps.values.featureList.length !== 0) { + formikProps.setFieldTouched('featureList', true); + formikProps.validateForm().then((errors) => { + if (!isEmpty(errors)) { + focusOnFirstWrongFeature(errors, formikProps.setFieldTouched); + notifications.toasts.addDanger('One or more input fields is invalid.'); + } else { + handleSubmit(formikProps); + } + }) + } else { + notifications.toasts.addDanger('One or more features are required to check for anomalies.'); + } }; const uiSettings = getUISettings(); @@ -210,9 +211,9 @@ function AddAnomalyDetector({ formikProps.setSubmitting(true); try { const detectorToCreate = formikToDetector(formikProps.values); - dispatch(createDetector(detectorToCreate)) + await dispatch(createDetector(detectorToCreate)) .then(async (response) => { - dispatch(startDetector(response.response.id)) + await dispatch(startDetector(response.response.id)) .then((startDetectorResponse) => {}) .catch((err: any) => { notifications.toasts.addDanger( @@ -229,7 +230,7 @@ function AddAnomalyDetector({ const augmentVisSavedObjectToCreate: ISavedAugmentVis = getAugmentVisSavedObject(detectorId); - createAugmentVisSavedObject( + await createAugmentVisSavedObject( augmentVisSavedObjectToCreate, savedObjectLoader, uiSettings @@ -539,8 +540,8 @@ function AddAnomalyDetector({ subTitle={

- Detector interval: {intervalValue} minutes; Window - delay: {delayValue} minutes + Detector interval: {intervalValue} minute(s); Window + delay: {delayValue} minute(s)

} @@ -591,7 +592,7 @@ function AddAnomalyDetector({ -

minutes

+

minute(s)

@@ -625,7 +626,7 @@ function AddAnomalyDetector({ -

minutes

+

minute(s)

@@ -817,6 +818,8 @@ function AddAnomalyDetector({ /> ) )} + + + +
)} diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx index 5688aed5e..0536c7119 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx @@ -1,9 +1,12 @@ -import { dispatch } from 'd3'; -import { matchDetector } from 'public/redux/reducers/ad'; -import { validateDetectorName } from 'public/utils/utils'; +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + import { FEATURE_TYPE } from '../../../../public/models/interfaces'; import { FeaturesFormikValues } from '../../../../public/pages/ConfigureModel/models/interfaces'; -import { find, get, isEmpty, snakeCase } from 'lodash'; +import { find, snakeCase } from 'lodash'; +import { AGGREGATION_TYPES } from '../../../../public/pages/ConfigureModel/utils/constants'; export function visFeatureListToFormik( featureList, @@ -17,7 +20,7 @@ export function visFeatureListToFormik( featureType: FEATURE_TYPE.SIMPLE, importance: 1, newFeature: false, - aggregationBy: 'sum', + aggregationBy: visAggregationTypeToFormik(feature), aggregationOf: visAggregationToFormik(feature), aggregationQuery: JSON.stringify( visAggregationQueryToFormik(feature, seriesParams) @@ -47,30 +50,36 @@ function visAggregationToFormik(value) { if (Object.values(value.params).length !== 0) { return [ { - label: value.params.field.name, + label: value.params?.field?.name, type: value.type, }, ]; } - return [ - { - label: '', - type: value.type, - }, - ]; + // for count type of vis, there's no field name in the embeddable schema + return []; } function visAggregationQueryToFormik(value, seriesParams) { if (Object.values(value.params).length !== 0) { return { [snakeCase(getFeatureNameFromVisParams(value.id, seriesParams))]: { - sum: { field: value.params.field.name }, + [visAggregationTypeToFormik(value)]: { field: value.params?.field?.name }, }, }; } - return { - [snakeCase(getFeatureNameFromVisParams(value.id, seriesParams))]: { - sum: { field: 'count' }, - }, - }; + // for count type of vis, there's no field name in the embeddable schema + // return '' as the csutom expression query + return '' +} + +function visAggregationTypeToFormik(feature) { + const aggType = feature.__type.name; + if (AGGREGATION_TYPES.some((type) => type.value === aggType)) { + return aggType; + } + if (aggType === 'count') { + return 'value_count' + } + return 'sum'; } + diff --git a/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx b/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx index e5e567320..a819ed8f7 100644 --- a/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx +++ b/public/pages/ConfigureModel/components/FeatureAccordion/FeatureAccordion.tsx @@ -22,6 +22,7 @@ import { EuiCheckbox, EuiButtonIcon, } from '@elastic/eui'; +import './styles.scss'; import { Field, FieldProps } from 'formik'; import { required, @@ -137,7 +138,7 @@ export const FeatureAccordion = (props: FeatureAccordionProps) => { buttonClassName={ props.index === 0 ? 'euiAccordionForm__noTopPaddingButton' - : 'euiAccordionForm__button' + : 'euiFormAccordion_button' } className="euiAccordion__noTopBorder" paddingSize="l" diff --git a/public/pages/ConfigureModel/components/FeatureAccordion/styles.scss b/public/pages/ConfigureModel/components/FeatureAccordion/styles.scss new file mode 100644 index 000000000..50f66b471 --- /dev/null +++ b/public/pages/ConfigureModel/components/FeatureAccordion/styles.scss @@ -0,0 +1,3 @@ +.euiFormAccordion_button { + padding: 20px 16px 0 0; +} \ No newline at end of file From be37b7057f8c3f794450a09e5a59ca061138e001 Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Wed, 7 Jun 2023 16:40:01 -0700 Subject: [PATCH 3/7] yarn prettier Signed-off-by: Jackie Han --- .../CreateAnomalyDetector/AddAnomalyDetector.tsx | 16 +++++++++------- .../CreateAnomalyDetector/helpers.tsx | 9 +++++---- .../components/FeatureAccordion/styles.scss | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx index f79fd1ce2..174a26e73 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx @@ -109,7 +109,7 @@ function AddAnomalyDetector({ setMode, selectedDetector, setSelectedDetector, -}) { +}) { const dispatch = useDispatch(); const [queryText, setQueryText] = useState(''); useEffect(() => { @@ -163,13 +163,17 @@ function AddAnomalyDetector({ formikProps.validateForm().then((errors) => { if (!isEmpty(errors)) { focusOnFirstWrongFeature(errors, formikProps.setFieldTouched); - notifications.toasts.addDanger('One or more input fields is invalid.'); + notifications.toasts.addDanger( + 'One or more input fields is invalid.' + ); } else { handleSubmit(formikProps); } - }) + }); } else { - notifications.toasts.addDanger('One or more features are required to check for anomalies.'); + notifications.toasts.addDanger( + 'One or more features are required to check for anomalies.' + ); } }; @@ -775,7 +779,7 @@ function AddAnomalyDetector({

The dashboard does not support high-cardinality - detectors. + detectors. Learn more @@ -796,7 +800,6 @@ function AddAnomalyDetector({ isOpen={accordionsOpen.modelFeatures} onToggle={() => onAccordionToggle('modelFeatures')} > - {({ push, @@ -851,7 +854,6 @@ function AddAnomalyDetector({ - )} diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx index 0536c7119..3c13371a5 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx @@ -63,13 +63,15 @@ function visAggregationQueryToFormik(value, seriesParams) { if (Object.values(value.params).length !== 0) { return { [snakeCase(getFeatureNameFromVisParams(value.id, seriesParams))]: { - [visAggregationTypeToFormik(value)]: { field: value.params?.field?.name }, + [visAggregationTypeToFormik(value)]: { + field: value.params?.field?.name, + }, }, }; } // for count type of vis, there's no field name in the embeddable schema // return '' as the csutom expression query - return '' + return ''; } function visAggregationTypeToFormik(feature) { @@ -78,8 +80,7 @@ function visAggregationTypeToFormik(feature) { return aggType; } if (aggType === 'count') { - return 'value_count' + return 'value_count'; } return 'sum'; } - diff --git a/public/pages/ConfigureModel/components/FeatureAccordion/styles.scss b/public/pages/ConfigureModel/components/FeatureAccordion/styles.scss index 50f66b471..5d819b8ad 100644 --- a/public/pages/ConfigureModel/components/FeatureAccordion/styles.scss +++ b/public/pages/ConfigureModel/components/FeatureAccordion/styles.scss @@ -1,3 +1,3 @@ .euiFormAccordion_button { padding: 20px 16px 0 0; -} \ No newline at end of file +} From dc15cff846d720ad543464a76d91931aeeb38fac Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Wed, 7 Jun 2023 16:41:16 -0700 Subject: [PATCH 4/7] bug fix Signed-off-by: Jackie Han --- .../CreateAnomalyDetector/AddAnomalyDetector.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx index 174a26e73..dc97abf79 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx @@ -437,6 +437,7 @@ function AddAnomalyDetector({ {(formikProps) => ( From c23386062f324cc8cb9d80c3d24241fd3c684a56 Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Wed, 7 Jun 2023 17:33:37 -0700 Subject: [PATCH 5/7] bug fixes Signed-off-by: Jackie Han --- .../AddAnomalyDetector.tsx | 43 +++++++++++++++++-- .../AddAnomalyDetector.test.tsx.snap | 3 ++ .../CreateAnomalyDetector/helpers.tsx | 21 ++++++++- public/expressions/constants.ts | 6 +++ 4 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx index dc97abf79..e76b2ad87 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx @@ -96,6 +96,8 @@ import { ORIGIN_PLUGIN_VIS_LAYER, OVERLAY_ANOMALIES, VIS_LAYER_PLUGIN_TYPE, + PLUGIN_AUGMENTATION_ENABLE_SETTING, + PLUGIN_AUGMENTATION_MAX_OBJECTS_SETTING, } from '../../../../public/expressions/constants'; import { formikToDetectorName, visFeatureListToFormik } from './helpers'; import { AssociateExisting } from './AssociateExisting'; @@ -160,14 +162,47 @@ function AddAnomalyDetector({ const handleValidationAndSubmit = (formikProps) => { if (formikProps.values.featureList.length !== 0) { formikProps.setFieldTouched('featureList', true); - formikProps.validateForm().then((errors) => { + formikProps.validateForm().then(async (errors) => { if (!isEmpty(errors)) { focusOnFirstWrongFeature(errors, formikProps.setFieldTouched); notifications.toasts.addDanger( 'One or more input fields is invalid.' ); } else { - handleSubmit(formikProps); + const isAugmentationEnabled = uiSettings.get( + PLUGIN_AUGMENTATION_ENABLE_SETTING + ); + if (!isAugmentationEnabled) { + notifications.toasts.addDanger( + 'Visualization augmentation is disabled, please enable visualization:enablePluginAugmentation.' + ); + } else { + const maxAssociatedCount = uiSettings.get( + PLUGIN_AUGMENTATION_MAX_OBJECTS_SETTING + ); + await savedObjectLoader.findAll().then(async (resp) => { + if (resp !== undefined) { + const savedAugmentObjects = get(resp, 'hits', []); + // gets all the saved object for this visualization + const savedObjectsForThisVisualization = + savedAugmentObjects.filter( + (savedObj) => + get(savedObj, 'visId', '') === embeddable.vis.id + ); + if ( + maxAssociatedCount <= savedObjectsForThisVisualization.length + ) { + notifications.toasts.addDanger( + `Cannot create the detector and associate it to the visualization due to the limit of the max + amount of associated plugin resources (${maxAssociatedCount}) with + ${savedObjectsForThisVisualization.length} associated to the visualization` + ); + } else { + handleSubmit(formikProps); + } + } + }); + } } }); } else { @@ -217,7 +252,7 @@ function AddAnomalyDetector({ const detectorToCreate = formikToDetector(formikProps.values); await dispatch(createDetector(detectorToCreate)) .then(async (response) => { - await dispatch(startDetector(response.response.id)) + dispatch(startDetector(response.response.id)) .then((startDetectorResponse) => {}) .catch((err: any) => { notifications.toasts.addDanger( @@ -420,7 +455,7 @@ function AddAnomalyDetector({ windowDelay: delayValue, shingleSize: 8, filterQuery: { match_all: {} }, - description: '', + description: 'Created based on ' + embeddable.vis.title, resultIndex: undefined, filters: [], featureList: visFeatureListToFormik( diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap new file mode 100644 index 000000000..72349add1 --- /dev/null +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AddAnomalyDetector renders 1`] = `ShallowWrapper {}`; diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx index 3c13371a5..537136567 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx @@ -5,8 +5,9 @@ import { FEATURE_TYPE } from '../../../../public/models/interfaces'; import { FeaturesFormikValues } from '../../../../public/pages/ConfigureModel/models/interfaces'; -import { find, snakeCase } from 'lodash'; +import { find, get, snakeCase } from 'lodash'; import { AGGREGATION_TYPES } from '../../../../public/pages/ConfigureModel/utils/constants'; +import { getSavedFeatureAnywhereLoader } from '../../../../public/services'; export function visFeatureListToFormik( featureList, @@ -36,6 +37,24 @@ export function formikToDetectorName(title) { return detectorName; } +export async function isExceededMaxAssociatedCount(visId, savedObjLoader) { + const loader = + savedObjLoader !== undefined + ? savedObjLoader + : getSavedFeatureAnywhereLoader(); + + await loader.findAll().then(async (resp) => { + if (resp !== undefined) { + const savedAugmentObjects = get(resp, 'hits', []); + // gets all the saved object for this visualization + const savedObjectsForThisVisualization = savedAugmentObjects.filter( + (savedObj) => get(savedObj, 'visId', '') === visId + ); + return savedObjectsForThisVisualization.length; + } + }); +} + const getFeatureNameFromVisParams = (id, seriesParams) => { let name = find(seriesParams, function (param) { if (param.data.id === id) { diff --git a/public/expressions/constants.ts b/public/expressions/constants.ts index 41a79276b..26d756c7a 100644 --- a/public/expressions/constants.ts +++ b/public/expressions/constants.ts @@ -13,3 +13,9 @@ export const TYPE_OF_EXPR_VIS_LAYERS = 'vis_layers'; export const OVERLAY_ANOMALIES = 'overlay_anomalies'; export const PLUGIN_EVENT_TYPE = 'Anomalies'; + +export const PLUGIN_AUGMENTATION_ENABLE_SETTING = + 'visualization:enablePluginAugmentation'; + +export const PLUGIN_AUGMENTATION_MAX_OBJECTS_SETTING = + 'visualization:enablePluginAugmentation.maxPluginObjects'; From b8af76e646af1700d68c360ac08984ee3535ebb6 Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Wed, 7 Jun 2023 17:44:42 -0700 Subject: [PATCH 6/7] clean up code Signed-off-by: Jackie Han --- .../AddAnomalyDetector.tsx | 2 +- .../CreateAnomalyDetector/helpers.tsx | 27 +++---------------- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx index e76b2ad87..766cee4e4 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/AddAnomalyDetector.tsx @@ -207,7 +207,7 @@ function AddAnomalyDetector({ }); } else { notifications.toasts.addDanger( - 'One or more features are required to check for anomalies.' + 'One or more features are required.' ); } }; diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx index 537136567..4a990b676 100644 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx +++ b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/helpers.tsx @@ -5,9 +5,8 @@ import { FEATURE_TYPE } from '../../../../public/models/interfaces'; import { FeaturesFormikValues } from '../../../../public/pages/ConfigureModel/models/interfaces'; -import { find, get, snakeCase } from 'lodash'; +import { find, snakeCase } from 'lodash'; import { AGGREGATION_TYPES } from '../../../../public/pages/ConfigureModel/utils/constants'; -import { getSavedFeatureAnywhereLoader } from '../../../../public/services'; export function visFeatureListToFormik( featureList, @@ -37,24 +36,6 @@ export function formikToDetectorName(title) { return detectorName; } -export async function isExceededMaxAssociatedCount(visId, savedObjLoader) { - const loader = - savedObjLoader !== undefined - ? savedObjLoader - : getSavedFeatureAnywhereLoader(); - - await loader.findAll().then(async (resp) => { - if (resp !== undefined) { - const savedAugmentObjects = get(resp, 'hits', []); - // gets all the saved object for this visualization - const savedObjectsForThisVisualization = savedAugmentObjects.filter( - (savedObj) => get(savedObj, 'visId', '') === visId - ); - return savedObjectsForThisVisualization.length; - } - }); -} - const getFeatureNameFromVisParams = (id, seriesParams) => { let name = find(seriesParams, function (param) { if (param.data.id === id) { @@ -74,7 +55,7 @@ function visAggregationToFormik(value) { }, ]; } - // for count type of vis, there's no field name in the embeddable schema + // for count type of vis, there's no field name in the embeddable-vis schema return []; } @@ -88,8 +69,8 @@ function visAggregationQueryToFormik(value, seriesParams) { }, }; } - // for count type of vis, there's no field name in the embeddable schema - // return '' as the csutom expression query + // for count type of vis, there's no field name in the embeddable-vis schema + // return '' as the custom expression query return ''; } From 9cf29192d89d2aecc773fbee7c70ab58024fc6c7 Mon Sep 17 00:00:00 2001 From: Jackie Han Date: Thu, 8 Jun 2023 09:40:39 -0700 Subject: [PATCH 7/7] removed unused snapshot Signed-off-by: Jackie Han --- .../__snapshots__/AddAnomalyDetector.test.tsx.snap | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap diff --git a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap b/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap deleted file mode 100644 index 72349add1..000000000 --- a/public/components/FeatureAnywhereContextMenu/CreateAnomalyDetector/__snapshots__/AddAnomalyDetector.test.tsx.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`AddAnomalyDetector renders 1`] = `ShallowWrapper {}`;