Skip to content

Commit

Permalink
[8.x] [ResponseOps][Rules] Create the rule params package (elastic#19…
Browse files Browse the repository at this point in the history
…6971) (elastic#197367)

# Backport

This will backport the following commits from `main` to `8.x`:
- [[ResponseOps][Rules] Create the rule params package
(elastic#196971)](elastic#196971)

<!--- Backport version: 9.4.3 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Christos
Nasikas","email":"christos.nasikas@elastic.co"},"sourceCommit":{"committedDate":"2024-10-23T06:44:38Z","message":"[ResponseOps][Rules]
Create the rule params package (elastic#196971)\n\n## Summary\r\n\r\nThis PR
creates a package containing the schema of the params of all\r\nrule
types. It starts as
`schema.recordOf(schema.string(),\r\nschema.maybe(schema.any()))` which
is the current one. In subsequent\r\nPRs, the schema will be updated to
`schema.oneOf([apmRuleType,\r\nesQueryRuleType, ....])`. I also
substituted the definition of `params`\r\nin the alerting plugin with
the `params` exported from the package.\r\n\r\nTowards:
https://github.com/elastic/kibana/issues/187356\r\nFixes:
https://github.com/elastic/kibana/issues/195183\r\n\r\n### For
maintainers\r\n\r\n- [x] This was checked for breaking API changes and
was
[labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)\r\n-
[ ] This will appear in the **Release Notes** and follow
the\r\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by:
kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"a7a81c28973fd9b5bfc585b8e9b3cb7c5a86eb0b","branchLabelMapping":{"^v9.0.0$":"main","^v8.17.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","Team:ResponseOps","v9.0.0","Feature:Alerting/RulesFramework","backport:prev-minor","v8.17.0"],"title":"[ResponseOps][Rules]
Create the rule params
package","number":196971,"url":"https://github.com/elastic/kibana/pull/196971","mergeCommit":{"message":"[ResponseOps][Rules]
Create the rule params package (elastic#196971)\n\n## Summary\r\n\r\nThis PR
creates a package containing the schema of the params of all\r\nrule
types. It starts as
`schema.recordOf(schema.string(),\r\nschema.maybe(schema.any()))` which
is the current one. In subsequent\r\nPRs, the schema will be updated to
`schema.oneOf([apmRuleType,\r\nesQueryRuleType, ....])`. I also
substituted the definition of `params`\r\nin the alerting plugin with
the `params` exported from the package.\r\n\r\nTowards:
https://github.com/elastic/kibana/issues/187356\r\nFixes:
https://github.com/elastic/kibana/issues/195183\r\n\r\n### For
maintainers\r\n\r\n- [x] This was checked for breaking API changes and
was
[labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)\r\n-
[ ] This will appear in the **Release Notes** and follow
the\r\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by:
kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"a7a81c28973fd9b5bfc585b8e9b3cb7c5a86eb0b"}},"sourceBranch":"main","suggestedTargetBranches":["8.x"],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","branchLabelMappingKey":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/196971","number":196971,"mergeCommit":{"message":"[ResponseOps][Rules]
Create the rule params package (elastic#196971)\n\n## Summary\r\n\r\nThis PR
creates a package containing the schema of the params of all\r\nrule
types. It starts as
`schema.recordOf(schema.string(),\r\nschema.maybe(schema.any()))` which
is the current one. In subsequent\r\nPRs, the schema will be updated to
`schema.oneOf([apmRuleType,\r\nesQueryRuleType, ....])`. I also
substituted the definition of `params`\r\nin the alerting plugin with
the `params` exported from the package.\r\n\r\nTowards:
https://github.com/elastic/kibana/issues/187356\r\nFixes:
https://github.com/elastic/kibana/issues/195183\r\n\r\n### For
maintainers\r\n\r\n- [x] This was checked for breaking API changes and
was
[labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels)\r\n-
[ ] This will appear in the **Release Notes** and follow
the\r\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by:
kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"a7a81c28973fd9b5bfc585b8e9b3cb7c5a86eb0b"}},{"branch":"8.x","label":"v8.17.0","branchLabelMappingKey":"^v8.17.0$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->

Co-authored-by: Christos Nasikas <christos.nasikas@elastic.co>
  • Loading branch information
kibanamachine and cnasikas authored Oct 23, 2024
1 parent 87612c3 commit 7e23813
Show file tree
Hide file tree
Showing 24 changed files with 141 additions and 32 deletions.
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -727,6 +727,7 @@ packages/kbn-resizable-layout @elastic/kibana-data-discovery
examples/resizable_layout_examples @elastic/kibana-data-discovery
x-pack/test/plugin_functional/plugins/resolver_test @elastic/security-solution
packages/response-ops/feature_flag_service @elastic/response-ops
packages/response-ops/rule_params @elastic/response-ops
examples/response_stream @elastic/ml-ui
packages/kbn-rison @elastic/kibana-operations
x-pack/packages/rollup @elastic/kibana-management
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,7 @@
"@kbn/resizable-layout-examples-plugin": "link:examples/resizable_layout_examples",
"@kbn/resolver-test-plugin": "link:x-pack/test/plugin_functional/plugins/resolver_test",
"@kbn/response-ops-feature-flag-service": "link:packages/response-ops/feature_flag_service",
"@kbn/response-ops-rule-params": "link:packages/response-ops/rule_params",
"@kbn/response-stream-plugin": "link:examples/response_stream",
"@kbn/rison": "link:packages/kbn-rison",
"@kbn/rollup": "link:x-pack/packages/rollup",
Expand Down
3 changes: 3 additions & 0 deletions packages/response-ops/rule_params/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# @kbn/response-ops-rule-params

The package is responsible for the parameters' schema of all rule types. The alerting plugin uses this package to generate OAS documentation for the `params` property in the rule in requests and responses.
23 changes: 23 additions & 0 deletions packages/response-ops/rule_params/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/

export { ruleParamsSchema, ruleParamsSchemaWithDefaultValue } from './latest';

export {
ruleParamsSchema as ruleParamsSchemaV1,
ruleParamsSchemaWithDefaultValue as ruleParamsSchemaWithDefaultValueV1,
} from './v1';

export type { RuleParams } from './latest';
export type { RuleParamsWithDefaultValue } from './latest';

export type {
RuleParams as RuleParamsV1,
RuleParamsWithDefaultValue as RuleParamsWithDefaultValueV1,
} from './v1';
14 changes: 14 additions & 0 deletions packages/response-ops/rule_params/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*
* 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/

module.exports = {
preset: '@kbn/test/jest_node',
rootDir: '../../..',
roots: ['<rootDir>/packages/response-ops/rule_params'],
};
5 changes: 5 additions & 0 deletions packages/response-ops/rule_params/kibana.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"type": "shared-common",
"id": "@kbn/response-ops-rule-params",
"owner": "@elastic/response-ops"
}
10 changes: 10 additions & 0 deletions packages/response-ops/rule_params/latest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*
* 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/

export * from './v1';
6 changes: 6 additions & 0 deletions packages/response-ops/rule_params/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "@kbn/response-ops-rule-params",
"private": true,
"version": "1.0.0",
"license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0"
}
19 changes: 19 additions & 0 deletions packages/response-ops/rule_params/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"outDir": "target/types",
"types": [
"jest",
"node"
]
},
"include": [
"**/*.ts",
],
"exclude": [
"target/**/*"
],
"kbn_references": [
"@kbn/config-schema",
]
}
26 changes: 26 additions & 0 deletions packages/response-ops/rule_params/v1.ts
Original file line number Diff line number Diff line change
@@ -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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/

