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];