[ResponseOps][Security Solution] Transfer ownership of the alerts grouping package to ResponseOps (#184131)

## Summary

As agreed in the recent ResponseOps/Security/Observability meeting, the
ResponseOps team will take ownership of the alerts grouping package
(formerly `@kbn/securitysolution-grouping`) in order to provide a
solution-agnostic API surface for future usages in Observability and
Stack rules.

This PR implements this transfer, while also renaming the package to
`@kbn/grouping` to reflect the change in scope.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Umberto Pepato 2024-05-28 11:15:04 +02:00 committed by GitHub
parent c1d992d281
commit df15fe1b06
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
74 changed files with 75 additions and 79 deletions

2
.github/CODEOWNERS vendored
View file

@ -470,6 +470,7 @@ x-pack/plugins/global_search_providers @elastic/appex-sharedux
x-pack/test/plugin_functional/plugins/global_search_test @elastic/kibana-core
x-pack/plugins/graph @elastic/kibana-visualizations
x-pack/plugins/grokdebugger @elastic/kibana-management
packages/kbn-grouping @elastic/response-ops
packages/kbn-guided-onboarding @elastic/appex-sharedux
examples/guided_onboarding_example @elastic/appex-sharedux
src/plugins/guided_onboarding @elastic/appex-sharedux
@ -735,7 +736,6 @@ x-pack/packages/security-solution/data_table @elastic/security-threat-hunting-in
packages/kbn-securitysolution-ecs @elastic/security-threat-hunting-explore
packages/kbn-securitysolution-es-utils @elastic/security-detection-engine
packages/kbn-securitysolution-exception-list-components @elastic/security-detection-engine
packages/kbn-securitysolution-grouping @elastic/security-threat-hunting-explore
packages/kbn-securitysolution-hook-utils @elastic/security-detection-engine
packages/kbn-securitysolution-io-ts-alerting-types @elastic/security-detection-engine
packages/kbn-securitysolution-io-ts-list-types @elastic/security-detection-engine

View file

@ -58,7 +58,7 @@
"filesManagement": "src/plugins/files_management",
"flot": "packages/kbn-flot-charts/lib",
"generateCsv": "packages/kbn-generate-csv",
"grouping": "packages/kbn-securitysolution-grouping/src",
"grouping": "packages/kbn-grouping/src",
"guidedOnboarding": "src/plugins/guided_onboarding",
"guidedOnboardingPackage": "packages/kbn-guided-onboarding",
"home": "src/plugins/home",

View file

@ -503,6 +503,7 @@
"@kbn/global-search-test-plugin": "link:x-pack/test/plugin_functional/plugins/global_search_test",
"@kbn/graph-plugin": "link:x-pack/plugins/graph",
"@kbn/grokdebugger-plugin": "link:x-pack/plugins/grokdebugger",
"@kbn/grouping": "link:packages/kbn-grouping",
"@kbn/guided-onboarding": "link:packages/kbn-guided-onboarding",
"@kbn/guided-onboarding-example-plugin": "link:examples/guided_onboarding_example",
"@kbn/guided-onboarding-plugin": "link:src/plugins/guided_onboarding",
@ -739,7 +740,6 @@
"@kbn/securitysolution-ecs": "link:packages/kbn-securitysolution-ecs",
"@kbn/securitysolution-es-utils": "link:packages/kbn-securitysolution-es-utils",
"@kbn/securitysolution-exception-list-components": "link:packages/kbn-securitysolution-exception-list-components",
"@kbn/securitysolution-grouping": "link:packages/kbn-securitysolution-grouping",
"@kbn/securitysolution-hook-utils": "link:packages/kbn-securitysolution-hook-utils",
"@kbn/securitysolution-io-ts-alerting-types": "link:packages/kbn-securitysolution-io-ts-alerting-types",
"@kbn/securitysolution-io-ts-list-types": "link:packages/kbn-securitysolution-io-ts-list-types",

View file

@ -0,0 +1,3 @@
# @kbn/grouping
Grouping component and query.

View file

@ -0,0 +1,26 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
module.exports = {
preset: '@kbn/test',
rootDir: '../..',
roots: ['<rootDir>/packages/kbn-grouping'],
coverageReporters: ['text', 'html'],
collectCoverageFrom: [
'<rootDir>/packages/kbn-grouping/**/*.{ts,tsx}',
'!<rootDir>/packages/kbn-grouping/**/*.test',
'!<rootDir>/packages/kbn-grouping/**/types/*',
'!<rootDir>/packages/kbn-grouping/**/*.type',
'!<rootDir>/packages/kbn-grouping/**/*.styles',
'!<rootDir>/packages/kbn-grouping/**/mocks/*',
'!<rootDir>/packages/kbn-grouping/**/*.config',
'!<rootDir>/packages/kbn-grouping/**/translations',
'!<rootDir>/packages/kbn-grouping/**/types/*',
],
setupFilesAfterEnv: ['<rootDir>/packages/kbn-grouping/setup_test.ts'],
};

View file

@ -0,0 +1,5 @@
{
"type": "shared-common",
"id": "@kbn/grouping",
"owner": "@elastic/response-ops"
}

View file

@ -1,5 +1,5 @@
{
"name": "@kbn/securitysolution-grouping",
"name": "@kbn/grouping",
"private": true,
"version": "1.0.0",
"license": "SSPL-1.0 OR Elastic License 2.0",

View file

@ -1,3 +0,0 @@
# @kbn/securitysolution-grouping
Grouping component and query. Currently only consumed by security solution alerts table.

View file

@ -1,26 +0,0 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
module.exports = {
preset: '@kbn/test',
rootDir: '../..',
roots: ['<rootDir>/packages/kbn-securitysolution-grouping'],
coverageReporters: ['text', 'html'],
collectCoverageFrom: [
'<rootDir>/packages/kbn-securitysolution-grouping/**/*.{ts,tsx}',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/*.test',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/types/*',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/*.type',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/*.styles',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/mocks/*',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/*.config',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/translations',
'!<rootDir>/packages/kbn-securitysolution-grouping/**/types/*',
],
setupFilesAfterEnv: ['<rootDir>/packages/kbn-securitysolution-grouping/setup_test.ts'],
};

View file

@ -1,5 +0,0 @@
{
"type": "shared-common",
"id": "@kbn/securitysolution-grouping",
"owner": "@elastic/security-threat-hunting-explore"
}

View file

@ -41,7 +41,7 @@ export const storybookAliases = {
expression_shape: 'src/plugins/expression_shape/.storybook',
expression_tagcloud: 'src/plugins/chart_expressions/expression_tagcloud/.storybook',
fleet: 'x-pack/plugins/fleet/.storybook',
grouping: 'packages/kbn-securitysolution-grouping/.storybook',
grouping: 'packages/kbn-grouping/.storybook',
home: 'src/plugins/home/.storybook',
infra: 'x-pack/plugins/observability_solution/infra/.storybook',
kibana_react: 'src/plugins/kibana_react/.storybook',

View file

@ -934,6 +934,8 @@
"@kbn/graph-plugin/*": ["x-pack/plugins/graph/*"],
"@kbn/grokdebugger-plugin": ["x-pack/plugins/grokdebugger"],
"@kbn/grokdebugger-plugin/*": ["x-pack/plugins/grokdebugger/*"],
"@kbn/grouping": ["packages/kbn-grouping"],
"@kbn/grouping/*": ["packages/kbn-grouping/*"],
"@kbn/guided-onboarding": ["packages/kbn-guided-onboarding"],
"@kbn/guided-onboarding/*": ["packages/kbn-guided-onboarding/*"],
"@kbn/guided-onboarding-example-plugin": ["examples/guided_onboarding_example"],
@ -1464,8 +1466,6 @@
"@kbn/securitysolution-es-utils/*": ["packages/kbn-securitysolution-es-utils/*"],
"@kbn/securitysolution-exception-list-components": ["packages/kbn-securitysolution-exception-list-components"],
"@kbn/securitysolution-exception-list-components/*": ["packages/kbn-securitysolution-exception-list-components/*"],
"@kbn/securitysolution-grouping": ["packages/kbn-securitysolution-grouping"],
"@kbn/securitysolution-grouping/*": ["packages/kbn-securitysolution-grouping/*"],
"@kbn/securitysolution-hook-utils": ["packages/kbn-securitysolution-hook-utils"],
"@kbn/securitysolution-hook-utils/*": ["packages/kbn-securitysolution-hook-utils/*"],
"@kbn/securitysolution-io-ts-alerting-types": ["packages/kbn-securitysolution-io-ts-alerting-types"],

View file

@ -4,8 +4,8 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { useGrouping } from '@kbn/securitysolution-grouping';
import { ParsedGroupingAggregation } from '@kbn/securitysolution-grouping/src';
import { useGrouping } from '@kbn/grouping';
import { ParsedGroupingAggregation } from '@kbn/grouping/src';
import { Filter } from '@kbn/es-query';
import React from 'react';
import { css } from '@emotion/react';

View file

@ -5,14 +5,10 @@
* 2.0.
*/
import { useCallback, useEffect, useMemo, useState } from 'react';
import { isNoneGroup, useGrouping } from '@kbn/securitysolution-grouping';
import { isNoneGroup, useGrouping } from '@kbn/grouping';
import * as uuid from 'uuid';
import type { DataView } from '@kbn/data-views-plugin/common';
import {
GroupOption,
GroupPanelRenderer,
GroupStatsRenderer,
} from '@kbn/securitysolution-grouping/src';
import { GroupOption, GroupPanelRenderer, GroupStatsRenderer } from '@kbn/grouping/src';
import { useUrlQuery } from '../../common/hooks/use_url_query';

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { ECSField } from '@kbn/securitysolution-grouping/src';
import { ECSField } from '@kbn/grouping/src';
/**
* Return first non-null value. If the field contains an array, this will return the first value that isn't null. If the field isn't an array it'll be returned unless it's null.

View file

@ -6,7 +6,7 @@
*/
import { i18n } from '@kbn/i18n';
import { GroupOption } from '@kbn/securitysolution-grouping';
import { GroupOption } from '@kbn/grouping';
import { FINDINGS_GROUPING_OPTIONS } from '../../../common/constants';
import { FindingsBaseURLQuery } from '../../../common/types';
import { CloudSecurityDefaultColumn } from '../../../components/cloud_security_data_table';

View file

@ -14,7 +14,7 @@ import {
useEuiTheme,
} from '@elastic/eui';
import { css } from '@emotion/react';
import { GroupPanelRenderer, RawBucket, StatRenderer } from '@kbn/securitysolution-grouping/src';
import { GroupPanelRenderer, RawBucket, StatRenderer } from '@kbn/grouping/src';
import React from 'react';
import { i18n } from '@kbn/i18n';
import { FINDINGS_GROUPING_OPTIONS } from '../../../common/constants';

View file

@ -7,7 +7,7 @@
import { SearchResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
import type { IKibanaSearchResponse } from '@kbn/search-types';
import { GenericBuckets, GroupingQuery, RootAggregation } from '@kbn/securitysolution-grouping/src';
import { GenericBuckets, GroupingQuery, RootAggregation } from '@kbn/grouping/src';
import { useQuery } from '@tanstack/react-query';
import { lastValueFrom } from 'rxjs';
import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../../common/constants';

View file

@ -4,7 +4,7 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { getGroupingQuery } from '@kbn/securitysolution-grouping';
import { getGroupingQuery } from '@kbn/grouping';
import {
GroupingAggregation,
GroupPanelRenderer,
@ -12,7 +12,7 @@ import {
isNoneGroup,
NamedAggregation,
parseGroupingQuery,
} from '@kbn/securitysolution-grouping/src';
} from '@kbn/grouping/src';
import { useMemo } from 'react';
import { buildEsQuery, Filter } from '@kbn/es-query';
import {

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { GroupOption } from '@kbn/securitysolution-grouping';
import { GroupOption } from '@kbn/grouping';
import { FindingsBaseURLQuery } from '../../common/types';
import { CloudSecurityDefaultColumn } from '../../components/cloud_security_data_table';
import { GROUPING_LABELS } from './translations';

View file

@ -7,7 +7,7 @@
import { SearchResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
import type { IKibanaSearchResponse } from '@kbn/search-types';
import { GenericBuckets, GroupingQuery, RootAggregation } from '@kbn/securitysolution-grouping/src';
import { GenericBuckets, GroupingQuery, RootAggregation } from '@kbn/grouping/src';
import { useQuery } from '@tanstack/react-query';
import { lastValueFrom } from 'rxjs';
import { LATEST_VULNERABILITIES_INDEX_PATTERN } from '../../../../common/constants';

View file

@ -4,7 +4,7 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { getGroupingQuery } from '@kbn/securitysolution-grouping';
import { getGroupingQuery } from '@kbn/grouping';
import {
GroupingAggregation,
GroupPanelRenderer,
@ -12,7 +12,7 @@ import {
isNoneGroup,
NamedAggregation,
parseGroupingQuery,
} from '@kbn/securitysolution-grouping/src';
} from '@kbn/grouping/src';
import { useMemo } from 'react';
import { buildEsQuery, Filter } from '@kbn/es-query';
import {

View file

@ -14,7 +14,7 @@ import {
useEuiTheme,
} from '@elastic/eui';
import { css } from '@emotion/react';
import { GroupPanelRenderer, RawBucket, StatRenderer } from '@kbn/securitysolution-grouping/src';
import { GroupPanelRenderer, RawBucket, StatRenderer } from '@kbn/grouping/src';
import React from 'react';
import { FormattedMessage } from '@kbn/i18n-react';
import { getCloudProviderNameFromAbbreviation } from '../../../common/utils/helpers';

View file

@ -59,7 +59,7 @@
"@kbn/core-http-server-mocks",
"@kbn/field-formats-plugin",
"@kbn/data-view-field-editor-plugin",
"@kbn/securitysolution-grouping",
"@kbn/grouping",
"@kbn/alerting-plugin",
"@kbn/code-editor",
"@kbn/code-editor-mock",

View file

@ -9,7 +9,7 @@ import { merge } from '@kbn/std';
import { isPlainObject } from 'lodash';
import type { Ecs } from '@kbn/cases-plugin/common';
import { TableId } from '@kbn/securitysolution-data-table';
import type { GroupOption } from '@kbn/securitysolution-grouping';
import type { GroupOption } from '@kbn/grouping';
import * as i18n from './translations';
export const buildAlertsQuery = (alertIds: string[]) => {

View file

@ -8,7 +8,7 @@
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { useDispatch } from 'react-redux';
import type { Filter, Query } from '@kbn/es-query';
import { isNoneGroup, useGrouping } from '@kbn/securitysolution-grouping';
import { isNoneGroup, useGrouping } from '@kbn/grouping';
import { isEmpty, isEqual } from 'lodash/fp';
import type { Storage } from '@kbn/kibana-utils-plugin/public';
import type { TableIdLiteral } from '@kbn/securitysolution-data-table';

View file

@ -9,12 +9,12 @@ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
import { v4 as uuidv4 } from 'uuid';
import type { Filter, Query } from '@kbn/es-query';
import { buildEsQuery } from '@kbn/es-query';
import type { GroupingAggregation } from '@kbn/securitysolution-grouping';
import { isNoneGroup } from '@kbn/securitysolution-grouping';
import type { GroupingAggregation } from '@kbn/grouping';
import { isNoneGroup } from '@kbn/grouping';
import { getEsQueryConfig } from '@kbn/data-plugin/common';
import type { DynamicGroupingProps } from '@kbn/securitysolution-grouping/src';
import type { DynamicGroupingProps } from '@kbn/grouping/src';
import type { TableIdLiteral } from '@kbn/securitysolution-data-table';
import { parseGroupingQuery } from '@kbn/securitysolution-grouping/src';
import { parseGroupingQuery } from '@kbn/grouping/src';
import type { RunTimeMappings } from '../../../common/store/sourcerer/model';
import { combineQueries } from '../../../common/lib/kuery';
import { SourcererScopeName } from '../../../common/store/sourcerer/model';

View file

@ -19,7 +19,7 @@ import {
import { euiThemeVars } from '@kbn/ui-theme';
import { isArray } from 'lodash/fp';
import React from 'react';
import type { GroupPanelRenderer } from '@kbn/securitysolution-grouping/src';
import type { GroupPanelRenderer } from '@kbn/grouping/src';
import type { AlertsGroupingAggregation } from './types';
import { firstNonNullValue } from '../../../../../common/endpoint/models/ecs_safety_helpers';
import type { GenericBuckets } from '../../../../../common/search_strategy';

View file

@ -7,7 +7,7 @@
import { EuiIcon } from '@elastic/eui';
import React from 'react';
import type { RawBucket, StatRenderer } from '@kbn/securitysolution-grouping';
import type { RawBucket, StatRenderer } from '@kbn/grouping';
import type { AlertsGroupingAggregation } from './types';
import * as i18n from '../translations';

View file

@ -6,8 +6,8 @@
*/
import type { BoolQuery } from '@kbn/es-query';
import type { NamedAggregation } from '@kbn/securitysolution-grouping';
import { isNoneGroup, getGroupingQuery } from '@kbn/securitysolution-grouping';
import type { NamedAggregation } from '@kbn/grouping';
import { isNoneGroup, getGroupingQuery } from '@kbn/grouping';
import type { RunTimeMappings } from '../../../../common/store/sourcerer/model';
interface AlertsGroupingQueryParams {

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import type { GenericBuckets } from '@kbn/securitysolution-grouping/src';
import type { GenericBuckets } from '@kbn/grouping/src';
// Elasticsearch returns `null` when a sub-aggregation cannot be computed
type NumberOrNull = number | null;
export interface AlertsGroupingAggregation {

View file

@ -13,8 +13,8 @@ import {
dataTableActions,
} from '@kbn/securitysolution-data-table';
import type { ViewSelection, TableId } from '@kbn/securitysolution-data-table';
import { useGetGroupSelectorStateless } from '@kbn/securitysolution-grouping/src/hooks/use_get_group_selector';
import { getTelemetryEvent } from '@kbn/securitysolution-grouping/src/telemetry/const';
import { useGetGroupSelectorStateless } from '@kbn/grouping/src/hooks/use_get_group_selector';
import { getTelemetryEvent } from '@kbn/grouping/src/telemetry/const';
import { groupIdSelector } from '../../../common/store/grouping/selectors';
import { useSourcererDataView } from '../../../common/containers/sourcerer';
import { SourcererScopeName } from '../../../common/store/sourcerer/model';

View file

@ -142,7 +142,7 @@
"@kbn/alerts-as-data-utils",
"@kbn/cloud-defend-plugin",
"@kbn/expandable-flyout",
"@kbn/securitysolution-grouping",
"@kbn/grouping",
"@kbn/securitysolution-data-table",
"@kbn/core-analytics-server",
"@kbn/analytics-client",

View file

@ -4903,6 +4903,10 @@
version "0.0.0"
uid ""
"@kbn/grouping@link:packages/kbn-grouping":
version "0.0.0"
uid ""
"@kbn/guided-onboarding-example-plugin@link:examples/guided_onboarding_example":
version "0.0.0"
uid ""
@ -5963,10 +5967,6 @@
version "0.0.0"
uid ""
"@kbn/securitysolution-grouping@link:packages/kbn-securitysolution-grouping":
version "0.0.0"
uid ""
"@kbn/securitysolution-hook-utils@link:packages/kbn-securitysolution-hook-utils":
version "0.0.0"
uid ""