import { TypeOf, schema } from '@kbn/config-schema';

export const ruleParamsSchema = schema.recordOf(schema.string(), schema.maybe(schema.any()), {
meta: { description: 'The parameters for the rule.' },
});

export const ruleParamsSchemaWithDefaultValue = schema.recordOf(
schema.string(),
schema.maybe(schema.any()),
{
defaultValue: {},
meta: { description: 'The parameters for the rule.' },
}
);

export type RuleParams = TypeOf<typeof ruleParamsSchema>;
export type RuleParamsWithDefaultValue = TypeOf<typeof ruleParamsSchemaWithDefaultValue>;
2 changes: 2 additions & 0 deletions tsconfig.base.json
Original file line number Diff line number Diff line change
Expand Up @@ -1448,6 +1448,8 @@
"@kbn/resolver-test-plugin/*": ["x-pack/test/plugin_functional/plugins/resolver_test/*"],
"@kbn/response-ops-feature-flag-service": ["packages/response-ops/feature_flag_service"],
"@kbn/response-ops-feature-flag-service/*": ["packages/response-ops/feature_flag_service/*"],
"@kbn/response-ops-rule-params": ["packages/response-ops/rule_params"],
"@kbn/response-ops-rule-params/*": ["packages/response-ops/rule_params/*"],
"@kbn/response-stream-plugin": ["examples/response_stream"],
"@kbn/response-stream-plugin/*": ["examples/response_stream/*"],
"@kbn/rison": ["packages/kbn-rison"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchemaV1 } from '@kbn/response-ops-rule-params';
import { adHocRunStatus } from '../../../../constants';

