Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { StatefulTopN } from '../../../common/components/top_n';
import { getScopeFromPath } from '../../../sourcerer/containers/sourcerer_paths';
import { useSourcererDataView } from '../../../sourcerer/containers';
import { useKibana } from '../../../common/lib/kibana';
import { useDataViewSpec } from '../../../data_view_manager/hooks/use_data_view_spec';
import { useDataView } from '../../../data_view_manager/hooks/use_data_view';
import { useBrowserFields } from '../../../data_view_manager/hooks/use_browser_fields';

export const TopValuesPopover = React.memo(() => {
Expand All @@ -25,10 +25,9 @@ export const TopValuesPopover = React.memo(() => {

const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');

const { dataViewSpec } = useDataViewSpec(sourcererScope);
const { dataView: experimentalDataView } = useDataView(sourcererScope);
const experimentalBrowserFields = useBrowserFields(sourcererScope);

const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields;

const {
Expand Down Expand Up @@ -57,7 +56,8 @@ export const TopValuesPopover = React.memo(() => {
field={data.fieldName}
scopeId={data.scopeId}
toggleTopN={onClose}
dataViewSpec={sourcererDataView}
dataView={experimentalDataView}
dataViewSpec={oldSourcererDataView}
browserFields={browserFields}
/>
</EuiWrappingPopover>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,10 @@ export const SendToTimelineButton: FC<PropsWithChildren<SendToTimelineButtonProp
const { dataViewId: oldTimelineDataViewId } = useSourcererDataView(SourcererScopeName.timeline);
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');

const { dataView } = useDataView(SourcererScopeName.timeline);
const { dataView: experimentalDataView } = useDataView(SourcererScopeName.timeline);

const timelineDataViewId = newDataViewPickerEnabled
? dataView?.id ?? null
? experimentalDataView.id ?? null
: oldTimelineDataViewId;

const { setDiscoverAppState } = useDiscoverState();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,10 @@ import { SettingsFlyout } from './settings_flyout';
import { parseFilterQuery } from './settings_flyout/parse_filter_query';
import { useSourcererDataView } from '../../sourcerer/containers';
import { useAttackDiscovery } from './use_attack_discovery';
import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features';
import { useDataViewSpec } from '../../data_view_manager/hooks/use_data_view_spec';
import { useInvalidateGetAttackDiscoveryGenerations } from './use_get_attack_discovery_generations';
import { useKibanaFeatureFlags } from './use_kibana_feature_flags';
import { getConnectorNameFromId } from './utils/get_connector_name_from_id';
import { useDataView } from '../../data_view_manager/hooks/use_data_view';

export const ID = 'attackDiscoveryQuery';

Expand Down Expand Up @@ -192,22 +191,19 @@ const AttackDiscoveryPageComponent: React.FC = () => {
const pageTitle = useMemo(() => <PageTitle />, []);

const { sourcererDataView: oldSourcererDataView } = useSourcererDataView();

const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
const { dataViewSpec } = useDataViewSpec();

const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
const { dataView: experimentalDataView } = useDataView();

// filterQuery is the combined search bar query and filters in ES format:
const [filterQuery, kqlError] = useMemo(
() =>
convertToBuildEsQuery({
config: getEsQueryConfig(uiSettings),
dataViewSpec: sourcererDataView,
dataViewSpec: oldSourcererDataView,
dataView: experimentalDataView,
queries: [query ?? getDefaultQuery()], // <-- search bar query
filters: filters ?? [], // <-- search bar filters
}),
[filters, query, sourcererDataView, uiSettings]
[experimentalDataView, filters, oldSourcererDataView, query, uiSettings]
);

// renders a toast if the filter query is invalid:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import {
} from '@elastic/eui';
import { useAssistantContext, useLoadConnectors } from '@kbn/elastic-assistant';

import { DataViewManagerScopeName } from '../../../../../data_view_manager/constants';
import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view';
import { useKibana } from '../../../../../common/lib/kibana';
import { useSourcererDataView } from '../../../../../sourcerer/containers';
import { Footer } from '../../footer';
Expand Down Expand Up @@ -46,6 +48,7 @@ export const CreateFlyout: React.FC<Props> = React.memo(({ onClose }) => {
});

const { sourcererDataView } = useSourcererDataView();
const { dataView: experimentalDataView } = useDataView(DataViewManagerScopeName.detections);

const { mutateAsync: createAttackDiscoverySchedule, isLoading: isLoadingQuery } =
useCreateAttackDiscoverySchedule();
Expand All @@ -63,7 +66,8 @@ export const CreateFlyout: React.FC<Props> = React.memo(({ onClose }) => {
alertsIndexPattern ?? '',
connector,
sourcererDataView,
uiSettings
uiSettings,
experimentalDataView
);
await createAttackDiscoverySchedule({ scheduleToCreate });
onClose();
Expand All @@ -75,6 +79,7 @@ export const CreateFlyout: React.FC<Props> = React.memo(({ onClose }) => {
aiConnectors,
alertsIndexPattern,
createAttackDiscoverySchedule,
experimentalDataView,
onClose,
sourcererDataView,
uiSettings,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { useAssistantContext, useLoadConnectors } from '@kbn/elastic-assistant';
import { DEFAULT_END, DEFAULT_START } from '@kbn/elastic-assistant-common';
import type { Filter } from '@kbn/es-query';

import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view';
import * as i18n from './translations';

import { useKibana } from '../../../../../common/lib/kibana';
Expand All @@ -39,6 +40,7 @@ import { ScheduleDefinition } from './definition';
import { Header } from './header';
import { ScheduleExecutionLogs } from './execution_logs';
import { convertFormDataInBaseSchedule } from '../utils/convert_form_data';
import { DataViewManagerScopeName } from '../../../../../data_view_manager/constants';

interface Props {
scheduleId: string;
Expand All @@ -65,6 +67,7 @@ export const DetailsFlyout: React.FC<Props> = React.memo(({ scheduleId, onClose
});

const { sourcererDataView } = useSourcererDataView();
const { dataView: experimentalDataView } = useDataView(DataViewManagerScopeName.detections);

const [isEditing, setIsEditing] = useState(false);

Expand All @@ -84,7 +87,8 @@ export const DetailsFlyout: React.FC<Props> = React.memo(({ scheduleId, onClose
alertsIndexPattern ?? '',
connector,
sourcererDataView,
uiSettings
uiSettings,
experimentalDataView
);
await updateAttackDiscoverySchedule({ id: scheduleId, scheduleToUpdate });
setIsEditing(false);
Expand All @@ -94,11 +98,12 @@ export const DetailsFlyout: React.FC<Props> = React.memo(({ scheduleId, onClose
},
[
aiConnectors,
uiSettings,
sourcererDataView,
scheduleId,
alertsIndexPattern,
sourcererDataView,
uiSettings,
experimentalDataView,
updateAttackDiscoverySchedule,
scheduleId,
]
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { convertFormDataInBaseSchedule } from './convert_form_data';
import { convertToBuildEsQuery } from '../../../../../common/lib/kuery';
import { getGenAiConfig } from '../../../use_attack_discovery/helpers';
import { parseFilterQuery } from '../../parse_filter_query';
import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub';

jest.mock('../../../../../common/lib/kuery');
jest.mock('../../../use_attack_discovery/helpers');
Expand Down Expand Up @@ -50,7 +51,8 @@ describe('convertFormDataInBaseSchedule', () => {
{} as DataViewSpec,
{
get: jest.fn(),
} as unknown as IUiSettingsClient
} as unknown as IUiSettingsClient,
createStubDataView({ spec: {} })
);
expect(baseSchedule).toEqual({
actions: [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*/

import type { IUiSettingsClient } from '@kbn/core/public';
import type { DataViewSpec } from '@kbn/data-plugin/common';
import type { DataView, DataViewSpec } from '@kbn/data-plugin/common';
import { getEsQueryConfig } from '@kbn/data-plugin/common';
import type { AIConnector } from '@kbn/elastic-assistant';

Expand All @@ -20,13 +20,15 @@ export const convertFormDataInBaseSchedule = (
alertsIndexPattern: string,
connector: AIConnector,
dataViewSpec: DataViewSpec,
uiSettings: IUiSettingsClient
uiSettings: IUiSettingsClient,
dataView: DataView
) => {
const alertsSelectionSettings = scheduleData.alertsSelectionSettings;

const [filterQuery, kqlError] = convertToBuildEsQuery({
config: getEsQueryConfig(uiSettings),
dataViewSpec,
dataView,
queries: [alertsSelectionSettings.query],
filters: alertsSelectionSettings.filters,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ export const SecurityCellActions: React.FC<SecurityCellActionsProps> = ({

const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
const { dataView: experimentalDataView } = useDataView(sourcererScopeId);
const dataViewId = newDataViewPickerEnabled ? experimentalDataView?.id : oldDataViewId;
const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id : oldDataViewId;

// Make a dependency key to prevent unnecessary re-renders when data object is defined inline
// It is necessary because the data object is an array or an object and useMemo would always re-render
Expand All @@ -82,13 +82,13 @@ export const SecurityCellActions: React.FC<SecurityCellActionsProps> = ({
(Array.isArray(data) ? data : [data])
.map(({ field, value }) => ({
field: newDataViewPickerEnabled
? experimentalDataView?.fields?.getByName(field)?.toSpec()
? experimentalDataView.fields?.getByName(field)?.toSpec()
: oldGetFieldSpec(field),
value,
}))
.filter((item): item is CellActionsData => !!item.field),
// eslint-disable-next-line react-hooks/exhaustive-deps -- Use the dependencyKey to prevent unnecessary re-renders
[dependencyKey, oldGetFieldSpec, newDataViewPickerEnabled, experimentalDataView?.fields]
[dependencyKey, oldGetFieldSpec, newDataViewPickerEnabled, experimentalDataView.fields]
);

const metadataWithDataView = useMemo(() => ({ ...metadata, dataViewId }), [dataViewId, metadata]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import { getEsQueryConfig } from '@kbn/data-plugin/common';
import type { EuiTheme } from '@kbn/kibana-react-plugin/common';
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy';
import { useDataViewSpec } from '../../../data_view_manager/hooks/use_data_view_spec';
import { useDataView } from '../../../data_view_manager/hooks/use_data_view';
import { InspectButton } from '../inspect';
import type {
Expand Down Expand Up @@ -152,27 +151,31 @@ const StatefulEventsViewerComponent: React.FC<EventsViewerProps & PropsFromRedux
const oldGetFieldSpec = useGetFieldSpec(sourcererScope);

const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
const { dataViewSpec, status } = useDataViewSpec(sourcererScope);
const { dataView: experimentalDataView } = useDataView(sourcererScope);
const { dataView: experimentalDataView, status } = useDataView(sourcererScope);

const experimentalSelectedPatterns = useSelectedPatterns(sourcererScope);
const experimentalBrowserFields = useBrowserFields(sourcererScope);
const selectedPatterns = newDataViewPickerEnabled
? experimentalSelectedPatterns
: oldSelectedPatterns;
const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
const isLoadingIndexPattern = newDataViewPickerEnabled
? status !== 'ready'
: oldIsLoadingIndexPattern;
const dataViewId = newDataViewPickerEnabled ? dataViewSpec.id ?? null : oldDataViewId;
const selectedDataViewId = newDataViewPickerEnabled ? dataViewSpec.id : oldDataViewId;
const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id ?? null : oldDataViewId;
const selectedDataViewId = newDataViewPickerEnabled ? experimentalDataView.id : oldDataViewId;
const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields;

const runtimeMappings = useMemo(() => {
return newDataViewPickerEnabled
? (experimentalDataView.getRuntimeMappings() as RunTimeMappings) ?? {}
: (oldSourcererDataView?.runtimeFieldMap as RunTimeMappings) ?? {};
}, [newDataViewPickerEnabled, experimentalDataView, oldSourcererDataView]);

const experimentalGetFieldSpec = useCallback(
(fieldName: string) => {
return experimentalDataView?.fields?.getByName(fieldName)?.toSpec();
return experimentalDataView.fields?.getByName(fieldName)?.toSpec();
},
[experimentalDataView?.fields]
[experimentalDataView.fields]
);
const getFieldSpec = newDataViewPickerEnabled ? experimentalGetFieldSpec : oldGetFieldSpec;

Expand Down Expand Up @@ -241,12 +244,22 @@ const StatefulEventsViewerComponent: React.FC<EventsViewerProps & PropsFromRedux
dataProviders: [],
filters: globalFilters,
from: start,
dataViewSpec: sourcererDataView,
dataViewSpec: oldSourcererDataView,
dataView: experimentalDataView,
kqlMode: 'filter',
kqlQuery: query,
to: end,
}),
[esQueryConfig, browserFields, globalFilters, start, sourcererDataView, query, end]
[
esQueryConfig,
browserFields,
globalFilters,
start,
oldSourcererDataView,
experimentalDataView,
query,
end,
]
);

const canQueryTimeline = useMemo(
Expand Down Expand Up @@ -288,7 +301,7 @@ const StatefulEventsViewerComponent: React.FC<EventsViewerProps & PropsFromRedux
id: tableId,
indexNames: indexNames ?? selectedPatterns,
limit: itemsPerPage,
runtimeMappings: sourcererDataView.runtimeFieldMap as RunTimeMappings,
runtimeMappings,
skip: !canQueryTimeline,
sort: sortField,
startDate: start,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ import { useLicense } from '../../../../hooks/use_license';
import { isProviderValid } from './helpers';
import * as i18n from './translations';
import { useGetScopedSourcererDataView } from '../../../../../sourcerer/components/use_get_sourcerer_data_view';
import { useDataViewSpec } from '../../../../../data_view_manager/hooks/use_data_view_spec';

interface InsightComponentProps {
label?: string;
Expand Down Expand Up @@ -291,8 +290,10 @@ const InsightEditorComponent = ({

const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');

const { dataViewSpec } = useDataViewSpec();
const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
const { dataView: experimentalDataView } = useDataView(SourcererScopeName.default);
const dataViewName = newDataViewPickerEnabled
? experimentalDataView.name
: oldSourcererDataView.name;

const {
unifiedSearch: {
Expand All @@ -305,8 +306,6 @@ const InsightEditorComponent = ({
sourcererScope: SourcererScopeName.default,
});

const { dataView: experimentalDataView } = useDataView(SourcererScopeName.default);

const dataView = newDataViewPickerEnabled ? experimentalDataView : oldDataView;

const [providers, setProviders] = useState<Provider[][]>([[]]);
Expand Down Expand Up @@ -416,7 +415,7 @@ const InsightEditorComponent = ({
);
}, [labelController.field.value, providers, dataView]);
const filtersStub = useMemo(() => {
const index = sourcererDataView.name ?? '*';
const index = dataViewName ?? '*';
return [
{
$state: {
Expand All @@ -430,7 +429,7 @@ const InsightEditorComponent = ({
},
},
];
}, [sourcererDataView]);
}, [dataViewName]);
const isPlatinum = useLicense().isAtLeast('platinum');

return (
Expand Down Expand Up @@ -496,11 +495,11 @@ const InsightEditorComponent = ({
/>
</EuiFormRow>
<EuiFormRow label={i18n.FILTER_BUILDER} helpText={i18n.FILTER_BUILDER_TEXT} fullWidth>
{oldDataView ? (
{dataView ? (
<FiltersBuilderLazy
filters={filtersStub}
onChange={onChange}
dataView={oldDataView}
dataView={dataView}
maxDepth={1}
/>
) : (
Expand Down
Loading