diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/common/index.ts b/x-pack/platform/plugins/shared/automatic_import_v2/common/index.ts index 033d2c67720ad..bb798ce73001b 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/common/index.ts +++ b/x-pack/platform/plugins/shared/automatic_import_v2/common/index.ts @@ -70,7 +70,6 @@ export { type ReviewApproveMenuClickedPayload, type ApproveModalCancelClickedPayload, type ApproveModalApproveClickedPayload, - type IntegrationDeleteConfirmedPayload, type DataStreamDeleteConfirmedPayload, type DataStreamRefreshConfirmedPayload, type PipelineEditedPayload, diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/common/telemetry/types.ts b/x-pack/platform/plugins/shared/automatic_import_v2/common/telemetry/types.ts index bde83795456b1..d5958c765538f 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/common/telemetry/types.ts +++ b/x-pack/platform/plugins/shared/automatic_import_v2/common/telemetry/types.ts @@ -32,7 +32,6 @@ export enum AIV2TelemetryEventType { // Fleet Events ManageIntegrationsTableViewed = 'aiv2_manage_integrations_table_viewed', UploadIntegrationClicked = 'aiv2_upload_integration_clicked', - IntegrationDeleteConfirmed = 'aiv2_integration_delete_confirmed', ReviewApproveMenuClicked = 'aiv2_review_approve_menu_clicked', IntegrationDownloadZipClicked = 'aiv2_integration_download_zip_clicked', ApproveModalCancelClicked = 'aiv2_approve_modal_cancel_clicked', @@ -40,34 +39,34 @@ export enum AIV2TelemetryEventType { } export interface CreateIntegrationPageLoadedPayload { - sessionId: string; + sessionId?: string; } export interface DataStreamFlyoutOpenedPayload { - sessionId: string; + sessionId?: string; /** Boolean flag if this is the first data stream being created for a new integration */ isFirstDataStream: boolean; } export interface EditDataStreamFlyoutOpenedPayload { - sessionId: string; + sessionId?: string; } export interface AnalyzeLogsTriggeredPayload { - sessionId: string; + sessionId?: string; logsSource: LogsSource; } export interface EditPipelineTabOpenedPayload { - sessionId: string; + sessionId?: string; } export interface CodeEditorCopyClickedPayload { - sessionId: string; + sessionId?: string; } export interface DataStreamCreationCompletePayload { - sessionId: string; + sessionId?: string; integrationId: string; integrationName: string; dataStreamId: string; @@ -78,7 +77,7 @@ export interface DataStreamCreationCompletePayload { } export interface IntegrationInstalledPayload { - sessionId: string; + sessionId?: string; integrationName: string; version: string; dataStreamCount: number; @@ -89,31 +88,28 @@ export type ManageIntegrationsTableViewedPayload = Record; export type UploadIntegrationClickedPayload = Record; export interface CancelButtonClickedPayload { - sessionId: string; + sessionId?: string; } export interface DoneButtonClickedPayload { - sessionId: string; + sessionId?: string; } export type ReviewApproveMenuClickedPayload = Record; export type IntegrationDownloadZipClickedPayload = Record; export type ApproveModalCancelClickedPayload = Record; export type ApproveModalApproveClickedPayload = Record; -export interface IntegrationDeleteConfirmedPayload { - sessionId: string; -} export interface DataStreamDeleteConfirmedPayload { - sessionId: string; + sessionId?: string; } export interface DataStreamRefreshConfirmedPayload { - sessionId: string; + sessionId?: string; } export interface PipelineEditedPayload { - sessionId: string; + sessionId?: string; linesAdded: number; linesRemoved: number; netLineChange: number; @@ -152,8 +148,6 @@ export type AIV2EventPayload = ? ApproveModalCancelClickedPayload : T extends AIV2TelemetryEventType.ApproveModalApproveClicked ? ApproveModalApproveClickedPayload - : T extends AIV2TelemetryEventType.IntegrationDeleteConfirmed - ? IntegrationDeleteConfirmedPayload : T extends AIV2TelemetryEventType.DataStreamDeleteConfirmed ? DataStreamDeleteConfirmedPayload : T extends AIV2TelemetryEventType.DataStreamRefreshConfirmed diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.test.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.test.tsx index 2ab9dcfad3415..f3de1a7f1dce1 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.test.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.test.tsx @@ -17,7 +17,6 @@ const mockNavigateToUrl = jest.fn(); const mockGetUrlForApp = jest.fn(() => '/mock-integrations-url'); const mockReportCancelButtonClicked = jest.fn(); const mockReportDoneButtonClicked = jest.fn(); -const mockReportIntegrationDeleteConfirmed = jest.fn(); const mockUseGetIntegrationById = jest.fn(); const mockDeleteIntegrationMutateAsync = jest.fn().mockResolvedValue(undefined); @@ -77,7 +76,6 @@ jest.mock('../telemetry_context', () => ({ useTelemetry: () => ({ reportCancelButtonClicked: mockReportCancelButtonClicked, reportDoneButtonClicked: mockReportDoneButtonClicked, - reportIntegrationDeleteConfirmed: mockReportIntegrationDeleteConfirmed, }), })); @@ -271,7 +269,6 @@ describe('IntegrationManagement telemetry', () => { }); }); - expect(mockReportIntegrationDeleteConfirmed).toHaveBeenCalledTimes(1); expect(mockNavigateToApp).toHaveBeenCalledWith('integrations', expect.any(Object)); }); }); diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.tsx index 5a65698949b7e..5216ef6d2199e 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/integration_management.tsx @@ -42,8 +42,7 @@ const IntegrationManagementContents: React.FC = () => { ); const [isDeleteIntegrationModalVisible, setIsDeleteIntegrationModalVisible] = useState(false); const deleteIntegrationModalTitleId = useGeneratedHtmlId(); - const { reportCancelButtonClicked, reportDoneButtonClicked, reportIntegrationDeleteConfirmed } = - useTelemetry(); + const { reportCancelButtonClicked, reportDoneButtonClicked } = useTelemetry(); const navigateToManage = useCallback(() => { application.navigateToApp(INTEGRATIONS_APP_ID, { path: INTEGRATIONS_MANAGE_PATH }); @@ -77,17 +76,11 @@ const IntegrationManagementContents: React.FC = () => { try { await deleteIntegrationMutation.mutateAsync({ integrationId }); setIsDeleteIntegrationModalVisible(false); - reportIntegrationDeleteConfirmed(); navigateToManage(); } catch { // Error toast is shown by useDeleteIntegration } - }, [ - deleteIntegrationMutation, - integrationId, - navigateToManage, - reportIntegrationDeleteConfirmed, - ]); + }, [deleteIntegrationMutation, integrationId, navigateToManage]); const handleDone = useCallback(() => { reportDoneButtonClicked(); diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.test.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.test.tsx index 4564b99207197..163cfd345ae75 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.test.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.test.tsx @@ -209,6 +209,29 @@ describe('CreateDataStreamFlyout', () => { expect(getByTestId('analyzeLogsButton')).toBeDisabled(); }); + + it('should keep analyze button disabled when data stream description is empty', async () => { + const Wrapper = createWrapper({ + title: 'Integration', + description: 'Integration description', + connectorId: 'connector-1', + dataStreamTitle: 'My stream', + dataStreamDescription: '', + dataCollectionMethod: ['filestream'], + logSample: '2024-01-01 level=info msg=test', + }); + const { getByTestId } = render( + + + + ); + + await waitFor(() => { + expect(getByTestId('analyzeLogsButton')).toBeInTheDocument(); + }); + + expect(getByTestId('analyzeLogsButton')).toBeDisabled(); + }); }); describe('log source selection', () => { diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.tsx index 3f2ba10d3efe9..4728283ee0ad8 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/create_data_stream_flyout.tsx @@ -25,6 +25,7 @@ import { EuiCallOut, EuiCheckableCard, EuiFilePicker, + EuiToolTip, useEuiTheme, } from '@elastic/eui'; import { UseField } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; @@ -39,6 +40,7 @@ import { import { PLUGIN_ID } from '../../../../../common/constants'; import type { LogsSourceOption } from '../../forms/types'; import { useIntegrationForm } from '../../forms/integration_form'; +import * as formI18n from '../../forms/translations'; import * as i18n from './translations'; import { FormStyledLabel } from '../../../../common/components/form_styled_label'; import { @@ -132,6 +134,7 @@ const dataCollectionMethodOptions: Array> = [ ]; export const CreateDataStreamFlyout: React.FC = ({ onClose }) => { + const { euiTheme } = useEuiTheme(); const styles = useLayoutStyles(); const { integrationId: currentIntegrationId } = useParams<{ integrationId?: string }>(); const { reportAnalyzeLogsTriggered } = useTelemetry(); @@ -225,7 +228,6 @@ export const CreateDataStreamFlyout: React.FC = ({ [validateIndex, clearIndexValidationError] ); - // Check if integration-level required fields are filled (only when creating new integration) const isIntegrationFieldsValid = !!formData?.title?.trim() && !!formData?.description?.trim() && !!formData?.connectorId?.trim(); @@ -240,6 +242,7 @@ export const CreateDataStreamFlyout: React.FC = ({ const isDataStreamFieldsValid = !!formData?.dataStreamTitle?.trim() && + !!formData?.dataStreamDescription?.trim() && !hasDuplicateDataStreamName && formData?.dataCollectionMethod != null && formData.dataCollectionMethod.length > 0; @@ -257,6 +260,87 @@ export const CreateDataStreamFlyout: React.FC = ({ isLoading || isUploadingSamples; + const analyzeLogsValidationReasons = useMemo(() => { + const reasons: string[] = []; + if (!formData?.title?.trim()) { + reasons.push(formI18n.TITLE_REQUIRED); + } + if (!formData?.description?.trim()) { + reasons.push(formI18n.DESCRIPTION_REQUIRED); + } + if (!formData?.connectorId?.trim()) { + reasons.push(formI18n.CONNECTOR_REQUIRED); + } + if (!formData?.dataStreamTitle?.trim()) { + reasons.push(formI18n.DATA_STREAM_TITLE_REQUIRED); + } else if (hasDuplicateDataStreamName) { + reasons.push(formI18n.DATA_STREAM_TITLE_ALREADY_EXISTS); + } + if (!formData?.dataStreamDescription?.trim()) { + reasons.push(formI18n.DATA_STREAM_DESCRIPTION_REQUIRED); + } + if (!formData?.dataCollectionMethod?.length) { + reasons.push(formI18n.DATA_COLLECTION_METHOD_REQUIRED); + } + if (logsSourceOption === 'file' && !logSample) { + reasons.push(formI18n.LOG_SAMPLE_REQUIRED); + } + if (logsSourceOption === 'index') { + if (!selectedIndex) { + reasons.push(formI18n.SELECTED_INDEX_REQUIRED); + } else if (indexValidationError) { + reasons.push(indexValidationError); + } + } + return reasons; + }, [ + formData?.title, + formData?.description, + formData?.connectorId, + formData?.dataStreamTitle, + formData?.dataStreamDescription, + formData?.dataCollectionMethod, + hasDuplicateDataStreamName, + logsSourceOption, + logSample, + selectedIndex, + indexValidationError, + ]); + + const analyzeLogsDisabledTooltipContent = useMemo(() => { + if (!isAnalyzeDisabled) { + return null; + } + if (analyzeLogsValidationReasons.length > 0) { + return ( + +
    + {analyzeLogsValidationReasons.map((reason, index) => ( +
  • {reason}
  • + ))} +
+
+ ); + } + if (isParsing || isValidatingIndex || isLoading || isUploadingSamples) { + return i18n.ANALYZE_LOGS_DISABLED_LOADING; + } + return null; + }, [ + analyzeLogsValidationReasons, + euiTheme.size.base, + isAnalyzeDisabled, + isLoading, + isParsing, + isUploadingSamples, + isValidatingIndex, + ]); + const handleAnalyzeLogs = useCallback(async () => { if (!formData) return; @@ -447,6 +531,8 @@ export const CreateDataStreamFlyout: React.FC = ({ {i18n.LOGS_SECTION_DESCRIPTION} + + {i18n.LOG_SAMPLE_REQUIRED_FOR_ANALYSIS} @@ -530,15 +616,31 @@ export const CreateDataStreamFlyout: React.FC = ({ - - {i18n.ANALYZE_LOGS_BUTTON} - + {isAnalyzeDisabled && analyzeLogsDisabledTooltipContent != null ? ( + + + + {i18n.ANALYZE_LOGS_BUTTON} + + + + ) : ( + + {i18n.ANALYZE_LOGS_BUTTON} + + )} diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.test.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.test.tsx index e79f4388fe294..fe585a82f1d4f 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.test.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.test.tsx @@ -12,6 +12,7 @@ import { MemoryRouter, Route } from '@kbn/shared-ux-router'; import { DataStreams } from './data_streams'; import { UIStateProvider } from '../../contexts'; import { useGetIntegrationById } from '../../../../common'; +import { useIntegrationForm } from '../../forms/integration_form'; jest.mock('../../../../common', () => ({ useGetIntegrationById: jest.fn(), @@ -25,6 +26,11 @@ jest.mock('../../../../common', () => ({ })); const mockUseGetIntegrationById = useGetIntegrationById as jest.Mock; +jest.mock('../../forms/integration_form', () => ({ + useIntegrationForm: jest.fn(), +})); +const mockUseIntegrationForm = useIntegrationForm as jest.Mock; + const mockReportDataStreamFlyoutOpened = jest.fn(); jest.mock('../../../telemetry_context', () => ({ useTelemetry: () => ({ @@ -74,6 +80,9 @@ describe('DataStreams', () => { error: null, refetch: jest.fn(), }); + mockUseIntegrationForm.mockReturnValue({ + formData: { title: 'Integration title', description: 'Integration description' }, + }); }); describe('rendering', () => { @@ -219,4 +228,61 @@ describe('DataStreams', () => { expect(queryByText(/No data streams have been configured/i)).not.toBeInTheDocument(); }); }); + + describe('create integration page', () => { + it('disables add data stream when integration name is empty', () => { + mockUseIntegrationForm.mockReturnValue({ + formData: { title: '', description: 'Has description' }, + }); + mockUseGetIntegrationById.mockReturnValue({ + integration: undefined, + isLoading: false, + }); + + const { getByTestId } = renderDataStreams(); + expect(getByTestId('addDataStreamButton')).toBeDisabled(); + }); + + it('disables add data stream when description is empty', () => { + mockUseIntegrationForm.mockReturnValue({ + formData: { title: 'Has title', description: ' ' }, + }); + mockUseGetIntegrationById.mockReturnValue({ + integration: undefined, + isLoading: false, + }); + + const { getByTestId } = renderDataStreams(); + expect(getByTestId('addDataStreamButton')).toBeDisabled(); + }); + + it('enables add data stream when name and description are set', () => { + mockUseIntegrationForm.mockReturnValue({ + formData: { title: 'My integration', description: 'A description' }, + }); + mockUseGetIntegrationById.mockReturnValue({ + integration: undefined, + isLoading: false, + }); + + const { getByTestId } = renderDataStreams(); + expect(getByTestId('addDataStreamButton')).not.toBeDisabled(); + }); + + it('does not open flyout when add button is disabled on create page', () => { + mockUseIntegrationForm.mockReturnValue({ + formData: { title: '', description: '' }, + }); + mockUseGetIntegrationById.mockReturnValue({ + integration: undefined, + isLoading: false, + }); + + const { getByTestId, queryByTestId } = renderDataStreams(); + + fireEvent.click(getByTestId('addDataStreamButton')); + expect(queryByTestId('createDataStreamFlyoutMock')).not.toBeInTheDocument(); + expect(mockReportDataStreamFlyoutOpened).not.toHaveBeenCalled(); + }); + }); }); diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.tsx index a5b83a6a99656..d9ca196bfdab3 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/data_streams.tsx @@ -11,8 +11,9 @@ import { EuiHorizontalRule, EuiSpacer, EuiText, + EuiToolTip, } from '@elastic/eui'; -import React, { useCallback } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { useParams } from 'react-router-dom'; import { useUIState } from '../../contexts'; import { CreateDataStreamFlyout } from './create_data_stream_flyout'; @@ -21,6 +22,7 @@ import { useGetIntegrationById } from '../../../../common'; import { DataStreamsTable } from './data_streams_table/data_steams_table'; import { EditPipelineFlyout } from './edit_pipeline_flyout'; import { useTelemetry } from '../../../telemetry_context'; +import { useIntegrationForm } from '../../forms/integration_form'; export const DataStreams = React.memo<{ integrationId?: string }>(() => { const { @@ -34,9 +36,19 @@ export const DataStreams = React.memo<{ integrationId?: string }>(() => { const { integrationId } = useParams<{ integrationId?: string }>(); const { integration } = useGetIntegrationById(integrationId); const { reportDataStreamFlyoutOpened } = useTelemetry(); + const { formData } = useIntegrationForm(); const hasDataStreams = (integration?.dataStreams?.length ?? 0) > 0; + const isCreateIntegrationPage = !integrationId; + + const canAddDataStream = useMemo(() => { + if (!isCreateIntegrationPage) { + return true; + } + return Boolean(formData?.title?.trim()) && Boolean(formData?.description?.trim()); + }, [formData?.description, formData?.title, isCreateIntegrationPage]); + const handleOpenCreateDataStreamFlyout = useCallback(() => { openCreateDataStreamFlyout(); reportDataStreamFlyoutOpened({ @@ -44,6 +56,34 @@ export const DataStreams = React.memo<{ integrationId?: string }>(() => { }); }, [hasDataStreams, reportDataStreamFlyoutOpened, openCreateDataStreamFlyout]); + const renderAddDataStreamButton = useCallback( + (layout: 'header' | 'zeroState') => { + const button = ( + + {i18n.ADD_DATA_STREAM_BUTTON} + + ); + + if (canAddDataStream) { + return layout === 'zeroState' ? {button} : button; + } + + const wrapped = ( + + {button} + + ); + + return layout === 'zeroState' ? {wrapped} : wrapped; + }, + [canAddDataStream, handleOpenCreateDataStreamFlyout] + ); + return ( <> @@ -60,15 +100,7 @@ export const DataStreams = React.memo<{ integrationId?: string }>(() => { - {hasDataStreams && ( - - {i18n.ADD_DATA_STREAM_BUTTON} - - )} + {hasDataStreams && renderAddDataStreamButton('header')} @@ -81,15 +113,7 @@ export const DataStreams = React.memo<{ integrationId?: string }>(() => { {i18n.ZERO_STATE_DESCRIPTION} - - - {i18n.ADD_DATA_STREAM_BUTTON} - - + {renderAddDataStreamButton('zeroState')} )} diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/translations.ts b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/translations.ts index d57008dd71386..8696c41073705 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/translations.ts +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/integration_management/management_contents/data_streams/translations.ts @@ -14,6 +14,13 @@ export const ADD_DATA_STREAM_BUTTON = i18n.translate( } ); +export const ADD_DATA_STREAM_DISABLED_TOOLTIP = i18n.translate( + 'xpack.automaticImportV2.dataStreams.addDataStreamDisabledTooltip', + { + defaultMessage: 'Enter an integration name and description before adding a data stream.', + } +); + export const DATA_STREAMS_TITLE = i18n.translate( 'xpack.automaticImportV2.dataStreams.dataStreamsTitle', { @@ -78,6 +85,13 @@ export const LOGS_SECTION_DESCRIPTION = i18n.translate( } ); +export const LOG_SAMPLE_REQUIRED_FOR_ANALYSIS = i18n.translate( + 'xpack.automaticImportV2.dataStreams.logSampleRequiredForAnalysis', + { + defaultMessage: 'Log sample is required for analysis', + } +); + export const AI_ANALYSIS_CALLOUT = i18n.translate( 'xpack.automaticImportV2.dataStreams.aiAnalysisCallout', { @@ -118,6 +132,13 @@ export const ANALYZE_LOGS_BUTTON = i18n.translate( } ); +export const ANALYZE_LOGS_DISABLED_LOADING = i18n.translate( + 'xpack.automaticImportV2.dataStreams.analyzeLogsDisabledLoading', + { + defaultMessage: 'Please wait for the current operation to finish.', + } +); + export const CREATE_DATA_STREAM_ERROR = i18n.translate( 'xpack.automaticImportV2.dataStreams.createDataStreamError', { diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.test.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.test.tsx index 7ba30eea20b62..bcb2189a30e64 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.test.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.test.tsx @@ -195,19 +195,6 @@ describe('useTelemetry', () => { ); }); - it('reportIntegrationDeleteConfirmed calls reportEvent', () => { - const { result } = renderHook(() => useTelemetry(), { wrapper }); - - act(() => { - result.current.reportIntegrationDeleteConfirmed(); - }); - - expect(mockReportEvent).toHaveBeenCalledWith( - AIV2TelemetryEventType.IntegrationDeleteConfirmed, - expect.objectContaining({ sessionId: expect.any(String) }) - ); - }); - it('reportDataStreamRefreshConfirmed calls reportEvent', () => { const { result } = renderHook(() => useTelemetry(), { wrapper }); diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.tsx b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.tsx index ec003046d7350..77c1550651d6a 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.tsx +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/components/telemetry_context.tsx @@ -26,8 +26,6 @@ type ReportDoneButtonClicked = () => void; type ReportDataStreamDeleteConfirmed = () => void; -type ReportIntegrationDeleteConfirmed = () => void; - type ReportDataStreamRefreshConfirmed = () => void; type ReportPipelineEdited = (params: { @@ -46,7 +44,6 @@ interface TelemetryContextProps { reportCancelButtonClicked: ReportCancelButtonClicked; reportDoneButtonClicked: ReportDoneButtonClicked; reportDataStreamDeleteConfirmed: ReportDataStreamDeleteConfirmed; - reportIntegrationDeleteConfirmed: ReportIntegrationDeleteConfirmed; reportDataStreamRefreshConfirmed: ReportDataStreamRefreshConfirmed; reportPipelineEdited: ReportPipelineEdited; } @@ -61,7 +58,6 @@ const defaultTelemetryContext: TelemetryContextProps = { reportCancelButtonClicked: () => {}, reportDoneButtonClicked: () => {}, reportDataStreamDeleteConfirmed: () => {}, - reportIntegrationDeleteConfirmed: () => {}, reportDataStreamRefreshConfirmed: () => {}, reportPipelineEdited: () => {}, }; @@ -144,12 +140,6 @@ export const TelemetryContextProvider = React.memo>(({ chi }); }, [telemetry]); - const reportIntegrationDeleteConfirmed = useCallback(() => { - telemetry?.reportEvent(AIV2TelemetryEventType.IntegrationDeleteConfirmed, { - sessionId: sessionData.current.sessionId, - }); - }, [telemetry]); - const reportDataStreamRefreshConfirmed = useCallback(() => { telemetry?.reportEvent(AIV2TelemetryEventType.DataStreamRefreshConfirmed, { sessionId: sessionData.current.sessionId, @@ -179,7 +169,6 @@ export const TelemetryContextProvider = React.memo>(({ chi reportCancelButtonClicked, reportDoneButtonClicked, reportDataStreamDeleteConfirmed, - reportIntegrationDeleteConfirmed, reportDataStreamRefreshConfirmed, reportPipelineEdited, }), @@ -192,7 +181,6 @@ export const TelemetryContextProvider = React.memo>(({ chi reportCancelButtonClicked, reportDoneButtonClicked, reportDataStreamDeleteConfirmed, - reportIntegrationDeleteConfirmed, reportDataStreamRefreshConfirmed, reportPipelineEdited, ] diff --git a/x-pack/platform/plugins/shared/automatic_import_v2/public/services/telemetry/events.ts b/x-pack/platform/plugins/shared/automatic_import_v2/public/services/telemetry/events.ts index 6234efb8128a3..c5f2954987458 100644 --- a/x-pack/platform/plugins/shared/automatic_import_v2/public/services/telemetry/events.ts +++ b/x-pack/platform/plugins/shared/automatic_import_v2/public/services/telemetry/events.ts @@ -115,15 +115,6 @@ export const telemetryEventsSchemas: Partial { setIsDeleting(true); - (automaticImportVTwo?.telemetry as AIV2Telemetry)?.reportEvent( - 'aiv2_integration_delete_confirmed', - {} - ); try { await onDelete(integration.integrationId); } finally { setIsDeleting(false); setShowDeleteConfirm(false); } - }, [onDelete, integration.integrationId, automaticImportVTwo]); + }, [onDelete, integration.integrationId]); const openReviewModal = useCallback(() => { setIsPopoverOpen(false); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/browse_integrations/components/manage_integrations_table.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/browse_integrations/components/manage_integrations_table.tsx index 4fc2b585a9c7d..77adfce903692 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/browse_integrations/components/manage_integrations_table.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/browse_integrations/components/manage_integrations_table.tsx @@ -222,10 +222,6 @@ export const ManageIntegrationsTable: React.FC<{ `/api/automatic_import_v2/integrations/${encodeURIComponent(integrationId)}`, { version: '1' } ); - (automaticImportVTwo?.telemetry as AIV2Telemetry)?.reportEvent( - 'aiv2_integration_delete_confirmed', - {} - ); notifications.toasts.addSuccess({ title: i18n.translate( 'xpack.fleet.epmList.manageIntegrations.actions.deleteSuccessTitle', @@ -242,7 +238,7 @@ export const ManageIntegrationsTable: React.FC<{ throw error; } }, - [http, notifications, onRefetch, automaticImportVTwo] + [http, notifications, onRefetch] ); const fetchIntegrationReviewDetails = useCallback(