From 29bbdf6982b52ab5e007fce63dc6d8e121c627a6 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 16 Apr 2024 22:44:12 +0200 Subject: [PATCH 01/12] refactor: move initialAnalysisStart to 'global' state. --- x-pack/packages/ml/aiops_components/index.ts | 1 + .../document_count_chart.tsx | 10 +++- .../src/document_count_chart/index.ts | 5 +- .../log_rate_analysis_state_provider/index.ts | 12 +++++ .../log_rate_analysis_state_provider.tsx} | 47 +++++++++++++------ .../types.ts | 0 .../document_count_content.tsx | 12 ++--- .../log_rate_analysis_app_state.tsx | 7 ++- .../log_rate_analysis_content.tsx | 17 +++---- .../log_rate_analysis_content_wrapper.tsx | 7 ++- .../log_rate_analysis_page.tsx | 15 ++++-- .../log_rate_analysis_results.tsx | 4 +- .../log_rate_analysis_results_table.tsx | 4 +- ...log_rate_analysis_results_table_groups.tsx | 8 ++-- 14 files changed, 97 insertions(+), 52 deletions(-) create mode 100644 x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts rename x-pack/{plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider.tsx => packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx} (67%) rename x-pack/{plugins/aiops/public/components/log_rate_analysis_results_table => packages/ml/aiops_components/src/log_rate_analysis_state_provider}/types.ts (100%) diff --git a/x-pack/packages/ml/aiops_components/index.ts b/x-pack/packages/ml/aiops_components/index.ts index c9ca50ad0daffa..d1921ba069b5f4 100644 --- a/x-pack/packages/ml/aiops_components/index.ts +++ b/x-pack/packages/ml/aiops_components/index.ts @@ -9,6 +9,7 @@ export { DualBrush, DualBrushAnnotation } from './src/dual_brush'; export { ProgressControls } from './src/progress_controls'; export { DocumentCountChart, + DocumentCountChartWithAutoAnalysisStart, type BrushSettings, type BrushSelectionUpdateHandler, } from './src/document_count_chart'; diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx index 57139ddd0a1fec..8c4effde880410 100644 --- a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx +++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx @@ -40,6 +40,8 @@ import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { DualBrush, DualBrushAnnotation } from '../..'; +import { useLogRateAnalysisStateContext } from '../log_rate_analysis_state_provider'; + import { BrushBadge } from './brush_badge'; declare global { @@ -120,7 +122,7 @@ export interface DocumentCountChartProps { isBrushCleared: boolean; /** Timestamp for start of initial analysis */ autoAnalysisStart?: number | WindowParameters; - /** Optional style to override bar chart */ + /** Optional style to override bar chart */ barStyleAccessor?: BarStyleAccessor; /** Optional color override for the default bar color for charts */ barColorOverride?: string; @@ -535,3 +537,9 @@ export const DocumentCountChart: FC = (props) => { ); }; + +export const DocumentCountChartWithAutoAnalysisStart: FC = (props) => { + const { initialAnalysisStart } = useLogRateAnalysisStateContext(); + + return ; +}; diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/index.ts b/x-pack/packages/ml/aiops_components/src/document_count_chart/index.ts index 5b64acedbf5f65..efde8b0a83cbad 100644 --- a/x-pack/packages/ml/aiops_components/src/document_count_chart/index.ts +++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/index.ts @@ -5,7 +5,10 @@ * 2.0. */ -export { DocumentCountChart } from './document_count_chart'; +export { + DocumentCountChart, + DocumentCountChartWithAutoAnalysisStart, +} from './document_count_chart'; export type { BrushSelectionUpdateHandler, BrushSettings, diff --git a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts new file mode 100644 index 00000000000000..4f57626aa48a25 --- /dev/null +++ b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { + useLogRateAnalysisStateContext, + LogRateAnalysisStateProvider, +} from './log_rate_analysis_state_provider'; +export type { GroupTableItem } from './types'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider.tsx b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx similarity index 67% rename from x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider.tsx rename to x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx index a7b3398e4e7ccf..401398ae064c5a 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider.tsx +++ b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx @@ -16,13 +16,17 @@ import React, { } from 'react'; import type { SignificantItem } from '@kbn/ml-agg-utils'; +import type { WindowParameters } from '@kbn/aiops-log-rate-analysis'; import type { GroupTableItem } from './types'; +type InitialAnalysisStart = number | WindowParameters | undefined; type SignificantItemOrNull = SignificantItem | null; type GroupOrNull = GroupTableItem | null; -interface LogRateAnalysisResultsTableRow { +interface LogRateAnalysisState { + initialAnalysisStart: InitialAnalysisStart; + setInitialAnalysisStart: Dispatch>; pinnedSignificantItem: SignificantItemOrNull; setPinnedSignificantItem: Dispatch>; pinnedGroup: GroupOrNull; @@ -36,12 +40,23 @@ interface LogRateAnalysisResultsTableRow { clearAllRowState: () => void; } -export const logRateAnalysisResultsTableRowContext = createContext< - LogRateAnalysisResultsTableRow | undefined ->(undefined); +export const logRateAnalysisStateContext = createContext( + undefined +); -export const LogRateAnalysisResultsTableRowStateProvider: FC = ({ children }) => { - // State that will be shared with all components +interface LogRateAnalysisStateProviderProps { + initialAnalysisStart?: InitialAnalysisStart; +} + +export const LogRateAnalysisStateProvider: FC = ({ + children, + initialAnalysisStart: incomingInitialAnalysisStart, +}) => { + const [initialAnalysisStart, setInitialAnalysisStart] = useState< + number | WindowParameters | undefined + >(incomingInitialAnalysisStart); + + // Row state that will be shared with all components const [pinnedSignificantItem, setPinnedSignificantItem] = useState(null); const [pinnedGroup, setPinnedGroup] = useState(null); const [selectedSignificantItem, setSelectedSignificantItem] = @@ -66,8 +81,10 @@ export const LogRateAnalysisResultsTableRowStateProvider: FC = ({ children }) => } }, [selectedGroup, pinnedGroup]); - const contextValue: LogRateAnalysisResultsTableRow = useMemo( + const contextValue: LogRateAnalysisState = useMemo( () => ({ + initialAnalysisStart, + setInitialAnalysisStart, pinnedSignificantItem, setPinnedSignificantItem, pinnedGroup, @@ -86,6 +103,8 @@ export const LogRateAnalysisResultsTableRowStateProvider: FC = ({ children }) => }, }), [ + initialAnalysisStart, + setInitialAnalysisStart, pinnedSignificantItem, setPinnedSignificantItem, pinnedGroup, @@ -101,19 +120,19 @@ export const LogRateAnalysisResultsTableRowStateProvider: FC = ({ children }) => return ( // Provider managing the state - + {children} - + ); }; -export const useLogRateAnalysisResultsTableRowContext = () => { - const logRateAnalysisResultsTableRow = useContext(logRateAnalysisResultsTableRowContext); +export const useLogRateAnalysisStateContext = () => { + const logRateAnalysisState = useContext(logRateAnalysisStateContext); // If `undefined`, throw an error. - if (logRateAnalysisResultsTableRow === undefined) { - throw new Error('useLogRateAnalysisResultsTableRowContext was used outside of its Provider'); + if (logRateAnalysisState === undefined) { + throw new Error('useLogRateAnalysisStateContext was used outside of its Provider'); } - return logRateAnalysisResultsTableRow; + return logRateAnalysisState; }; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/types.ts b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts similarity index 100% rename from x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/types.ts rename to x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts diff --git a/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx b/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx index 3ccf2bbbbfd2c8..6a13d705cc9189 100644 --- a/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx +++ b/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx @@ -14,7 +14,10 @@ import type { } from '@elastic/charts/dist/chart_types/xy_chart/utils/specs'; import type { LogRateHistogramItem, WindowParameters } from '@kbn/aiops-log-rate-analysis'; -import { DocumentCountChart, type BrushSelectionUpdateHandler } from '@kbn/aiops-components'; +import { + DocumentCountChartWithAutoAnalysisStart, + type BrushSelectionUpdateHandler, +} from '@kbn/aiops-components'; import { useAiopsAppContext } from '../../../hooks/use_aiops_app_context'; import type { DocumentCountStats } from '../../../get_document_stats'; @@ -29,13 +32,11 @@ export interface DocumentCountContentProps { isBrushCleared: boolean; totalCount: number; sampleProbability: number; - initialAnalysisStart?: number | WindowParameters; /** Optional color override for the default bar color for charts */ barColorOverride?: string; /** Optional color override for the highlighted bar color for charts */ barHighlightColorOverride?: string; windowParameters?: WindowParameters; - incomingInitialAnalysisStart?: number | WindowParameters; baselineLabel?: string; deviationLabel?: string; barStyleAccessor?: BarStyleAccessor; @@ -51,11 +52,9 @@ export const DocumentCountContent: FC = ({ isBrushCleared, totalCount, sampleProbability, - initialAnalysisStart, barColorOverride, barHighlightColorOverride, windowParameters, - incomingInitialAnalysisStart, ...docCountChartProps }) => { const { data, uiSettings, fieldFormats, charts } = useAiopsAppContext(); @@ -100,7 +99,7 @@ export const DocumentCountContent: FC = ({ {documentCountStats.interval !== undefined && ( - = ({ interval={documentCountStats.interval} chartPointsSplitLabel={documentCountStatsSplitLabel} isBrushCleared={isBrushCleared} - autoAnalysisStart={initialAnalysisStart} barColorOverride={barColorOverride} barHighlightColorOverride={barHighlightColorOverride} changePoint={documentCountStats.changePoint} diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx index 7de8b5f91d61e3..dd6a82a159c8c5 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx @@ -17,13 +17,12 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; import { DatePickerContextProvider, type DatePickerDependencies } from '@kbn/ml-date-picker'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; +import { LogRateAnalysisStateProvider } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; import type { AiopsAppDependencies } from '../../hooks/use_aiops_app_context'; import { AiopsAppContext } from '../../hooks/use_aiops_app_context'; import { DataSourceContext } from '../../hooks/use_data_source'; import { AIOPS_STORAGE_KEYS } from '../../types/storage'; -import { LogRateAnalysisResultsTableRowStateProvider } from '../log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider'; - import { LogRateAnalysisPage } from './log_rate_analysis_page'; import { timeSeriesDataViewWarning } from '../../application/utils/time_series_dataview_check'; @@ -70,13 +69,13 @@ export const LogRateAnalysisAppState: FC = ({ - + - + diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index abcffc3ebe86d4..d7cbe49b843d0c 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -26,6 +26,10 @@ import { type WindowParameters, } from '@kbn/aiops-log-rate-analysis'; import type { SignificantItem } from '@kbn/ml-agg-utils'; +import { + useLogRateAnalysisStateContext, + type GroupTableItem, +} from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; import { useData } from '../../../hooks/use_data'; @@ -34,8 +38,6 @@ import { LogRateAnalysisResults, type LogRateAnalysisResultsData, } from '../log_rate_analysis_results'; -import type { GroupTableItem } from '../../log_rate_analysis_results_table/types'; -import { useLogRateAnalysisResultsTableRowContext } from '../../log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider'; const DEFAULT_SEARCH_QUERY: estypes.QueryDslQueryContainer = { match_all: {} }; const DEFAULT_SEARCH_BAR_QUERY: estypes.QueryDslQueryContainer = { @@ -66,8 +68,6 @@ export function getDocumentCountStatsSplitLabel( export interface LogRateAnalysisContentProps { /** The data view to analyze. */ dataView: DataView; - /** Timestamp for the start of the range for initial analysis */ - initialAnalysisStart?: number | WindowParameters; timeRange?: { min: Moment; max: Moment }; /** Elasticsearch query to pass to analysis endpoint */ esSearchQuery?: estypes.QueryDslQueryContainer; @@ -87,7 +87,6 @@ export interface LogRateAnalysisContentProps { export const LogRateAnalysisContent: FC = ({ dataView, - initialAnalysisStart: incomingInitialAnalysisStart, timeRange, esSearchQuery = DEFAULT_SEARCH_QUERY, stickyHistogram, @@ -98,9 +97,6 @@ export const LogRateAnalysisContent: FC = ({ embeddingOrigin, }) => { const [windowParameters, setWindowParameters] = useState(); - const [initialAnalysisStart, setInitialAnalysisStart] = useState< - number | WindowParameters | undefined - >(incomingInitialAnalysisStart); const [isBrushCleared, setIsBrushCleared] = useState(true); const [logRateAnalysisType, setLogRateAnalysisType] = useState( LOG_RATE_ANALYSIS_TYPE.SPIKE @@ -142,11 +138,12 @@ export const LogRateAnalysisContent: FC = ({ const { currentSelectedSignificantItem, currentSelectedGroup, + setInitialAnalysisStart, setPinnedSignificantItem, setPinnedGroup, setSelectedSignificantItem, setSelectedGroup, - } = useLogRateAnalysisResultsTableRowContext(); + } = useLogRateAnalysisStateContext(); const { documentStats, earliest, latest } = useData( dataView, @@ -225,6 +222,7 @@ export const LogRateAnalysisContent: FC = ({ setInitialAnalysisStart(wpSnap); } } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [documentCountStats]); return ( @@ -241,7 +239,6 @@ export const LogRateAnalysisContent: FC = ({ isBrushCleared={isBrushCleared} totalCount={totalCount} sampleProbability={sampleProbability} - initialAnalysisStart={initialAnalysisStart} barColorOverride={barColorOverride} barHighlightColorOverride={barHighlightColorOverride} barStyleAccessor={barStyleAccessor} diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx index 8655256b4da8d8..e6847284a248b2 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx @@ -18,13 +18,13 @@ import { UrlStateProvider } from '@kbn/ml-url-state'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { DatePickerContextProvider } from '@kbn/ml-date-picker'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; +import { LogRateAnalysisStateProvider } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; import { timeSeriesDataViewWarning } from '../../../application/utils/time_series_dataview_check'; import { AiopsAppContext, type AiopsAppDependencies } from '../../../hooks/use_aiops_app_context'; import { DataSourceContext } from '../../../hooks/use_data_source'; import { AIOPS_STORAGE_KEYS } from '../../../types/storage'; -import { LogRateAnalysisResultsTableRowStateProvider } from '../../log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider'; import { LogRateAnalysisContent } from './log_rate_analysis_content'; import type { LogRateAnalysisResultsData } from '../log_rate_analysis_results'; @@ -92,12 +92,11 @@ export const LogRateAnalysisContentWrapper: FC - + - + diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx index 90227fd7915a09..ee1553be06705b 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx @@ -18,6 +18,7 @@ import { useUrlState, usePageUrlState } from '@kbn/ml-url-state'; import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; import type { WindowParameters } from '@kbn/aiops-log-rate-analysis'; import { AIOPS_TELEMETRY_ID } from '@kbn/aiops-common/constants'; +import { useLogRateAnalysisStateContext } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; import { useDataSource } from '../../hooks/use_data_source'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; @@ -31,7 +32,6 @@ import { } from '../../application/url_state/log_rate_analysis'; import { SearchPanel } from '../search_panel'; -import { useLogRateAnalysisResultsTableRowContext } from '../log_rate_analysis_results_table/log_rate_analysis_results_table_row_provider'; import { PageHeader } from '../page_header'; import { LogRateAnalysisContent } from './log_rate_analysis_content/log_rate_analysis_content'; @@ -43,8 +43,8 @@ export const LogRateAnalysisPage: FC = ({ stickyHistogram }) => { const { data: dataService } = useAiopsAppContext(); const { dataView, savedSearch } = useDataSource(); - const { currentSelectedSignificantItem, currentSelectedGroup } = - useLogRateAnalysisResultsTableRowContext(); + const { currentSelectedSignificantItem, currentSelectedGroup, setInitialAnalysisStart } = + useLogRateAnalysisStateContext(); const [stateFromUrl, setUrlState] = usePageUrlState( 'logRateAnalysis', @@ -142,6 +142,14 @@ export const LogRateAnalysisPage: FC = ({ stickyHistogram }) => { }); }, [dataService, searchQueryLanguage, searchString]); + useEffect( + () => { + setInitialAnalysisStart(appStateToWindowParameters(stateFromUrl.wp)); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [JSON.stringify(stateFromUrl.wp)] + ); + const onWindowParametersHandler = (wp?: WindowParameters, replace = false) => { if (!isEqual(windowParametersToAppState(wp), stateFromUrl.wp)) { setUrlState( @@ -169,7 +177,6 @@ export const LogRateAnalysisPage: FC = ({ stickyHistogram }) => { /> = ({ // to be able to track it across rerenders. const analysisStartTime = useRef(window.performance.now()); - const { clearAllRowState } = useLogRateAnalysisResultsTableRowContext(); + const { clearAllRowState } = useLogRateAnalysisStateContext(); const [currentAnalysisType, setCurrentAnalysisType] = useState(); const [currentAnalysisWindowParameters, setCurrentAnalysisWindowParameters] = useState< diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx index e19663e064d63f..5156dd323fe709 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx @@ -32,13 +32,13 @@ import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; import { getCategoryQuery } from '@kbn/aiops-log-pattern-analysis/get_category_query'; +import { useLogRateAnalysisStateContext } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; import { useEuiTheme } from '../../hooks/use_eui_theme'; import { MiniHistogram } from '../mini_histogram'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import { getFailedTransactionsCorrelationImpactLabel } from './get_failed_transactions_correlation_impact_label'; -import { useLogRateAnalysisResultsTableRowContext } from './log_rate_analysis_results_table_row_provider'; import { FieldStatsPopover } from '../field_stats_popover'; import { useCopyToClipboardAction } from './use_copy_to_clipboard_action'; import { useViewInDiscoverAction } from './use_view_in_discover_action'; @@ -93,7 +93,7 @@ export const LogRateAnalysisResultsTable: FC = selectedSignificantItem, setPinnedSignificantItem, setSelectedSignificantItem, - } = useLogRateAnalysisResultsTableRowContext(); + } = useLogRateAnalysisStateContext(); const [pageIndex, setPageIndex] = useState(0); const [pageSize, setPageSize] = useState(10); diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx index cf3afc2720665a..214898029aaef4 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx @@ -32,13 +32,15 @@ import type { SignificantItem } from '@kbn/ml-agg-utils'; import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; import type { DataView } from '@kbn/data-views-plugin/public'; import { stringHash } from '@kbn/ml-string-hash'; +import { + useLogRateAnalysisStateContext, + type GroupTableItem, +} from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; import { MiniHistogram } from '../mini_histogram'; import { getFailedTransactionsCorrelationImpactLabel } from './get_failed_transactions_correlation_impact_label'; import { LogRateAnalysisResultsTable } from './log_rate_analysis_results_table'; -import { useLogRateAnalysisResultsTableRowContext } from './log_rate_analysis_results_table_row_provider'; -import type { GroupTableItem } from './types'; import { useCopyToClipboardAction } from './use_copy_to_clipboard_action'; import { useViewInDiscoverAction } from './use_view_in_discover_action'; import { useViewInLogPatternAnalysisAction } from './use_view_in_log_pattern_analysis_action'; @@ -97,7 +99,7 @@ export const LogRateAnalysisResultsGroupsTable: FC { From fef9a87a2dbd8e4d4978a0ac04e7adf8e7f11769 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 16 Apr 2024 23:38:44 +0200 Subject: [PATCH 02/12] do not auto-run analysis when not clicking on a highlighted change point area --- .../document_count_chart.tsx | 23 ++++- .../log_rate_analysis_state_provider.tsx | 7 ++ .../log_rate_analysis_content.tsx | 88 ++++++++++++++----- 3 files changed, 94 insertions(+), 24 deletions(-) diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx index 8c4effde880410..742e5b8f239f77 100644 --- a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx +++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx @@ -120,6 +120,8 @@ export interface DocumentCountChartProps { chartPointsSplitLabel: string; /** Whether or not brush has been reset */ isBrushCleared: boolean; + /** Callback to set the autoRunAnalysis flag */ + setAutoRunAnalysis?: (d: boolean) => void; /** Timestamp for start of initial analysis */ autoAnalysisStart?: number | WindowParameters; /** Optional style to override bar chart */ @@ -183,6 +185,7 @@ export const DocumentCountChart: FC = (props) => { interval, chartPointsSplitLabel, isBrushCleared, + setAutoRunAnalysis, autoAnalysisStart, barColorOverride, barStyleAccessor, @@ -307,6 +310,15 @@ export const DocumentCountChart: FC = (props) => { windowParameters === undefined && adjustedChartPoints !== undefined ) { + if (setAutoRunAnalysis) { + setAutoRunAnalysis( + typeof startRange === 'number' && + changePoint !== undefined && + startRange >= changePoint.startTs && + startRange <= changePoint.endTs + ); + } + const wp = getWindowParametersForTrigger( startRange, interval, @@ -335,6 +347,7 @@ export const DocumentCountChart: FC = (props) => { timeRangeLatest, snapTimestamps, originalWindowParameters, + setAutoRunAnalysis, setWindowParameters, brushSelectionUpdateHandler, adjustedChartPoints, @@ -539,7 +552,13 @@ export const DocumentCountChart: FC = (props) => { }; export const DocumentCountChartWithAutoAnalysisStart: FC = (props) => { - const { initialAnalysisStart } = useLogRateAnalysisStateContext(); + const { initialAnalysisStart, setAutoRunAnalysis } = useLogRateAnalysisStateContext(); - return ; + return ( + + ); }; diff --git a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx index 401398ae064c5a..7e320f28f62fe5 100644 --- a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx +++ b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx @@ -25,6 +25,8 @@ type SignificantItemOrNull = SignificantItem | null; type GroupOrNull = GroupTableItem | null; interface LogRateAnalysisState { + autoRunAnalysis: boolean; + setAutoRunAnalysis: Dispatch>; initialAnalysisStart: InitialAnalysisStart; setInitialAnalysisStart: Dispatch>; pinnedSignificantItem: SignificantItemOrNull; @@ -52,6 +54,7 @@ export const LogRateAnalysisStateProvider: FC children, initialAnalysisStart: incomingInitialAnalysisStart, }) => { + const [autoRunAnalysis, setAutoRunAnalysis] = useState(true); const [initialAnalysisStart, setInitialAnalysisStart] = useState< number | WindowParameters | undefined >(incomingInitialAnalysisStart); @@ -83,6 +86,8 @@ export const LogRateAnalysisStateProvider: FC const contextValue: LogRateAnalysisState = useMemo( () => ({ + autoRunAnalysis, + setAutoRunAnalysis, initialAnalysisStart, setInitialAnalysisStart, pinnedSignificantItem, @@ -103,6 +108,8 @@ export const LogRateAnalysisStateProvider: FC }, }), [ + autoRunAnalysis, + setAutoRunAnalysis, initialAnalysisStart, setInitialAnalysisStart, pinnedSignificantItem, diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index d7cbe49b843d0c..7757d5cada8f3d 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -136,8 +136,11 @@ export const LogRateAnalysisContent: FC = ({ ); const { + initialAnalysisStart, + autoRunAnalysis, currentSelectedSignificantItem, currentSelectedGroup, + setAutoRunAnalysis, setInitialAnalysisStart, setPinnedSignificantItem, setPinnedGroup, @@ -203,7 +206,11 @@ export const LogRateAnalysisContent: FC = ({ } : undefined; - const triggerAnalysis = useCallback(() => { + const triggerAnalysisForManualSelection = useCallback(() => { + setAutoRunAnalysis(true); + }, [setAutoRunAnalysis]); + + const triggerAnalysisForChangePoint = useCallback(() => { if (documentCountStats) { const { interval, timeRangeEarliest, timeRangeLatest, changePoint } = documentCountStats; @@ -219,6 +226,7 @@ export const LogRateAnalysisContent: FC = ({ const snapTimestamps = getSnappedTimestamps(timeRangeEarliest, timeRangeLatest, interval); const wpSnap = getSnappedWindowParameters(wp, snapTimestamps); + setAutoRunAnalysis(true); setInitialAnalysisStart(wpSnap); } } @@ -245,24 +253,60 @@ export const LogRateAnalysisContent: FC = ({ /> )} - {earliest !== undefined && latest !== undefined && windowParameters !== undefined && ( - - )} + {autoRunAnalysis && + earliest !== undefined && + latest !== undefined && + windowParameters !== undefined && ( + + )} + {!autoRunAnalysis && + earliest !== undefined && + latest !== undefined && + windowParameters !== undefined && ( + +

+ +

+ + + + + } + data-test-subj="aiopsChangePointDetectedPrompt" + /> + )} {windowParameters === undefined && documentCountStats?.changePoint && ( = ({

= ({

} From f0ea07182ab9e072e31c6740977953c96052322c Mon Sep 17 00:00:00 2001 From: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:45:55 +0000 Subject: [PATCH 03/12] [CI] Auto-commit changed files from 'node scripts/lint_ts_projects --fix' --- x-pack/packages/ml/aiops_components/tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/packages/ml/aiops_components/tsconfig.json b/x-pack/packages/ml/aiops_components/tsconfig.json index 3fba5d38f9fc12..23cf9e9d60d4b6 100644 --- a/x-pack/packages/ml/aiops_components/tsconfig.json +++ b/x-pack/packages/ml/aiops_components/tsconfig.json @@ -27,6 +27,7 @@ "@kbn/field-formats-plugin", "@kbn/visualization-utils", "@kbn/aiops-log-rate-analysis", + "@kbn/ml-agg-utils", ], "exclude": [ "target/**/*", From a66a532616af15cc86d52e15b50882121a2c6da2 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 17 Apr 2024 09:24:37 +0200 Subject: [PATCH 04/12] fix imports --- .../utils/build_extended_base_filter_criteria.test.ts | 3 +-- .../utils/build_extended_base_filter_criteria.ts | 3 +-- .../log_rate_analysis_content.tsx | 1 - .../get_group_table_items.ts | 6 ++++-- .../get_table_item_as_kql.ts | 3 +-- .../use_copy_to_clipboard_action.test.tsx | 2 +- .../use_copy_to_clipboard_action.tsx | 5 ++++- .../use_view_in_discover_action.tsx | 7 +++++-- .../use_view_in_log_pattern_analysis_action.tsx | 5 ++++- x-pack/plugins/aiops/public/get_document_stats.ts | 2 +- x-pack/plugins/aiops/public/hooks/use_data.ts | 2 +- 11 files changed, 23 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts index bdc1336fc94410..dff010ac30b436 100644 --- a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts +++ b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts @@ -6,8 +6,7 @@ */ import type { SignificantItem } from '@kbn/ml-agg-utils'; - -import type { GroupTableItem } from '../../components/log_rate_analysis_results_table/types'; +import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; import { buildExtendedBaseFilterCriteria } from './build_extended_base_filter_criteria'; diff --git a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts index 91709b9bd91a1c..06e8fded906a3f 100644 --- a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts +++ b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts @@ -14,8 +14,7 @@ import type { Query } from '@kbn/es-query'; import { type SignificantItem, SIGNIFICANT_ITEM_TYPE } from '@kbn/ml-agg-utils'; import { buildBaseFilterCriteria } from '@kbn/ml-query-utils'; import { getCategoryQuery } from '@kbn/aiops-log-pattern-analysis/get_category_query'; - -import type { GroupTableItem } from '../../components/log_rate_analysis_results_table/types'; +import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; /* * Contains utility functions for building and processing queries. diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index 7757d5cada8f3d..174c5d9642a851 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -136,7 +136,6 @@ export const LogRateAnalysisContent: FC = ({ ); const { - initialAnalysisStart, autoRunAnalysis, currentSelectedSignificantItem, currentSelectedGroup, diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts index 6767b824449460..db85bd27c17632 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts @@ -8,8 +8,10 @@ import { sortBy } from 'lodash'; import type { SignificantItemGroup } from '@kbn/ml-agg-utils'; - -import type { GroupTableItem, GroupTableItemGroup } from './types'; +import type { + GroupTableItem, + GroupTableItemGroup, +} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; export function getGroupTableItems( significantItemsGroups: SignificantItemGroup[] diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts index 97717d43cb1213..54e3a14e227d1a 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts @@ -7,8 +7,7 @@ import { escapeKuery, escapeQuotes } from '@kbn/es-query'; import { isSignificantItem, type SignificantItem } from '@kbn/ml-agg-utils'; - -import type { GroupTableItem } from './types'; +import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; export const getTableItemAsKQL = (tableItem: GroupTableItem | SignificantItem) => { if (isSignificantItem(tableItem)) { diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx index 8e3b68f4ec2791..b8527ecd4e8a71 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx @@ -14,10 +14,10 @@ import type { SignificantItem } from '@kbn/ml-agg-utils'; import { finalSignificantItemGroups } from '@kbn/aiops-test-utils/artificial_logs/final_significant_item_groups'; import { significantTerms } from '@kbn/aiops-test-utils/artificial_logs/significant_terms'; +import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; import { getGroupTableItems } from './get_group_table_items'; import { useCopyToClipboardAction } from './use_copy_to_clipboard_action'; -import type { GroupTableItem } from './types'; interface Action { render: (tableItem: SignificantItem | GroupTableItem) => ReactElement; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx index b7dc328f1a4684..65113724c475a5 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx @@ -11,10 +11,13 @@ import { EuiCopy, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { isSignificantItem, type SignificantItem } from '@kbn/ml-agg-utils'; +import type { + GroupTableItem, + TableItemAction, +} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; import { TableActionButton } from './table_action_button'; import { getTableItemAsKQL } from './get_table_item_as_kql'; -import type { GroupTableItem, TableItemAction } from './types'; const copyToClipboardButtonLabel = i18n.translate( 'xpack.aiops.logRateAnalysis.resultsTable.linksMenu.copyToClipboardButtonLabel', diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx index 7f467ded4c24b7..f91ab695135c8c 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx @@ -9,13 +9,16 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import type { SignificantItem } from '@kbn/ml-agg-utils'; - import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; +import type { + GroupTableItem, + TableItemAction, +} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; + import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import { TableActionButton } from './table_action_button'; import { getTableItemAsKQL } from './get_table_item_as_kql'; -import type { GroupTableItem, TableItemAction } from './types'; const viewInDiscoverMessage = i18n.translate( 'xpack.aiops.logRateAnalysis.resultsTable.linksMenu.viewInDiscover', diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx index 3f75654d4280e0..3804a58748fcb3 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx @@ -11,13 +11,16 @@ import type { SerializableRecord } from '@kbn/utility-types'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { isSignificantItem, type SignificantItem, SIGNIFICANT_ITEM_TYPE } from '@kbn/ml-agg-utils'; +import type { + GroupTableItem, + TableItemAction, +} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import { TableActionButton } from './table_action_button'; import { getTableItemAsKQL } from './get_table_item_as_kql'; -import type { GroupTableItem, TableItemAction } from './types'; const isLogPattern = (tableItem: SignificantItem | GroupTableItem) => isSignificantItem(tableItem) && tableItem.type === SIGNIFICANT_ITEM_TYPE.LOG_PATTERN; diff --git a/x-pack/plugins/aiops/public/get_document_stats.ts b/x-pack/plugins/aiops/public/get_document_stats.ts index f693dc8f67517a..4f0d9679ef3eba 100644 --- a/x-pack/plugins/aiops/public/get_document_stats.ts +++ b/x-pack/plugins/aiops/public/get_document_stats.ts @@ -18,9 +18,9 @@ import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { SignificantItem } from '@kbn/ml-agg-utils'; import type { Query } from '@kbn/es-query'; import type { RandomSamplerWrapper } from '@kbn/ml-random-sampler-utils'; +import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; import { buildExtendedBaseFilterCriteria } from './application/utils/build_extended_base_filter_criteria'; -import type { GroupTableItem } from './components/log_rate_analysis_results_table/types'; export interface DocumentCountStats { interval?: number; diff --git a/x-pack/plugins/aiops/public/hooks/use_data.ts b/x-pack/plugins/aiops/public/hooks/use_data.ts index 64cb69f2dcdd94..acde74d19d6d12 100644 --- a/x-pack/plugins/aiops/public/hooks/use_data.ts +++ b/x-pack/plugins/aiops/public/hooks/use_data.ts @@ -18,9 +18,9 @@ import type { Dictionary } from '@kbn/ml-url-state'; import { mlTimefilterRefresh$, useTimefilter } from '@kbn/ml-date-picker'; import { useTimeBuckets } from '@kbn/ml-time-buckets'; import { AIOPS_PLUGIN_ID } from '@kbn/aiops-common/constants'; +import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; import type { DocumentStatsSearchStrategyParams } from '../get_document_stats'; -import type { GroupTableItem } from '../components/log_rate_analysis_results_table/types'; import { useAiopsAppContext } from './use_aiops_app_context'; From a4fb9a8ec6d2b44cc1fd3896dd2b38657cea8f9e Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 17 Apr 2024 13:58:16 +0200 Subject: [PATCH 05/12] bug fixes and functional test updates --- .../document_count_chart.tsx | 10 ++++++---- .../log_rate_analysis_content.tsx | 19 ++++++++++++++----- .../apps/aiops/log_rate_analysis.ts | 6 ++++++ .../artificial_log_data_view_test_data.ts | 3 +++ .../farequote_data_view_test_data.ts | 1 + ...arequote_data_view_test_data_with_query.ts | 1 + .../kibana_logs_data_view_test_data.ts | 1 + .../apps/aiops/log_rate_analysis_test_data.ts | 8 ++++++++ x-pack/test/functional/apps/aiops/types.ts | 1 + .../services/aiops/log_rate_analysis_page.ts | 14 ++++++++++++++ 10 files changed, 55 insertions(+), 9 deletions(-) diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx index 742e5b8f239f77..6eb19bdba24c8b 100644 --- a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx +++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx @@ -311,12 +311,14 @@ export const DocumentCountChart: FC = (props) => { adjustedChartPoints !== undefined ) { if (setAutoRunAnalysis) { - setAutoRunAnalysis( - typeof startRange === 'number' && + const autoRun = + typeof startRange !== 'number' || + (typeof startRange === 'number' && changePoint !== undefined && startRange >= changePoint.startTs && - startRange <= changePoint.endTs - ); + startRange <= changePoint.endTs); + + setAutoRunAnalysis(autoRun); } const wp = getWindowParametersForTrigger( diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index 174c5d9642a851..4405c9848b03e5 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -229,8 +229,7 @@ export const LogRateAnalysisContent: FC = ({ setInitialAnalysisStart(wpSnap); } } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [documentCountStats]); + }, [documentCountStats, setAutoRunAnalysis, setInitialAnalysisStart]); return ( @@ -289,17 +288,27 @@ export const LogRateAnalysisContent: FC = ({

+ {' '} + clearSelection()} + color="text" + > + } @@ -346,7 +355,7 @@ export const LogRateAnalysisContent: FC = ({

{ function getAnalysisGroupsTable() { if (zeroDocsFallback) { @@ -133,6 +135,7 @@ export const getArtificialLogDataViewTestData = ({ return { suiteTitle: getSuiteTitle(), analysisType, + autoRun, dataGenerator: getDataGenerator(), isSavedSearch: false, sourceIndexOrSavedSearch: getDataGenerator(), diff --git a/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data.ts b/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data.ts index a1e860e55a4930..07b116e544e20c 100644 --- a/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data.ts +++ b/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data.ts @@ -12,6 +12,7 @@ import type { TestData } from '../../types'; export const farequoteDataViewTestData: TestData = { suiteTitle: 'farequote with spike', analysisType: LOG_RATE_ANALYSIS_TYPE.SPIKE, + autoRun: false, dataGenerator: 'farequote_with_spike', isSavedSearch: false, sourceIndexOrSavedSearch: 'ft_farequote', diff --git a/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data_with_query.ts b/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data_with_query.ts index 29d49bbdf8ace5..14e754550f6082 100644 --- a/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data_with_query.ts +++ b/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/farequote_data_view_test_data_with_query.ts @@ -12,6 +12,7 @@ import type { TestData } from '../../types'; export const farequoteDataViewTestDataWithQuery: TestData = { suiteTitle: 'farequote with spike', analysisType: LOG_RATE_ANALYSIS_TYPE.SPIKE, + autoRun: false, dataGenerator: 'farequote_with_spike', isSavedSearch: false, sourceIndexOrSavedSearch: 'ft_farequote', diff --git a/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/kibana_logs_data_view_test_data.ts b/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/kibana_logs_data_view_test_data.ts index 1e4f019ed901fe..4a5f9dddb6f1f8 100644 --- a/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/kibana_logs_data_view_test_data.ts +++ b/x-pack/test/functional/apps/aiops/log_rate_analysis/test_data/kibana_logs_data_view_test_data.ts @@ -13,6 +13,7 @@ import type { TestData } from '../../types'; export const kibanaLogsDataViewTestData: TestData = { suiteTitle: 'kibana sample data logs', analysisType: LOG_RATE_ANALYSIS_TYPE.SPIKE, + autoRun: true, dataGenerator: 'kibana_sample_data_logs', isSavedSearch: false, sourceIndexOrSavedSearch: 'kibana_sample_data_logstsdb', diff --git a/x-pack/test/functional/apps/aiops/log_rate_analysis_test_data.ts b/x-pack/test/functional/apps/aiops/log_rate_analysis_test_data.ts index 2b5ca3e37861e3..8fd0be5fa2b5b2 100644 --- a/x-pack/test/functional/apps/aiops/log_rate_analysis_test_data.ts +++ b/x-pack/test/functional/apps/aiops/log_rate_analysis_test_data.ts @@ -22,40 +22,48 @@ export const logRateAnalysisTestData: TestData[] = [ analysisType: LOG_RATE_ANALYSIS_TYPE.SPIKE, textField: false, zeroDocsFallback: false, + autoRun: false, }), getArtificialLogDataViewTestData({ analysisType: LOG_RATE_ANALYSIS_TYPE.SPIKE, textField: true, zeroDocsFallback: false, + autoRun: false, }), getArtificialLogDataViewTestData({ analysisType: LOG_RATE_ANALYSIS_TYPE.DIP, textField: false, zeroDocsFallback: false, + autoRun: false, }), getArtificialLogDataViewTestData({ analysisType: LOG_RATE_ANALYSIS_TYPE.DIP, textField: true, zeroDocsFallback: false, + autoRun: false, }), getArtificialLogDataViewTestData({ analysisType: LOG_RATE_ANALYSIS_TYPE.SPIKE, textField: true, zeroDocsFallback: true, + autoRun: false, }), getArtificialLogDataViewTestData({ analysisType: LOG_RATE_ANALYSIS_TYPE.SPIKE, textField: false, zeroDocsFallback: true, + autoRun: false, }), getArtificialLogDataViewTestData({ analysisType: LOG_RATE_ANALYSIS_TYPE.DIP, textField: true, zeroDocsFallback: true, + autoRun: false, }), getArtificialLogDataViewTestData({ analysisType: LOG_RATE_ANALYSIS_TYPE.DIP, textField: false, zeroDocsFallback: true, + autoRun: false, }), ]; diff --git a/x-pack/test/functional/apps/aiops/types.ts b/x-pack/test/functional/apps/aiops/types.ts index cb4005dcacde3e..0f8f4a4d07d222 100644 --- a/x-pack/test/functional/apps/aiops/types.ts +++ b/x-pack/test/functional/apps/aiops/types.ts @@ -54,6 +54,7 @@ interface TestDataExpectedWithoutSampleProbability { export interface TestData { suiteTitle: string; analysisType: LogRateAnalysisType; + autoRun: boolean; dataGenerator: LogRateAnalysisDataGenerator; isSavedSearch?: boolean; sourceIndexOrSavedSearch: string; diff --git a/x-pack/test/functional/services/aiops/log_rate_analysis_page.ts b/x-pack/test/functional/services/aiops/log_rate_analysis_page.ts index dde260c408258b..1a33ede2e700c1 100644 --- a/x-pack/test/functional/services/aiops/log_rate_analysis_page.ts +++ b/x-pack/test/functional/services/aiops/log_rate_analysis_page.ts @@ -133,6 +133,16 @@ export function LogRateAnalysisPageProvider({ getService, getPageObject }: FtrPr await this.assertHistogramBrushesExist(); }, + async clickNoAutoRunButton() { + await testSubjects.clickWhenNotDisabledWithoutRetry( + 'aiopsLogRateAnalysisNoAutoRunContentRunAnalysisButton' + ); + + await retry.tryForTime(30 * 1000, async () => { + await testSubjects.missingOrFail('aiopsLogRateAnalysisNoAutoRunContentRunAnalysisButton'); + }); + }, + async clickRerunAnalysisButton(shouldRerun: boolean) { await testSubjects.clickWhenNotDisabledWithoutRetry( `aiopsRerunAnalysisButton${shouldRerun ? ' shouldRerun' : ''}` @@ -250,6 +260,10 @@ export function LogRateAnalysisPageProvider({ getService, getPageObject }: FtrPr ); }, + async assertNoAutoRunButtonExists() { + await testSubjects.existOrFail('aiopsLogRateAnalysisNoAutoRunContentRunAnalysisButton'); + }, + async assertProgressTitle(expectedProgressTitle: string) { await retry.tryForTime(30 * 1000, async () => { await testSubjects.existOrFail('aiopProgressTitle'); From 21e683e51aa9cce9d470c03f8c9fd24a82511a83 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 17 Apr 2024 14:15:04 +0200 Subject: [PATCH 06/12] export from top level of package --- x-pack/packages/ml/aiops_components/index.ts | 7 +++++++ .../src/log_rate_analysis_state_provider/index.ts | 2 +- .../utils/build_extended_base_filter_criteria.test.ts | 2 +- .../utils/build_extended_base_filter_criteria.ts | 2 +- .../log_rate_analysis/log_rate_analysis_app_state.tsx | 2 +- .../log_rate_analysis_content.tsx | 5 +---- .../log_rate_analysis_content_wrapper.tsx | 2 +- .../log_rate_analysis/log_rate_analysis_page.tsx | 2 +- .../log_rate_analysis/log_rate_analysis_results.tsx | 2 +- .../get_group_table_items.ts | 5 +---- .../get_table_item_as_kql.ts | 2 +- .../log_rate_analysis_results_table.tsx | 2 +- .../log_rate_analysis_results_table_groups.tsx | 5 +---- .../use_copy_to_clipboard_action.test.tsx | 2 +- .../use_copy_to_clipboard_action.tsx | 5 +---- .../use_view_in_discover_action.tsx | 5 +---- .../use_view_in_log_pattern_analysis_action.tsx | 5 +---- x-pack/plugins/aiops/public/get_document_stats.ts | 2 +- x-pack/plugins/aiops/public/hooks/use_data.ts | 2 +- 19 files changed, 25 insertions(+), 36 deletions(-) diff --git a/x-pack/packages/ml/aiops_components/index.ts b/x-pack/packages/ml/aiops_components/index.ts index d1921ba069b5f4..3a640c1d0cb443 100644 --- a/x-pack/packages/ml/aiops_components/index.ts +++ b/x-pack/packages/ml/aiops_components/index.ts @@ -14,3 +14,10 @@ export { type BrushSelectionUpdateHandler, } from './src/document_count_chart'; export type { DocumentCountChartProps } from './src/document_count_chart'; +export { + useLogRateAnalysisStateContext, + LogRateAnalysisStateProvider, + type GroupTableItem, + type GroupTableItemGroup, + type TableItemAction, +} from './src/log_rate_analysis_state_provider'; diff --git a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts index 4f57626aa48a25..18453665cb4f29 100644 --- a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts +++ b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/index.ts @@ -9,4 +9,4 @@ export { useLogRateAnalysisStateContext, LogRateAnalysisStateProvider, } from './log_rate_analysis_state_provider'; -export type { GroupTableItem } from './types'; +export type { GroupTableItem, GroupTableItemGroup, TableItemAction } from './types'; diff --git a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts index dff010ac30b436..6ab69bf7ccd1ca 100644 --- a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts +++ b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.test.ts @@ -6,7 +6,7 @@ */ import type { SignificantItem } from '@kbn/ml-agg-utils'; -import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem } from '@kbn/aiops-components'; import { buildExtendedBaseFilterCriteria } from './build_extended_base_filter_criteria'; diff --git a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts index 06e8fded906a3f..9d77f68cfa15bf 100644 --- a/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts +++ b/x-pack/plugins/aiops/public/application/utils/build_extended_base_filter_criteria.ts @@ -14,7 +14,7 @@ import type { Query } from '@kbn/es-query'; import { type SignificantItem, SIGNIFICANT_ITEM_TYPE } from '@kbn/ml-agg-utils'; import { buildBaseFilterCriteria } from '@kbn/ml-query-utils'; import { getCategoryQuery } from '@kbn/aiops-log-pattern-analysis/get_category_query'; -import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem } from '@kbn/aiops-components'; /* * Contains utility functions for building and processing queries. diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx index dd6a82a159c8c5..ca06d3c7c9b37d 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx @@ -17,7 +17,7 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; import { DatePickerContextProvider, type DatePickerDependencies } from '@kbn/ml-date-picker'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; -import { LogRateAnalysisStateProvider } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; +import { LogRateAnalysisStateProvider } from '@kbn/aiops-components'; import type { AiopsAppDependencies } from '../../hooks/use_aiops_app_context'; import { AiopsAppContext } from '../../hooks/use_aiops_app_context'; import { DataSourceContext } from '../../hooks/use_data_source'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index 4405c9848b03e5..b624d704ea3683 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -26,10 +26,7 @@ import { type WindowParameters, } from '@kbn/aiops-log-rate-analysis'; import type { SignificantItem } from '@kbn/ml-agg-utils'; -import { - useLogRateAnalysisStateContext, - type GroupTableItem, -} from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; +import { useLogRateAnalysisStateContext, type GroupTableItem } from '@kbn/aiops-components'; import { useData } from '../../../hooks/use_data'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx index e6847284a248b2..524780d16c201e 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx @@ -18,7 +18,7 @@ import { UrlStateProvider } from '@kbn/ml-url-state'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { DatePickerContextProvider } from '@kbn/ml-date-picker'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; -import { LogRateAnalysisStateProvider } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; +import { LogRateAnalysisStateProvider } from '@kbn/aiops-components'; import { timeSeriesDataViewWarning } from '../../../application/utils/time_series_dataview_check'; import { AiopsAppContext, type AiopsAppDependencies } from '../../../hooks/use_aiops_app_context'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx index ee1553be06705b..734580a8c71301 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx @@ -18,7 +18,7 @@ import { useUrlState, usePageUrlState } from '@kbn/ml-url-state'; import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; import type { WindowParameters } from '@kbn/aiops-log-rate-analysis'; import { AIOPS_TELEMETRY_ID } from '@kbn/aiops-common/constants'; -import { useLogRateAnalysisStateContext } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; +import { useLogRateAnalysisStateContext } from '@kbn/aiops-components'; import { useDataSource } from '../../hooks/use_data_source'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx index ace566261a764f..727d055b8989e8 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_results.tsx @@ -38,7 +38,7 @@ import { AIOPS_TELEMETRY_ID } from '@kbn/aiops-common/constants'; import { initialState, streamReducer } from '@kbn/aiops-log-rate-analysis/api/stream_reducer'; import type { AiopsLogRateAnalysisSchema } from '@kbn/aiops-log-rate-analysis/api/schema'; import type { AiopsLogRateAnalysisSchemaSignificantItem } from '@kbn/aiops-log-rate-analysis/api/schema_v2'; -import { useLogRateAnalysisStateContext } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; +import { useLogRateAnalysisStateContext } from '@kbn/aiops-components'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import { diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts index db85bd27c17632..c33713e111f02e 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_group_table_items.ts @@ -8,10 +8,7 @@ import { sortBy } from 'lodash'; import type { SignificantItemGroup } from '@kbn/ml-agg-utils'; -import type { - GroupTableItem, - GroupTableItemGroup, -} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem, GroupTableItemGroup } from '@kbn/aiops-components'; export function getGroupTableItems( significantItemsGroups: SignificantItemGroup[] diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts index 54e3a14e227d1a..6ac66468b658e9 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/get_table_item_as_kql.ts @@ -7,7 +7,7 @@ import { escapeKuery, escapeQuotes } from '@kbn/es-query'; import { isSignificantItem, type SignificantItem } from '@kbn/ml-agg-utils'; -import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem } from '@kbn/aiops-components'; export const getTableItemAsKQL = (tableItem: GroupTableItem | SignificantItem) => { if (isSignificantItem(tableItem)) { diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx index 5156dd323fe709..ff683855f6d38a 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx @@ -32,7 +32,7 @@ import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; import { getCategoryQuery } from '@kbn/aiops-log-pattern-analysis/get_category_query'; -import { useLogRateAnalysisStateContext } from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; +import { useLogRateAnalysisStateContext } from '@kbn/aiops-components'; import { useEuiTheme } from '../../hooks/use_eui_theme'; import { MiniHistogram } from '../mini_histogram'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx index 214898029aaef4..aefe170fc4b5bb 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx @@ -32,10 +32,7 @@ import type { SignificantItem } from '@kbn/ml-agg-utils'; import type { TimeRange as TimeRangeMs } from '@kbn/ml-date-picker'; import type { DataView } from '@kbn/data-views-plugin/public'; import { stringHash } from '@kbn/ml-string-hash'; -import { - useLogRateAnalysisStateContext, - type GroupTableItem, -} from '@kbn/aiops-components/src/log_rate_analysis_state_provider'; +import { useLogRateAnalysisStateContext, type GroupTableItem } from '@kbn/aiops-components'; import { MiniHistogram } from '../mini_histogram'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx index b8527ecd4e8a71..c110e8b2d56c83 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.test.tsx @@ -14,7 +14,7 @@ import type { SignificantItem } from '@kbn/ml-agg-utils'; import { finalSignificantItemGroups } from '@kbn/aiops-test-utils/artificial_logs/final_significant_item_groups'; import { significantTerms } from '@kbn/aiops-test-utils/artificial_logs/significant_terms'; -import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem } from '@kbn/aiops-components'; import { getGroupTableItems } from './get_group_table_items'; import { useCopyToClipboardAction } from './use_copy_to_clipboard_action'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx index 65113724c475a5..403adfdbf070ab 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_copy_to_clipboard_action.tsx @@ -11,10 +11,7 @@ import { EuiCopy, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { isSignificantItem, type SignificantItem } from '@kbn/ml-agg-utils'; -import type { - GroupTableItem, - TableItemAction, -} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem, TableItemAction } from '@kbn/aiops-components'; import { TableActionButton } from './table_action_button'; import { getTableItemAsKQL } from './get_table_item_as_kql'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx index f91ab695135c8c..7f657617517af1 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_discover_action.tsx @@ -10,10 +10,7 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import type { SignificantItem } from '@kbn/ml-agg-utils'; import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; -import type { - GroupTableItem, - TableItemAction, -} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem, TableItemAction } from '@kbn/aiops-components'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx index 3804a58748fcb3..6c29ee4607d60c 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_view_in_log_pattern_analysis_action.tsx @@ -11,10 +11,7 @@ import type { SerializableRecord } from '@kbn/utility-types'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { isSignificantItem, type SignificantItem, SIGNIFICANT_ITEM_TYPE } from '@kbn/ml-agg-utils'; -import type { - GroupTableItem, - TableItemAction, -} from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem, TableItemAction } from '@kbn/aiops-components'; import { SEARCH_QUERY_LANGUAGE } from '@kbn/ml-query-utils'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; diff --git a/x-pack/plugins/aiops/public/get_document_stats.ts b/x-pack/plugins/aiops/public/get_document_stats.ts index 4f0d9679ef3eba..0846565cc18904 100644 --- a/x-pack/plugins/aiops/public/get_document_stats.ts +++ b/x-pack/plugins/aiops/public/get_document_stats.ts @@ -18,7 +18,7 @@ import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { SignificantItem } from '@kbn/ml-agg-utils'; import type { Query } from '@kbn/es-query'; import type { RandomSamplerWrapper } from '@kbn/ml-random-sampler-utils'; -import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem } from '@kbn/aiops-components'; import { buildExtendedBaseFilterCriteria } from './application/utils/build_extended_base_filter_criteria'; diff --git a/x-pack/plugins/aiops/public/hooks/use_data.ts b/x-pack/plugins/aiops/public/hooks/use_data.ts index acde74d19d6d12..9986a4d65dd708 100644 --- a/x-pack/plugins/aiops/public/hooks/use_data.ts +++ b/x-pack/plugins/aiops/public/hooks/use_data.ts @@ -18,7 +18,7 @@ import type { Dictionary } from '@kbn/ml-url-state'; import { mlTimefilterRefresh$, useTimefilter } from '@kbn/ml-date-picker'; import { useTimeBuckets } from '@kbn/ml-time-buckets'; import { AIOPS_PLUGIN_ID } from '@kbn/aiops-common/constants'; -import type { GroupTableItem } from '@kbn/aiops-components/src/log_rate_analysis_state_provider/types'; +import type { GroupTableItem } from '@kbn/aiops-components'; import type { DocumentStatsSearchStrategyParams } from '../get_document_stats'; From 945299437d50bf29720f18af0449389efcb1b28e Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 17 Apr 2024 14:15:41 +0200 Subject: [PATCH 07/12] naming tweaks --- .../src/document_count_chart/document_count_chart.tsx | 2 +- .../log_rate_analysis_state_provider.tsx | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx index 6eb19bdba24c8b..7b42ffdc58d69c 100644 --- a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx +++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx @@ -121,7 +121,7 @@ export interface DocumentCountChartProps { /** Whether or not brush has been reset */ isBrushCleared: boolean; /** Callback to set the autoRunAnalysis flag */ - setAutoRunAnalysis?: (d: boolean) => void; + setAutoRunAnalysis?: (isAutoRun: boolean) => void; /** Timestamp for start of initial analysis */ autoAnalysisStart?: number | WindowParameters; /** Optional style to override bar chart */ diff --git a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx index 7e320f28f62fe5..a3ee3fc81f0da1 100644 --- a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx +++ b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx @@ -42,9 +42,7 @@ interface LogRateAnalysisState { clearAllRowState: () => void; } -export const logRateAnalysisStateContext = createContext( - undefined -); +const LogRateAnalysisStateContext = createContext(undefined); interface LogRateAnalysisStateProviderProps { initialAnalysisStart?: InitialAnalysisStart; @@ -127,14 +125,14 @@ export const LogRateAnalysisStateProvider: FC return ( // Provider managing the state - + {children} - + ); }; export const useLogRateAnalysisStateContext = () => { - const logRateAnalysisState = useContext(logRateAnalysisStateContext); + const logRateAnalysisState = useContext(LogRateAnalysisStateContext); // If `undefined`, throw an error. if (logRateAnalysisState === undefined) { From befd25180e299b6c404a8fda39d17ec6d16b8aec Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 17 Apr 2024 14:24:26 +0200 Subject: [PATCH 08/12] descriptive vars --- .../log_rate_analysis_content.tsx | 162 ++++++++++-------- 1 file changed, 89 insertions(+), 73 deletions(-) diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index b624d704ea3683..a32557732e4c34 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -222,15 +222,37 @@ export const LogRateAnalysisContent: FC = ({ const snapTimestamps = getSnappedTimestamps(timeRangeEarliest, timeRangeLatest, interval); const wpSnap = getSnappedWindowParameters(wp, snapTimestamps); - setAutoRunAnalysis(true); + triggerAnalysisForManualSelection(); setInitialAnalysisStart(wpSnap); } } - }, [documentCountStats, setAutoRunAnalysis, setInitialAnalysisStart]); + }, [documentCountStats, setInitialAnalysisStart, triggerAnalysisForManualSelection]); + + const showDocumentCountContent = documentCountStats !== undefined; + + const showLogRateAnalysisResults = + autoRunAnalysis && + earliest !== undefined && + latest !== undefined && + windowParameters !== undefined; + + const showNoAutoRunEmptyPrompt = + !autoRunAnalysis && + earliest !== undefined && + latest !== undefined && + windowParameters !== undefined; + + const showSpikeDetectedEmptyPrompt = + windowParameters === undefined && documentCountStats?.changePoint; + + const showDefaultEmptyPrompt = + windowParameters === undefined && documentCountStats?.changePoint === undefined; + + const changePointType = documentCountStats?.changePoint?.type; return ( - {documentCountStats !== undefined && ( + {showDocumentCountContent && ( = ({ /> )} - {autoRunAnalysis && - earliest !== undefined && - latest !== undefined && - windowParameters !== undefined && ( - - )} - {!autoRunAnalysis && - earliest !== undefined && - latest !== undefined && - windowParameters !== undefined && ( - -

- -

- - - {' '} - clearSelection()} - color="text" - > - - - - } - data-test-subj="aiopsChangePointDetectedPrompt" - /> - )} - {windowParameters === undefined && documentCountStats?.changePoint && ( + {showLogRateAnalysisResults && ( + + )} + {showNoAutoRunEmptyPrompt && ( + +

+ +

+ + + {' '} + clearSelection()} + color="text" + > + + + + } + data-test-subj="aiopsChangePointDetectedPrompt" + /> + )} + {showSpikeDetectedEmptyPrompt && ( = ({ css={{ minWidth: '100%' }} title={

- {documentCountStats?.changePoint.type === LOG_RATE_ANALYSIS_TYPE.SPIKE && ( + {changePointType === LOG_RATE_ANALYSIS_TYPE.SPIKE && ( )} - {documentCountStats?.changePoint.type === LOG_RATE_ANALYSIS_TYPE.DIP && ( + {changePointType === LOG_RATE_ANALYSIS_TYPE.DIP && ( )} - {documentCountStats?.changePoint.type !== LOG_RATE_ANALYSIS_TYPE.SPIKE && - documentCountStats?.changePoint.type !== LOG_RATE_ANALYSIS_TYPE.DIP && ( + {changePointType !== LOG_RATE_ANALYSIS_TYPE.SPIKE && + changePointType !== LOG_RATE_ANALYSIS_TYPE.DIP && ( = ({ data-test-subj="aiopsChangePointDetectedPrompt" /> )} - {windowParameters === undefined && documentCountStats?.changePoint === undefined && ( + {showDefaultEmptyPrompt && ( Date: Wed, 17 Apr 2024 14:53:22 +0200 Subject: [PATCH 09/12] tweak useEffect dependencies --- .../components/log_rate_analysis/log_rate_analysis_page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx index 734580a8c71301..254d58c93675ab 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_page.tsx @@ -147,7 +147,7 @@ export const LogRateAnalysisPage: FC = ({ stickyHistogram }) => { setInitialAnalysisStart(appStateToWindowParameters(stateFromUrl.wp)); }, // eslint-disable-next-line react-hooks/exhaustive-deps - [JSON.stringify(stateFromUrl.wp)] + [] ); const onWindowParametersHandler = (wp?: WindowParameters, replace = false) => { From 70021962416a6f617af8613f7c53ec9b1d33c11b Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 17 Apr 2024 14:56:55 +0200 Subject: [PATCH 10/12] fix string passed to FormattedMessage --- .../log_rate_analysis_content/log_rate_analysis_content.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx index a32557732e4c34..b244cbc324d17c 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content.tsx @@ -301,7 +301,7 @@ export const LogRateAnalysisContent: FC = ({

Date: Wed, 17 Apr 2024 16:24:12 +0200 Subject: [PATCH 11/12] fix performance journey --- .../performance/journeys_e2e/aiops_log_rate_analysis.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/x-pack/performance/journeys_e2e/aiops_log_rate_analysis.ts b/x-pack/performance/journeys_e2e/aiops_log_rate_analysis.ts index 06a5e01a2caf50..888a4802e6a51d 100644 --- a/x-pack/performance/journeys_e2e/aiops_log_rate_analysis.ts +++ b/x-pack/performance/journeys_e2e/aiops_log_rate_analysis.ts @@ -33,8 +33,14 @@ export const journey = new Journey({ await page.waitForSelector(subj('aiopsNoWindowParametersEmptyPrompt')); }) .step('Run AIOps Log Rate Analysis', async ({ page }) => { - // Select the chart and click in the area where the spike is located to trigger log rate analysis. + // Select the chart and click in the area where the spike is located. const chart = await page.locator(subj('aiopsDocumentCountChart')); await chart.click({ position: { x: 710, y: 50 } }); + + // Click the "Run analysis" button. + await page.waitForSelector(subj('aiopsLogRateAnalysisNoAutoRunContentRunAnalysisButton')); + await page.click(subj('aiopsLogRateAnalysisNoAutoRunContentRunAnalysisButton')); + + // Wait for the analysis to complete. await page.waitForSelector(subj('aiopsAnalysisComplete'), { timeout: 120000 }); }); From 3ab715b4e9be5e2559fd11e6a4fde243c66bd2e9 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 17 Apr 2024 17:36:07 +0200 Subject: [PATCH 12/12] jsdoc --- .../document_count_chart.tsx | 16 +++++++++- .../log_rate_analysis_state_provider.tsx | 31 ++++++++++++++++--- .../log_rate_analysis_state_provider/types.ts | 16 ++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx index 7b42ffdc58d69c..02c532d1867047 100644 --- a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx +++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx @@ -89,6 +89,11 @@ export type BrushSelectionUpdateHandler = ( logRateAnalysisType: LogRateAnalysisType ) => void; +/** + * Callback to set the autoRunAnalysis flag + */ +type SetAutoRunAnalysisFn = (isAutoRun: boolean) => void; + /** * Props for document count chart */ @@ -121,7 +126,7 @@ export interface DocumentCountChartProps { /** Whether or not brush has been reset */ isBrushCleared: boolean; /** Callback to set the autoRunAnalysis flag */ - setAutoRunAnalysis?: (isAutoRun: boolean) => void; + setAutoRunAnalysis?: SetAutoRunAnalysisFn; /** Timestamp for start of initial analysis */ autoAnalysisStart?: number | WindowParameters; /** Optional style to override bar chart */ @@ -553,6 +558,15 @@ export const DocumentCountChart: FC = (props) => { ); }; +/** + * Functional component that renders a `DocumentCountChart` with additional properties + * managed by the log rate analysis state. It leverages the `useLogRateAnalysisStateContext` + * to acquire state variables like `initialAnalysisStart` and functions such as + * `setAutoRunAnalysis`. These values are then passed as props to the `DocumentCountChart`. + * + * @param props - The properties passed to the DocumentCountChart component. + * @returns The DocumentCountChart component enhanced with automatic analysis start capabilities. + */ export const DocumentCountChartWithAutoAnalysisStart: FC = (props) => { const { initialAnalysisStart, setAutoRunAnalysis } = useLogRateAnalysisStateContext(); diff --git a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx index a3ee3fc81f0da1..f3aa55bdce7711 100644 --- a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx +++ b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx @@ -44,14 +44,30 @@ interface LogRateAnalysisState { const LogRateAnalysisStateContext = createContext(undefined); +/** + * Props for LogRateAnalysisStateProvider. + */ interface LogRateAnalysisStateProviderProps { + /** The parameters to be used to trigger an analysis. */ initialAnalysisStart?: InitialAnalysisStart; } -export const LogRateAnalysisStateProvider: FC = ({ - children, - initialAnalysisStart: incomingInitialAnalysisStart, -}) => { +/** + * Context provider component that manages and provides global state for Log Rate Analysis. + * This provider handles several pieces of state important for controlling and displaying + * log rate analysis data, such as the control of automatic analysis runs, and the management + * of both pinned and selected significant items and groups. + * + * The state includes mechanisms for setting initial analysis parameters, toggling analysis, + * and managing the current selection and pinned state of significant items and groups. + * + * @param props - Props object containing initial settings for the analysis, + * including children components to be wrapped by the Provider. + * @returns A context provider wrapping children with access to log rate analysis state. + */ +export const LogRateAnalysisStateProvider: FC = (props) => { + const { children, initialAnalysisStart: incomingInitialAnalysisStart } = props; + const [autoRunAnalysis, setAutoRunAnalysis] = useState(true); const [initialAnalysisStart, setInitialAnalysisStart] = useState< number | WindowParameters | undefined @@ -131,6 +147,13 @@ export const LogRateAnalysisStateProvider: FC ); }; +/** + * Custom hook for accessing the state of log rate analysis from the LogRateAnalysisStateContext. + * This hook must be used within a component that is a descendant of the LogRateAnalysisStateContext provider. + * + * @returns The current state of the log rate analysis. + * @throws Throws an error if the hook is used outside of its Provider context. + */ export const useLogRateAnalysisStateContext = () => { const logRateAnalysisState = useContext(LogRateAnalysisStateContext); diff --git a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts index 400e4534b54f13..4c4013e3d48679 100644 --- a/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts +++ b/x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts @@ -9,20 +9,36 @@ import type { EuiTableActionsColumnType } from '@elastic/eui'; import type { SignificantItem, SignificantItemGroupItem } from '@kbn/ml-agg-utils'; +/** + * Type for defining attributes picked from + * SignificantItemGroupItem used in the grouped table. + */ export type GroupTableItemGroup = Pick< SignificantItemGroupItem, 'key' | 'type' | 'fieldName' | 'fieldValue' | 'docCount' | 'pValue' | 'duplicate' >; +/** + * Represents a single item in the group table. + */ export interface GroupTableItem { + /** Unique identifier for the group table item. */ id: string; + /** Document count associated with the item. */ docCount: number; + /** Statistical p-value indicating the significance of the item, nullable. */ pValue: number | null; + /** Count of unique items within the group. */ uniqueItemsCount: number; + /** Array of items within the group, sorted by uniqueness. */ groupItemsSortedByUniqueness: GroupTableItemGroup[]; + /** Histogram data for the significant item. */ histogram: SignificantItem['histogram']; } +/** + * Type for action columns in a table that involves SignificantItem or GroupTableItem. + */ export type TableItemAction = EuiTableActionsColumnType< SignificantItem | GroupTableItem >['actions'][number];