export const statusSchema = schema.oneOf([
Expand All @@ -26,7 +27,7 @@ export const backfillResponseSchema = schema.object({
name: schema.string(),
tags: schema.arrayOf(schema.string()),
rule_type_id: schema.string(),
params: schema.recordOf(schema.string(), schema.maybe(schema.any())),
params: ruleParamsSchemaV1,
api_key_owner: schema.nullable(schema.string()),
api_key_created_by_user: schema.maybe(schema.nullable(schema.boolean())),
consumer: schema.string(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchemaWithDefaultValueV1 } from '@kbn/response-ops-rule-params';
import { validateDurationV1, validateHoursV1, validateTimezoneV1 } from '../../../validation';
import { notifyWhenSchemaV1, alertDelaySchemaV1 } from '../../../response';
import { alertsFilterQuerySchemaV1 } from '../../../../alerts_filter_query';
Expand Down Expand Up @@ -166,10 +167,7 @@ export const createBodySchema = schema.object({
})
)
),
params: schema.recordOf(schema.string(), schema.maybe(schema.any()), {
defaultValue: {},
meta: { description: 'The parameters for the rule.' },
}),
params: ruleParamsSchemaWithDefaultValueV1,
schedule: schema.object(
{
interval: schema.string({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchemaWithDefaultValueV1 } from '@kbn/response-ops-rule-params';
import { validateDurationV1, validateHoursV1, validateTimezoneV1 } from '../../../validation';
import { notifyWhenSchemaV1, alertDelaySchemaV1 } from '../../../response';
import { alertsFilterQuerySchemaV1 } from '../../../../alerts_filter_query';
Expand Down Expand Up @@ -152,10 +153,7 @@ export const updateBodySchema = schema.object({
})
)
),
params: schema.recordOf(schema.string(), schema.any(), {
defaultValue: {},
meta: { description: 'The parameters for the rule.' },
}),
params: ruleParamsSchemaWithDefaultValueV1,
actions: schema.arrayOf(actionSchema, { defaultValue: [] }),
notify_when: schema.maybe(schema.nullable(notifyWhenSchemaV1)),
alert_delay: schema.maybe(alertDelaySchemaV1),
Expand Down
17 changes: 7 additions & 10 deletions x-pack/plugins/alerting/common/routes/rule/response/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
*/

export {
ruleParamsSchema,
actionParamsSchema,
mappedParamsSchema,
ruleExecutionStatusSchema,
Expand All @@ -18,16 +17,9 @@ export {
scheduleIdsSchema,
} from './schemas/latest';

export type {
RuleParams,
RuleResponse,
RuleSnoozeSchedule,
RuleLastRun,
Monitoring,
} from './types/latest';
export type { RuleResponse, RuleSnoozeSchedule, RuleLastRun, Monitoring } from './types/latest';

export {
ruleParamsSchema as ruleParamsSchemaV1,
actionParamsSchema as actionParamsSchemaV1,
mappedParamsSchema as mappedParamsSchemaV1,
ruleExecutionStatusSchema as ruleExecutionStatusSchemaV1,
Expand All @@ -41,9 +33,14 @@ export {
} from './schemas/v1';

export type {
RuleParams as RuleParamsV1,
RuleResponse as RuleResponseV1,
RuleSnoozeSchedule as RuleSnoozeScheduleV1,
RuleLastRun as RuleLastRunV1,
Monitoring as MonitoringV1,
} from './types/v1';

export { ruleParamsSchemaV1 } from '@kbn/response-ops-rule-params';
export { ruleParamsSchema } from '@kbn/response-ops-rule-params';

export type { RuleParamsV1 } from '@kbn/response-ops-rule-params';
export type { RuleParams } from '@kbn/response-ops-rule-params';
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchemaV1 } from '@kbn/response-ops-rule-params';
import { rRuleResponseSchemaV1 } from '../../../r_rule';
import { alertsFilterQuerySchemaV1 } from '../../../alerts_filter_query';
import {
Expand All @@ -18,9 +19,6 @@ import {
import { validateNotifyWhenV1 } from '../../validation';
import { flappingSchemaV1 } from '../../common';

export const ruleParamsSchema = schema.recordOf(schema.string(), schema.maybe(schema.any()), {
meta: { description: 'The parameters for the rule.' },
});
export const actionParamsSchema = schema.recordOf(schema.string(), schema.maybe(schema.any()), {
meta: {
description:
Expand Down Expand Up @@ -497,7 +495,7 @@ export const ruleResponseSchema = schema.object({
}),
schedule: intervalScheduleSchema,
actions: schema.arrayOf(actionSchema),
params: ruleParamsSchema,
params: ruleParamsSchemaV1,
mapped_params: schema.maybe(mappedParamsSchema),
scheduled_task_id: schema.maybe(
schema.string({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,21 @@
*/

import type { TypeOf } from '@kbn/config-schema';
import { RuleParamsV1 } from '@kbn/response-ops-rule-params';
import {
ruleParamsSchemaV1,
ruleResponseSchemaV1,
ruleSnoozeScheduleSchemaV1,
ruleLastRunSchemaV1,
monitoringSchemaV1,
} from '..';

export type RuleParams = TypeOf<typeof ruleParamsSchemaV1>;
export type RuleSnoozeSchedule = TypeOf<typeof ruleSnoozeScheduleSchemaV1>;
export type RuleLastRun = TypeOf<typeof ruleLastRunSchemaV1>;
export type Monitoring = TypeOf<typeof monitoringSchemaV1>;

type RuleResponseSchemaType = TypeOf<typeof ruleResponseSchemaV1>;

export interface RuleResponse<Params extends RuleParams = never> {
export interface RuleResponse<Params extends RuleParamsV1 = never> {
id: RuleResponseSchemaType['id'];
enabled: RuleResponseSchemaType['enabled'];
name: RuleResponseSchemaType['name'];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchema } from '@kbn/response-ops-rule-params';
import { adHocRunStatus } from '../../../../../common/constants';

export const statusSchema = schema.oneOf([
Expand All @@ -32,7 +33,7 @@ export const backfillSchema = schema.object({
name: schema.string(),
tags: schema.arrayOf(schema.string()),
alertTypeId: schema.string(),
params: schema.recordOf(schema.string(), schema.maybe(schema.any())),
params: ruleParamsSchema,
apiKeyOwner: schema.nullable(schema.string()),
apiKeyCreatedByUser: schema.maybe(schema.nullable(schema.boolean())),
consumer: schema.string(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchemaWithDefaultValue } from '@kbn/response-ops-rule-params';
import { validateDuration } from '../../../validation';
import {
notifyWhenSchema,
Expand All @@ -23,7 +24,7 @@ export const createRuleDataSchema = schema.object(
consumer: schema.string(),
tags: schema.arrayOf(schema.string(), { defaultValue: [] }),
throttle: schema.maybe(schema.nullable(schema.string({ validate: validateDuration }))),
params: schema.recordOf(schema.string(), schema.maybe(schema.any()), { defaultValue: {} }),
params: ruleParamsSchemaWithDefaultValue,
schedule: schema.object({
interval: schema.string({ validate: validateDuration }),
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchemaWithDefaultValue } from '@kbn/response-ops-rule-params';
import { validateDuration } from '../../../validation';
import {
notifyWhenSchema,
Expand All @@ -23,7 +24,7 @@ export const updateRuleDataSchema = schema.object(
interval: schema.string({ validate: validateDuration }),
}),
throttle: schema.maybe(schema.nullable(schema.string({ validate: validateDuration }))),
params: schema.recordOf(schema.string(), schema.maybe(schema.any()), { defaultValue: {} }),
params: ruleParamsSchemaWithDefaultValue,
actions: schema.arrayOf(actionRequestSchema, { defaultValue: [] }),
systemActions: schema.maybe(schema.arrayOf(systemActionRequestSchema, { defaultValue: [] })),
notifyWhen: schema.maybe(schema.nullable(notifyWhenSchema)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { schema } from '@kbn/config-schema';
import { ruleParamsSchema } from '@kbn/response-ops-rule-params';
import {
ruleLastRunOutcomeValues,
ruleExecutionStatusValues,
Expand All @@ -18,7 +19,6 @@ import { notifyWhenSchema } from './notify_when_schema';
import { actionSchema, systemActionSchema } from './action_schemas';
import { flappingSchema } from './flapping_schema';

export const ruleParamsSchema = schema.recordOf(schema.string(), schema.maybe(schema.any()));
export const mappedParamsSchema = schema.recordOf(schema.string(), schema.maybe(schema.any()));

export const intervalScheduleSchema = schema.object({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import { TypeOf } from '@kbn/config-schema';
import { ruleParamsSchema } from '@kbn/response-ops-rule-params';
import {
ruleNotifyWhen,
ruleLastRunOutcomeValues,
Expand All @@ -14,7 +15,6 @@ import {
ruleExecutionStatusWarningReason,
} from '../constants';
import {
ruleParamsSchema,
snoozeScheduleSchema,
ruleExecutionStatusSchema,
ruleLastRunSchema,
Expand Down
3 changes: 2 additions & 1 deletion x-pack/plugins/alerting/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@
"@kbn/core-security-server",
"@kbn/core-http-server",
"@kbn/zod",
"@kbn/core-saved-objects-base-server-internal"
"@kbn/core-saved-objects-base-server-internal",
"@kbn/response-ops-rule-params"
],
"exclude": [
"target/**/*"
Expand Down
4 changes: 4 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6191,6 +6191,10 @@
version "0.0.0"
uid ""

"@kbn/response-ops-rule-params@link:packages/response-ops/rule_params":
version "0.0.0"
uid ""

"@kbn/response-stream-plugin@link:examples/response_stream":
version "0.0.0"
uid ""
Expand Down

0 comments on commit 7e23813

Please sign in to comment.