diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.test.ts b/x-pack/packages/ml/chi2test/compute_chi_2_pvalue.test.ts similarity index 95% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.test.ts rename to x-pack/packages/ml/chi2test/compute_chi_2_pvalue.test.ts index 08f0305e4126a6..b087ec551254a9 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.test.ts +++ b/x-pack/packages/ml/chi2test/compute_chi_2_pvalue.test.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { computeChi2PValue } from './data_comparison_utils'; -import { Histogram } from './types'; +import { computeChi2PValue } from './compute_chi_2_pvalue'; +import type { Histogram } from './types'; describe('computeChi2PValue()', () => { test('should return close to 1 if datasets are both empty or nearly identical', () => { diff --git a/x-pack/plugins/aiops/common/api/log_categorization/process_category_results.ts b/x-pack/plugins/aiops/common/api/log_categorization/process_category_results.ts index 6b8cbe1a451641..347ba5711719dd 100644 --- a/x-pack/plugins/aiops/common/api/log_categorization/process_category_results.ts +++ b/x-pack/plugins/aiops/common/api/log_categorization/process_category_results.ts @@ -11,35 +11,7 @@ import { estypes } from '@elastic/elasticsearch'; import { createRandomSamplerWrapper } from '@kbn/ml-random-sampler-utils'; -export interface Category { - key: string; - count: number; - examples: string[]; - sparkline?: Array<{ doc_count: number; key: number; key_as_string: string }>; -} - -export interface CategoriesAgg { - categories: { - buckets: Array<{ - key: string; - doc_count: number; - hit: { hits: { hits: Array<{ _source: { message: string } }> } }; - sparkline: { - buckets: Array<{ key_as_string: string; key: number; doc_count: number }>; - }; - }>; - }; -} - -interface CategoriesSampleAgg { - sample: CategoriesAgg; -} - -export interface CatResponse { - rawResponse: estypes.SearchResponseBody; -} - -export type SparkLinesPerCategory = Record>; +import type { Category, CategoriesAgg, CatResponse, SparkLinesPerCategory } from './types'; export function processCategoryResults( result: CatResponse, diff --git a/x-pack/plugins/aiops/common/api/log_categorization/types.ts b/x-pack/plugins/aiops/common/api/log_categorization/types.ts new file mode 100644 index 00000000000000..83e16d8ada7d0a --- /dev/null +++ b/x-pack/plugins/aiops/common/api/log_categorization/types.ts @@ -0,0 +1,38 @@ +/* + * 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. + */ + +import { estypes } from '@elastic/elasticsearch'; + +export interface Category { + key: string; + count: number; + examples: string[]; + sparkline?: Array<{ doc_count: number; key: number; key_as_string: string }>; +} + +export interface CategoriesAgg { + categories: { + buckets: Array<{ + key: string; + doc_count: number; + hit: { hits: { hits: Array<{ _source: { message: string } }> } }; + sparkline: { + buckets: Array<{ key_as_string: string; key: number; doc_count: number }>; + }; + }>; + }; +} + +interface CategoriesSampleAgg { + sample: CategoriesAgg; +} + +export interface CatResponse { + rawResponse: estypes.SearchResponseBody; +} + +export type SparkLinesPerCategory = Record>; diff --git a/x-pack/plugins/aiops/public/components/log_categorization/category_table/category_table.tsx b/x-pack/plugins/aiops/public/components/log_categorization/category_table/category_table.tsx index 1dc30c04253bcc..346fc7f5b35627 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/category_table/category_table.tsx +++ b/x-pack/plugins/aiops/public/components/log_categorization/category_table/category_table.tsx @@ -6,8 +6,7 @@ */ import React, { FC, useMemo, useState } from 'react'; -import { i18n } from '@kbn/i18n'; -import type { TimefilterContract } from '@kbn/data-plugin/public'; + import { useEuiBackgroundColor, EuiInMemoryTable, @@ -19,14 +18,25 @@ import { EuiSpacer, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import type { TimefilterContract } from '@kbn/data-plugin/public'; import { DataViewField } from '@kbn/data-views-plugin/common'; import { Filter } from '@kbn/es-query'; import { useTableState } from '@kbn/ml-in-memory-table'; -import { useDiscoverLinks, createFilter, QueryMode, QUERY_MODE } from '../use_discover_links'; -import { MiniHistogram } from '../../mini_histogram'; + +import type { + Category, + SparkLinesPerCategory, +} from '../../../../common/api/log_categorization/types'; + import { useEuiTheme } from '../../../hooks/use_eui_theme'; import type { LogCategorizationAppState } from '../../../application/utils/url_state'; -import type { EventRate, Category, SparkLinesPerCategory } from '../use_categorize_request'; + +import { MiniHistogram } from '../../mini_histogram'; + +import { useDiscoverLinks, createFilter, QueryMode, QUERY_MODE } from '../use_discover_links'; +import type { EventRate } from '../use_categorize_request'; + import { getLabels } from './labels'; import { TableHeader } from './table_header'; diff --git a/x-pack/plugins/aiops/public/components/log_categorization/document_count_chart.tsx b/x-pack/plugins/aiops/public/components/log_categorization/document_count_chart.tsx index d34861b924ccb7..859eaed0fec57e 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/document_count_chart.tsx +++ b/x-pack/plugins/aiops/public/components/log_categorization/document_count_chart.tsx @@ -9,11 +9,15 @@ import React, { FC, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { DocumentCountChart as DocumentCountChartRoot } from '@kbn/aiops-components'; + +import type { Category, SparkLinesPerCategory } from '../../../common/api/log_categorization/types'; + import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; +import { DocumentCountStats } from '../../get_document_stats'; + import { TotalCountHeader } from '../document_count_content/total_count_header'; -import type { Category, SparkLinesPerCategory } from './use_categorize_request'; + import type { EventRate } from './use_categorize_request'; -import { DocumentCountStats } from '../../get_document_stats'; interface Props { totalCount: number; diff --git a/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx b/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx index 599a669197ee59..28c1350a88141c 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx +++ b/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_for_flyout.tsx @@ -5,10 +5,7 @@ * 2.0. */ import React, { FC, useState, useEffect, useCallback, useRef, useMemo } from 'react'; -import type { SavedSearch } from '@kbn/saved-search-plugin/public'; -import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; + import { EuiTitle, EuiFlyoutHeader, @@ -18,26 +15,33 @@ import { useEuiTheme, } from '@elastic/eui'; +import type { SavedSearch } from '@kbn/saved-search-plugin/public'; +import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { buildEmptyFilter, Filter } from '@kbn/es-query'; - import { usePageUrlState } from '@kbn/ml-url-state'; import type { FieldValidationResults } from '@kbn/ml-category-validator'; + +import type { Category, SparkLinesPerCategory } from '../../../common/api/log_categorization/types'; + +import { + type LogCategorizationPageUrlState, + getDefaultLogCategorizationAppState, +} from '../../application/utils/url_state'; +import { createMergedEsQuery } from '../../application/utils/search_utils'; import { useData } from '../../hooks/use_data'; import { useSearch } from '../../hooks/use_search'; +import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; + import { useCategorizeRequest } from './use_categorize_request'; -import type { EventRate, Category, SparkLinesPerCategory } from './use_categorize_request'; +import type { EventRate } from './use_categorize_request'; import { CategoryTable } from './category_table'; -import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import { InformationText } from './information_text'; -import { createMergedEsQuery } from '../../application/utils/search_utils'; import { SamplingMenu } from './sampling_menu'; import { TechnicalPreviewBadge } from './technical_preview_badge'; import { LoadingCategorization } from './loading_categorization'; import { useValidateFieldRequest } from './use_validate_category_field'; -import { - type LogCategorizationPageUrlState, - getDefaultLogCategorizationAppState, -} from '../../application/utils/url_state'; import { FieldValidationCallout } from './category_validation_callout'; export interface LogCategorizationPageProps { diff --git a/x-pack/plugins/aiops/public/components/log_categorization/use_categorize_request.ts b/x-pack/plugins/aiops/public/components/log_categorization/use_categorize_request.ts index 6c68500bc1a74e..8179751266e6e5 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/use_categorize_request.ts +++ b/x-pack/plugins/aiops/public/components/log_categorization/use_categorize_request.ts @@ -13,12 +13,12 @@ import { isCompleteResponse } from '@kbn/data-plugin/public'; import { useStorage } from '@kbn/ml-local-storage'; import { createCategoryRequest } from '../../../common/api/log_categorization/create_category_request'; -import { - processCategoryResults, - type Category, - type CatResponse, - type SparkLinesPerCategory, -} from '../../../common/api/log_categorization/process_category_results'; +import { processCategoryResults } from '../../../common/api/log_categorization/process_category_results'; +import type { + Category, + CatResponse, + SparkLinesPerCategory, +} from '../../../common/api/log_categorization/types'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import { diff --git a/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts b/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts index cb3b60268f4384..081da893218ec4 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts +++ b/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts @@ -5,15 +5,17 @@ * 2.0. */ -import rison from '@kbn/rison'; import moment from 'moment'; +import rison from '@kbn/rison'; import type { TimeRangeBounds } from '@kbn/data-plugin/common'; import { i18n } from '@kbn/i18n'; import type { Filter } from '@kbn/es-query'; + +import type { Category } from '../../../common/api/log_categorization/types'; + import type { AiOpsIndexBasedAppState } from '../../application/utils/url_state'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; -import type { Category } from './use_categorize_request'; export const QUERY_MODE = { INCLUDE: 'should', diff --git a/x-pack/plugins/aiops/public/components/log_categorization/use_validate_category_field.ts b/x-pack/plugins/aiops/public/components/log_categorization/use_validate_category_field.ts index d354ed5f3fbb68..8e0850aa1daa88 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/use_validate_category_field.ts +++ b/x-pack/plugins/aiops/public/components/log_categorization/use_validate_category_field.ts @@ -8,10 +8,13 @@ import { useRef, useCallback } from 'react'; import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; + import type { FieldValidationResults } from '@kbn/ml-category-validator'; + import { AIOPS_API_ENDPOINT } from '../../../common/api'; +import { createCategorizeQuery } from '../../../common/api/log_categorization/create_categorize_query'; + import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; -import { createCategorizeQuery } from './use_categorize_request'; export function useValidateFieldRequest() { const { http } = useAiopsAppContext(); diff --git a/x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts b/x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts index 7347d8972d4756..6744a397c3501b 100644 --- a/x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts +++ b/x-pack/plugins/aiops/server/routes/queries/fetch_categories.ts @@ -22,7 +22,7 @@ import type { Category, CategoriesAgg, SparkLinesPerCategory, -} from '../../../common/api/log_categorization/process_category_results'; +} from '../../../common/api/log_categorization/types'; import { isRequestAbortedError } from '../../lib/is_request_aborted_error'; diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/single_distribution_chart.tsx b/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/single_distribution_chart.tsx index 22796f371cb559..33990912a6b65b 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/single_distribution_chart.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/single_distribution_chart.tsx @@ -5,12 +5,17 @@ * 2.0. */ +import React from 'react'; + import { SeriesColorAccessor } from '@elastic/charts/dist/chart_types/xy_chart/utils/specs'; import { BarSeries, Chart, ScaleType, Settings } from '@elastic/charts'; -import React from 'react'; -import { NoChartsData } from './no_charts_data'; + +import type { Histogram } from '@kbn/ml-chi2test'; + import { DATA_COMPARISON_TYPE } from '../constants'; -import { DataComparisonField, Histogram } from '../types'; +import type { DataComparisonField } from '../types'; + +import { NoChartsData } from './no_charts_data'; export const SingleDistributionChart = ({ data,