[ResponseOps][Rules] Add solution field to rule types (#212079)

We need to add a `solution` field to rule types in order to provide a
root-level categorization based on the Kibana solution/area that owns
each rule type. This will serve as a more reliable alternative to
previous attempts at `featureId`-based filtering.

## Summary

- Adds a `solution` field to rule type objects, accepting the values
`observability`, `security` and `stack`.
- Categorizes existing rule types.
- Updates tests with the new field.

## Verification steps

1. Check that the rule types you own have been categorized under the
correct solution
2. Create rules in multiple areas of Kibana
3. Check that those rules show up correctly in their UIs and work
correctly

## References

Closes #212017
This commit is contained in:
Umberto Pepato 2025-03-12 17:19:58 +01:00 committed by GitHub
parent bed491dc1a
commit f8a3051605
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
77 changed files with 200 additions and 10 deletions

View file

@ -99,6 +99,7 @@ export const ruleType: RuleType<
},
category: 'kibana',
producer: ALERTING_EXAMPLE_APP_ID,
solution: 'stack',
validate: {
params: schema.object({
instances: schema.maybe(schema.number()),

View file

@ -107,6 +107,7 @@ export const ruleType: RuleType<
},
category: 'example',
producer: ALERTING_EXAMPLE_APP_ID,
solution: 'stack',
getViewInAppRelativeUrl({ rule }) {
return `/app/${ALERTING_EXAMPLE_APP_ID}/astros/${rule.id}`;
},

View file

@ -66,6 +66,7 @@ function getPatternRuleType(): RuleType {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,

View file

@ -123,6 +123,7 @@ export class BaseRule {
): Promise<any> => this.execute(options),
category: DEFAULT_APP_CATEGORIES.management.id,
producer: 'monitoring',
solution: 'stack',
actionVariables: {
context: actionVariables,
},

View file

@ -162,6 +162,7 @@ export function getTransformHealthRuleType(
},
category: DEFAULT_APP_CATEGORIES.management.id,
producer: 'stackAlerts',
solution: 'stack',
minimumLicenseRequired: PLUGIN.MINIMUM_LICENSE_REQUIRED,
isExportable: true,
doesSetRecoveryContext: true,

View file

@ -98,6 +98,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
autoRecoverAlerts: true,

View file

@ -100,6 +100,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
validate: {

View file

@ -32,6 +32,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
autoRecoverAlerts: true,

View file

@ -228,6 +228,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
autoRecoverAlerts: true,

View file

@ -232,6 +232,7 @@ describe('scheduleBackfill()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},

View file

@ -93,6 +93,7 @@ describe('aggregate()', () => {
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,

View file

@ -173,6 +173,7 @@ describe('bulkDelete', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},

View file

@ -263,6 +263,7 @@ describe('bulkEdit()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -779,6 +780,7 @@ describe('bulkEdit()', () => {
return { state: {} };
},
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -3123,6 +3125,7 @@ describe('bulkEdit()', () => {
return { state: {} };
},
producer: 'alerts',
solution: 'stack',
category: 'test',
validLegacyConsumers: [],
});
@ -3169,6 +3172,7 @@ describe('bulkEdit()', () => {
return { state: {} };
},
producer: 'alerts',
solution: 'stack',
category: 'test',
validLegacyConsumers: [],
});

View file

@ -1620,6 +1620,7 @@ describe('create()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: extractReferencesFn,
injectReferences: injectReferencesFn,
@ -1813,6 +1814,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: extractReferencesFn,
injectReferences: injectReferencesFn,
@ -2659,6 +2661,7 @@ describe('create()', () => {
return { state: {} };
},
producer: 'alerts',
solution: 'stack',
});
await expect(rulesClient.create({ data })).rejects.toThrowErrorMatchingInlineSnapshot(
`"params invalid: [param1]: expected value of type [string] but got [undefined]"`
@ -3133,6 +3136,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3283,6 +3287,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3323,6 +3328,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3417,6 +3423,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3468,6 +3475,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3532,6 +3540,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3614,6 +3623,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3818,6 +3828,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),
@ -3877,6 +3888,7 @@ describe('create()', () => {
category: 'test',
validLegacyConsumers: [],
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: jest.fn(),

View file

@ -107,6 +107,7 @@ describe('find()', () => {
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -527,6 +528,7 @@ describe('find()', () => {
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -546,6 +548,7 @@ describe('find()', () => {
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -568,6 +571,7 @@ describe('find()', () => {
},
category: 'test',
producer: 'myApp',
solution: 'stack',
validate: {
params: schema.any(),
},
@ -586,6 +590,7 @@ describe('find()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: injectReferencesFn,
@ -786,6 +791,7 @@ describe('find()', () => {
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -805,6 +811,7 @@ describe('find()', () => {
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -827,6 +834,7 @@ describe('find()', () => {
},
category: 'test',
producer: 'myApp',
solution: 'stack',
validate: {
params: schema.any(),
},
@ -846,6 +854,7 @@ describe('find()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: injectReferencesFn,

View file

@ -364,6 +364,7 @@ describe('get()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: injectReferencesFn,
@ -503,6 +504,7 @@ describe('get()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: injectReferencesFn,

View file

@ -82,6 +82,7 @@ const listedTypes = new Map<string, RegistryRuleType>([
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,

View file

@ -219,6 +219,7 @@ describe('update()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -1103,6 +1104,7 @@ describe('update()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: extractReferencesFn,
injectReferences: injectReferencesFn,
@ -1685,6 +1687,7 @@ describe('update()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validLegacyConsumers: [],
});
await expect(
@ -2187,6 +2190,7 @@ describe('update()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},

View file

@ -21,6 +21,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
recoveryActionGroup: RecoveredActionGroup,
executor: jest.fn(),
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
autoRecoverAlerts: true,

View file

@ -65,6 +65,7 @@ const mockRuleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -1768,6 +1769,7 @@ describe('BackfillClient', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -2039,6 +2041,7 @@ describe('BackfillClient', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},

View file

@ -50,6 +50,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
ruleTaskTimeout: '1m',
validate: {
params: schema.any(),

View file

@ -24,6 +24,7 @@ describe('createAlertEventLogRecordObject', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},

View file

@ -51,6 +51,7 @@ describe('createGetAlertIndicesAliasFn', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
alerts: {
context: 'test',
mappings: { fieldMap: { field: { type: 'keyword', required: false } } },
@ -74,6 +75,7 @@ describe('createGetAlertIndicesAliasFn', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
alerts: {
context: 'spaceAware',
isSpaceAware: true,
@ -98,6 +100,7 @@ describe('createGetAlertIndicesAliasFn', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},

View file

@ -71,6 +71,7 @@ describe('getLicenseCheckForRuleType', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
minimumLicenseRequired: 'gold',
isExportable: true,
recoveryActionGroup: { id: 'recovered', name: 'Recovered' },
@ -210,6 +211,7 @@ describe('ensureLicenseForRuleType()', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
minimumLicenseRequired: 'gold',
isExportable: true,
recoveryActionGroup: { id: 'recovered', name: 'Recovered' },

View file

@ -50,6 +50,7 @@ const sampleRuleType: RuleType<never, never, {}, never, never, 'default', 'recov
defaultActionGroupId: 'default',
category: 'test',
producer: 'test',
solution: 'stack',
async executor() {
return { state: {} };
},

View file

@ -47,6 +47,7 @@ const ruleTypes: RegistryAlertTypeWithAuth[] = [
},
category: 'test',
producer: 'test',
solution: 'stack',
enabledInLicense: true,
defaultScheduleInterval: '10m',
hasAlertsMappings: false,

View file

@ -58,6 +58,7 @@ describe('ruleTypesRoute', () => {
},
category: 'test',
producer: 'test',
solution: 'stack',
enabledInLicense: true,
defaultScheduleInterval: '10m',
doesSetRecoveryContext: false,
@ -67,7 +68,7 @@ describe('ruleTypesRoute', () => {
} as RegistryAlertTypeWithAuth,
];
const expectedResult: Array<
AsApiContract<Omit<RegistryAlertTypeWithAuth, 'validLegacyConsumers'>>
AsApiContract<Omit<RegistryAlertTypeWithAuth, 'validLegacyConsumers' | 'solution'>>
> = [
{
id: '1',
@ -176,6 +177,7 @@ describe('ruleTypesRoute', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -233,6 +235,7 @@ describe('ruleTypesRoute', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,

View file

@ -68,6 +68,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},
@ -93,6 +94,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -132,6 +134,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -160,6 +163,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -190,6 +194,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
defaultScheduleInterval: 'foobar',
validate: {
params: { validate: (params) => params },
@ -220,6 +225,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
defaultScheduleInterval: '10s',
validate: {
params: { validate: (params) => params },
@ -250,6 +256,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
defaultScheduleInterval: '10s',
validate: {
params: { validate: (params) => params },
@ -300,6 +307,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -353,6 +361,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -385,6 +394,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
minimumLicenseRequired: 'basic',
isExportable: true,
validate: {
@ -423,6 +433,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
minimumLicenseRequired: 'basic',
isExportable: true,
validate: {
@ -475,6 +486,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -520,6 +532,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -549,6 +562,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
ruleTaskTimeout: '20m',
validate: {
params: { validate: (params) => params },
@ -581,6 +595,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
ruleTaskTimeout: '20m',
validate: {
params: { validate: (params) => params },
@ -614,6 +629,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -641,6 +657,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -661,6 +678,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -685,6 +703,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
alerts: {
context: 'test',
mappings: { fieldMap: { field: { type: 'keyword', required: false } } },
@ -717,6 +736,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},
@ -741,6 +761,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
ruleTaskTimeout: '20m',
validate: {
params: { validate: (params) => params },
@ -769,6 +790,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
ruleTaskTimeout: '20m',
validate: {
params: { validate: (params) => params },
@ -801,6 +823,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -835,6 +858,7 @@ describe('Create Lifecycle', () => {
"id": "recovered",
"name": "Recovered",
},
"solution": "stack",
"validLegacyConsumers": Array [],
"validate": Object {
"params": Object {
@ -879,6 +903,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},
@ -935,6 +960,7 @@ describe('Create Lifecycle', () => {
"name": "Recovered",
},
"ruleTaskTimeout": "20m",
"solution": "stack",
"validLegacyConsumers": Array [],
},
}
@ -1002,6 +1028,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},
@ -1029,6 +1056,7 @@ describe('Create Lifecycle', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
isExportable: true,
minimumLicenseRequired: 'basic',
recoveryActionGroup: { id: 'recovered', name: 'Recovered' },
@ -1080,6 +1108,7 @@ function ruleTypeWithVariables<ActionGroupIds extends string>(
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},

View file

@ -64,6 +64,7 @@ export interface RegistryRuleType
| 'actionVariables'
| 'category'
| 'producer'
| 'solution'
| 'minimumLicenseRequired'
| 'isExportable'
| 'ruleTaskTimeout'
@ -393,6 +394,7 @@ export class RuleTypeRegistry {
actionVariables: _ruleType.actionVariables,
category: _ruleType.category,
producer: _ruleType.producer,
solution: _ruleType.solution,
minimumLicenseRequired: _ruleType.minimumLicenseRequired,
isExportable: _ruleType.isExportable,
ruleTaskTimeout: _ruleType.ruleTaskTimeout,

View file

@ -42,6 +42,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
validate: {

View file

@ -26,6 +26,7 @@ describe('validateActions', () => {
recoveryActionGroup: RecoveredActionGroup,
executor: jest.fn(),
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
validate: {

View file

@ -125,6 +125,7 @@ export function getBeforeSetup(
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},

View file

@ -81,6 +81,7 @@ describe('listRuleTypes', () => {
name: 'alertingAlertType',
category: 'test',
producer: 'alerts',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -98,6 +99,7 @@ describe('listRuleTypes', () => {
name: 'myAppAlertType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -163,6 +165,7 @@ describe('listRuleTypes', () => {
"id": "recovered",
"name": "Recovered",
},
"solution": "stack",
"validLegacyConsumers": Array [],
},
Object {
@ -196,6 +199,7 @@ describe('listRuleTypes', () => {
"id": "recovered",
"name": "Recovered",
},
"solution": "stack",
"validLegacyConsumers": Array [],
},
]
@ -246,6 +250,7 @@ describe('listRuleTypes', () => {
"id": "recovered",
"name": "Recovered",
},
"solution": "stack",
"validLegacyConsumers": Array [],
},
]
@ -267,6 +272,7 @@ describe('listRuleTypes', () => {
name: 'myType',
category: 'test',
producer: 'myApp',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -285,6 +291,7 @@ describe('listRuleTypes', () => {
recoveryActionGroup: RecoveredActionGroup,
category: 'test',
producer: 'alerts',
solution: 'stack',
enabledInLicense: true,
hasAlertsMappings: false,
hasFieldsForAAD: false,
@ -337,6 +344,7 @@ describe('listRuleTypes', () => {
"id": "recovered",
"name": "Recovered",
},
"solution": "stack",
"validLegacyConsumers": Array [],
},
]

View file

@ -242,6 +242,7 @@ describe('resolve()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: injectReferencesFn,
@ -397,6 +398,7 @@ describe('resolve()', () => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
useSavedObjectReferences: {
extractReferences: jest.fn(),
injectReferences: injectReferencesFn,

View file

@ -390,6 +390,7 @@ beforeEach(() => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -409,6 +410,7 @@ beforeEach(() => {
},
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},

View file

@ -61,6 +61,7 @@ describe('isRuleExportable', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -121,6 +122,7 @@ describe('isRuleExportable', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -184,6 +186,7 @@ describe('isRuleExportable', () => {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},

View file

@ -155,6 +155,7 @@ export const getRuleType = (): NormalizedRuleType<
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},

View file

@ -154,6 +154,7 @@ export const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
autoRecoverAlerts: true,

View file

@ -73,6 +73,7 @@ const ruleType: jest.Mocked<
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
autoRecoverAlerts: true,

View file

@ -67,6 +67,7 @@ const ruleType: UntypedNormalizedRuleType = {
executor: jest.fn(),
category: 'test',
producer: 'alerts',
solution: 'stack',
validate: {
params: schema.any(),
},

View file

@ -265,6 +265,8 @@ export interface IRuleTypeAlerts<AlertData extends RuleAlertData = never> {
formatAlert?: FormatAlert<AlertData>;
}
export type RuleTypeSolution = 'observability' | 'security' | 'stack';
export interface RuleType<
Params extends RuleTypeParams = never,
ExtractedParams extends RuleTypeParams = never,
@ -308,6 +310,7 @@ export interface RuleType<
>;
category: string;
producer: string;
solution: RuleTypeSolution;
actionVariables?: {
context?: ActionVariable[];
state?: ActionVariable[];

View file

@ -244,6 +244,7 @@ export function registerAnomalyDetectionAlertType({
},
category: DEFAULT_APP_CATEGORIES.management.id,
producer: PLUGIN_ID,
solution: 'stack',
minimumLicenseRequired: MINIMUM_FULL_LICENSE,
isExportable: true,
doesSetRecoveryContext: true,

View file

@ -249,6 +249,7 @@ export function registerJobsMonitoringRuleType({
},
category: DEFAULT_APP_CATEGORIES.management.id,
producer: PLUGIN_ID,
solution: 'stack',
minimumLicenseRequired: MINIMUM_FULL_LICENSE,
isExportable: true,
doesSetRecoveryContext: true,

View file

@ -218,6 +218,7 @@ export function getRuleType(
},
category: DEFAULT_APP_CATEGORIES.management.id,
producer: STACK_ALERTS_FEATURE_ID,
solution: 'stack',
doesSetRecoveryContext: true,
alerts: STACK_ALERTS_AAD_CONFIG,
};

View file

@ -6,6 +6,7 @@
*/
import { AlertsClientError } from '@kbn/alerting-plugin/server';
import type { StackAlertType } from '../types';
import type { RuleExecutorOptions } from '../../types';
import {
canSkipBoundariesFetch,
@ -38,7 +39,8 @@ export async function executor({
GeoContainmentRuleState,
GeoContainmentAlertInstanceState,
GeoContainmentAlertInstanceContext,
typeof ActionGroupId
typeof ActionGroupId,
StackAlertType
>): Promise<{ state: GeoContainmentRuleState }> {
const boundariesRequestMeta = {
geoField: params.geoField,

View file

@ -168,6 +168,7 @@ export function getRuleType(): GeoContainmentRuleType {
executor,
category: DEFAULT_APP_CATEGORIES.management.id,
producer: STACK_ALERTS_FEATURE_ID,
solution: 'stack',
validate: {
params: trackingContainmentRuleParamsSchema,
},
@ -193,7 +194,6 @@ export function getRuleType(): GeoContainmentRuleType {
return injectEntityAndBoundaryIds(params, references);
},
},
// @ts-ignore
alerts: STACK_ALERTS_AAD_CONFIG,
};
}

View file

@ -13,6 +13,7 @@ import type {
AlertInstanceContext,
RuleTypeParams,
} from '@kbn/alerting-plugin/server';
import type { StackAlertType } from '../types';
import type { ActionGroupId, RecoveryActionGroupId } from './constants';
export interface BoundariesRequestMeta {
@ -82,5 +83,6 @@ export type GeoContainmentRuleType = RuleType<
GeoContainmentAlertInstanceState,
GeoContainmentAlertInstanceContext,
typeof ActionGroupId,
typeof RecoveryActionGroupId
typeof RecoveryActionGroupId,
StackAlertType
>;

View file

@ -214,6 +214,7 @@ export function getRuleType(
executor,
category: DEFAULT_APP_CATEGORIES.management.id,
producer: STACK_ALERTS_FEATURE_ID,
solution: 'stack',
doesSetRecoveryContext: true,
alerts: STACK_ALERTS_AAD_CONFIG,
};

View file

@ -21,6 +21,7 @@ import datemath from '@kbn/datemath';
import type { ESSearchResponse } from '@kbn/es-types';
import {
getAlertDetailsUrl,
observabilityFeatureId,
observabilityPaths,
ProcessorEvent,
} from '@kbn/observability-plugin/common';
@ -120,6 +121,7 @@ export function registerAnomalyRuleType({
},
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: APM_SERVER_FEATURE_ID,
solution: observabilityFeatureId,
minimumLicenseRequired: 'basic',
isExportable: true,
executor: async (

View file

@ -16,6 +16,7 @@ import type {
} from '@kbn/alerting-plugin/server';
import { AlertsClientError } from '@kbn/alerting-plugin/server';
import type { TimeUnitChar } from '@kbn/observability-plugin/common';
import { observabilityFeatureId } from '@kbn/observability-plugin/common';
import {
formatDurationFromTimeUnitChar,
getAlertDetailsUrl,
@ -118,6 +119,7 @@ export function registerErrorCountRuleType({
},
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: APM_SERVER_FEATURE_ID,
solution: observabilityFeatureId,
minimumLicenseRequired: 'basic',
isExportable: true,
executor: async (

View file

@ -17,6 +17,7 @@ import type {
} from '@kbn/alerting-plugin/server';
import { AlertsClientError } from '@kbn/alerting-plugin/server';
import type { TimeUnitChar } from '@kbn/observability-plugin/common';
import { observabilityFeatureId } from '@kbn/observability-plugin/common';
import {
asDuration,
formatDurationFromTimeUnitChar,
@ -127,6 +128,7 @@ export function registerTransactionDurationRuleType({
},
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: APM_SERVER_FEATURE_ID,
solution: observabilityFeatureId,
minimumLicenseRequired: 'basic',
isExportable: true,
executor: async (

View file

@ -16,6 +16,7 @@ import type {
} from '@kbn/alerting-plugin/server';
import { AlertsClientError } from '@kbn/alerting-plugin/server';
import type { TimeUnitChar } from '@kbn/observability-plugin/common';
import { observabilityFeatureId } from '@kbn/observability-plugin/common';
import {
formatDurationFromTimeUnitChar,
getAlertDetailsUrl,
@ -125,6 +126,7 @@ export function registerTransactionErrorRateRuleType({
},
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: APM_SERVER_FEATURE_ID,
solution: observabilityFeatureId,
minimumLicenseRequired: 'basic',
isExportable: true,
executor: async (

View file

@ -11,7 +11,7 @@ import type {
GetViewInAppRelativeUrlFnOpts,
AlertingServerSetup,
} from '@kbn/alerting-plugin/server';
import { observabilityPaths } from '@kbn/observability-plugin/common';
import { observabilityFeatureId, observabilityPaths } from '@kbn/observability-plugin/common';
import { metricInventoryThresholdRuleParamsSchema } from '@kbn/response-ops-rule-params/metric_inventory_threshold';
import type { InfraConfig } from '../../../../common/plugin_config_types';
import { METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID } from '../../../../common/alerting/metrics';
@ -79,6 +79,7 @@ export function registerInventoryThresholdRuleType(
actionGroups: [FIRED_ACTIONS, WARNING_ACTIONS],
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'infrastructure',
solution: observabilityFeatureId,
minimumLicenseRequired: 'basic',
isExportable: true,
/*

View file

@ -11,7 +11,7 @@ import type {
GetViewInAppRelativeUrlFnOpts,
AlertingServerSetup,
} from '@kbn/alerting-plugin/server';
import { observabilityPaths } from '@kbn/observability-plugin/common';
import { observabilityFeatureId, observabilityPaths } from '@kbn/observability-plugin/common';
import { logThresholdParamsSchema } from '@kbn/response-ops-rule-params/log_threshold';
import type { InfraConfig } from '../../../../common/plugin_config_types';
import { O11Y_AAD_FIELDS } from '../../../../common/constants';
@ -167,6 +167,7 @@ export function registerLogThresholdRuleType(
},
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'logs',
solution: observabilityFeatureId,
useSavedObjectReferences: {
extractReferences,
injectReferences,

View file

@ -11,7 +11,7 @@ import type {
GetViewInAppRelativeUrlFnOpts,
AlertingServerSetup,
} from '@kbn/alerting-plugin/server';
import { observabilityPaths } from '@kbn/observability-plugin/common';
import { observabilityFeatureId, observabilityPaths } from '@kbn/observability-plugin/common';
import { metricThresholdRuleParamsSchema } from '@kbn/response-ops-rule-params/metric_threshold';
import type { InfraConfig } from '../../../../common/plugin_config_types';
@ -121,6 +121,7 @@ export function registerMetricThresholdRuleType(
},
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'infrastructure',
solution: observabilityFeatureId,
alerts: MetricsRulesTypeAlertDefinition,
getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) =>
observabilityPaths.ruleDetails(rule.id),

View file

@ -111,6 +111,7 @@ export function thresholdRuleType(
},
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: observabilityFeatureId,
solution: 'observability' as const,
alerts: MetricsRulesTypeAlertDefinition,
getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) =>
observabilityPaths.ruleDetails(rule.id),

View file

@ -59,6 +59,7 @@ export function sloBurnRateRuleType(
],
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: sloFeatureId,
solution: 'observability' as const,
minimumLicenseRequired: 'platinum' as LicenseType,
isExportable: true,
executor: getRuleExecutor(basePath),

View file

@ -8,7 +8,7 @@
import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server';
import { isEmpty } from 'lodash';
import { GetViewInAppRelativeUrlFnOpts, AlertsClientError } from '@kbn/alerting-plugin/server';
import { observabilityPaths } from '@kbn/observability-plugin/common';
import { observabilityFeatureId, observabilityPaths } from '@kbn/observability-plugin/common';
import apm from 'elastic-apm-node';
import { SYNTHETICS_ALERT_RULE_TYPES } from '@kbn/rule-data-utils';
import { syntheticsMonitorStatusRuleParamsSchema } from '@kbn/response-ops-rule-params/synthetics_monitor_status';
@ -44,6 +44,7 @@ export const registerSyntheticsStatusCheckRule = (
id: SYNTHETICS_ALERT_RULE_TYPES.MONITOR_STATUS,
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'uptime',
solution: observabilityFeatureId,
name: STATUS_RULE_NAME,
validate: {
params: syntheticsMonitorStatusRuleParamsSchema,

View file

@ -19,7 +19,11 @@ import {
tlsRuleParamsSchema,
type TLSRuleParams,
} from '@kbn/response-ops-rule-params/synthetics_tls';
import { getAlertDetailsUrl, observabilityPaths } from '@kbn/observability-plugin/common';
import {
getAlertDetailsUrl,
observabilityFeatureId,
observabilityPaths,
} from '@kbn/observability-plugin/common';
import { ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils';
import { syntheticsRuleFieldMap } from '../../../common/rules/synthetics_rule_field_map';
import { SyntheticsPluginsSetupDependencies, SyntheticsServerSetup } from '../../types';
@ -52,6 +56,7 @@ export const registerSyntheticsTLSCheckRule = (
id: SYNTHETICS_ALERT_RULE_TYPES.TLS,
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'uptime',
solution: observabilityFeatureId,
name: TLS_CERTIFICATE.name,
validate: {
params: tlsRuleParamsSchema,

View file

@ -25,6 +25,7 @@ import {
alertsLocatorID,
AlertsLocatorParams,
getAlertUrl,
observabilityFeatureId,
observabilityPaths,
} from '@kbn/observability-plugin/common';
import { LocatorPublic } from '@kbn/share-plugin/common';
@ -107,6 +108,7 @@ export const durationAnomalyAlertFactory: UptimeAlertTypeFactory<ActionGroupIds>
id: CLIENT_ALERT_TYPES.DURATION_ANOMALY,
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'uptime',
solution: observabilityFeatureId,
name: durationAnomalyTranslations.alertFactoryName,
validate: {
params: uptimeDurationAnomalyRuleParamsSchema,

View file

@ -21,6 +21,7 @@ import {
AlertsLocatorParams,
formatDurationFromTimeUnitChar,
getAlertUrl,
observabilityFeatureId,
observabilityPaths,
TimeUnitChar,
} from '@kbn/observability-plugin/common';
@ -290,6 +291,7 @@ export const statusCheckAlertFactory: UptimeAlertTypeFactory<ActionGroupIds> = (
id: CLIENT_ALERT_TYPES.MONITOR_STATUS,
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'uptime',
solution: observabilityFeatureId,
name: i18n.translate('xpack.uptime.alerts.monitorStatus', {
defaultMessage: 'Uptime monitor status',
}),

View file

@ -13,6 +13,7 @@ import {
alertsLocatorID,
AlertsLocatorParams,
getAlertUrl,
observabilityFeatureId,
observabilityPaths,
} from '@kbn/observability-plugin/common';
import { LocatorPublic } from '@kbn/share-plugin/common';
@ -122,6 +123,7 @@ export const tlsAlertFactory: UptimeAlertTypeFactory<ActionGroupIds> = (
id: CLIENT_ALERT_TYPES.TLS,
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'uptime',
solution: observabilityFeatureId,
name: tlsTranslations.alertFactoryName,
validate: {
params: uptimeTLSRuleParamsSchema,

View file

@ -6,7 +6,7 @@
*/
import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server';
import { observabilityPaths } from '@kbn/observability-plugin/common';
import { observabilityFeatureId, observabilityPaths } from '@kbn/observability-plugin/common';
import moment from 'moment';
import { schema } from '@kbn/config-schema';
import { ActionGroupIdsOf } from '@kbn/alerting-plugin/common';
@ -102,6 +102,7 @@ export const tlsLegacyRuleFactory: LegacyUptimeRuleTypeFactory<ActionGroupIds> =
id: CLIENT_ALERT_TYPES.TLS_LEGACY,
category: DEFAULT_APP_CATEGORIES.observability.id,
producer: 'uptime',
solution: observabilityFeatureId,
name: tlsTranslations.legacyAlertFactoryName,
validate: {
params: schema.object({}),

View file

@ -44,6 +44,7 @@ export const legacyRulesNotificationRuleType = ({
defaultActionGroupId: 'default',
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
validate: {
params: legacyRulesNotificationParams,
},

View file

@ -60,6 +60,7 @@ export const createEqlAlertType = (
isExportable: false,
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
async executor(execOptions) {
const { sharedParams, services, state } = execOptions;

View file

@ -45,6 +45,7 @@ export const createEsqlAlertType = (
isExportable: false,
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
executor: (params) =>
esqlExecutor({
...params,

View file

@ -65,6 +65,7 @@ export const createIndicatorMatchAlertType = (
isExportable: false,
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
async executor(execOptions) {
const { sharedParams, services, state } = execOptions;

View file

@ -53,6 +53,7 @@ export const createMlAlertType = (
isExportable: false,
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
async executor(execOptions) {
const { sharedParams, services, state } = execOptions;

View file

@ -96,6 +96,7 @@ export const createNewTermsAlertType = (
isExportable: false,
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
async executor(execOptions) {
const { sharedParams, services, params, spaceId, state } = execOptions;

View file

@ -68,6 +68,7 @@ export const createQueryAlertType = (
isExportable: false,
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
async executor(execOptions) {
const { sharedParams, services, state } = execOptions;
return queryExecutor({

View file

@ -59,6 +59,7 @@ export const createThresholdAlertType = (
isExportable: false,
category: DEFAULT_APP_CATEGORIES.security.id,
producer: SERVER_APP_ID,
solution: 'security',
async executor(execOptions) {
const { sharedParams, services, startedAt, state } = execOptions;
const result = await thresholdExecutor({

View file

@ -652,6 +652,7 @@ export function defineRoutes(
executor: async () => ({ state: {} }),
category: 'siem.queryRule',
producer: 'alerts',
solution: 'security',
cancelAlertsOnRuleTimeout: true,
ruleTaskTimeout: '5m',
recoveryActionGroup: {

View file

@ -85,6 +85,7 @@ function getAlwaysFiringRuleType() {
},
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -153,6 +154,7 @@ function getCumulativeFiringRuleType() {
],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -205,6 +207,7 @@ function getNeverFiringRuleType() {
},
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -249,6 +252,7 @@ function getFailingRuleType() {
],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -290,6 +294,7 @@ function getExceedsAlertLimitRuleType() {
],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -347,6 +352,7 @@ function getAuthorizationRuleType(core: CoreSetup<FixtureStartDeps>) {
defaultActionGroupId: 'default',
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
minimumLicenseRequired: 'basic',
isExportable: true,
validate: {
@ -437,6 +443,7 @@ function getValidationRuleType() {
],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
minimumLicenseRequired: 'basic',
isExportable: true,
defaultActionGroupId: 'default',
@ -468,6 +475,7 @@ function getPatternFiringRuleType() {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -553,6 +561,7 @@ function getPatternFiringAlertsAsDataRuleType() {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'management',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -652,6 +661,7 @@ function getPatternSuccessOrFailureRuleType() {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -701,6 +711,7 @@ function getPatternFiringAutoRecoverFalseRuleType() {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -789,6 +800,7 @@ function getLongRunningPatternRuleType(cancelAlertsOnRuleTimeout: boolean = true
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -834,6 +846,7 @@ function getCancellableRuleType() {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -902,6 +915,7 @@ function getAlwaysFiringAlertAsDataRuleType() {
},
category: 'management',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -964,6 +978,7 @@ function getWaitingRuleType(logger: Logger) {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -1035,6 +1050,7 @@ function getSeverityRuleType() {
],
category: 'management',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'low',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -1152,6 +1168,7 @@ export function defineRuleTypes(
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -1168,6 +1185,7 @@ export function defineRuleTypes(
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'gold',
isExportable: true,
@ -1184,6 +1202,7 @@ export function defineRuleTypes(
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -1203,6 +1222,7 @@ export function defineRuleTypes(
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
actionVariables: {
state: [{ name: 'aStateVariable', description: 'this is a state variable' }],
@ -1227,6 +1247,7 @@ export function defineRuleTypes(
],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -1254,6 +1275,7 @@ export function defineRuleTypes(
],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -1284,6 +1306,7 @@ export function defineRuleTypes(
},
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
validate: {
params: schema.any(),
},
@ -1307,6 +1330,7 @@ export function defineRuleTypes(
],
category: 'kibana',
producer: 'alertsFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,

View file

@ -20,6 +20,7 @@ export function defineAlertTypes(
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsRestrictedFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,
@ -37,6 +38,7 @@ export function defineAlertTypes(
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer: 'alertsRestrictedFixture',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,

View file

@ -77,6 +77,7 @@ export class FixturePlugin implements Plugin<void, void, FixtureSetupDeps, Fixtu
],
category: 'kibana',
producer: 'fecAlertsTestPlugin',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,

View file

@ -29,6 +29,7 @@ export const noopAlertType: RuleType<{}, {}, {}, {}, {}, 'default'> = {
},
category: 'kibana',
producer: 'alerts',
solution: 'stack',
validate: {
params: { validate: (params) => params },
},
@ -58,6 +59,7 @@ export const alwaysFiringAlertType: RuleType<
defaultActionGroupId: 'default',
category: 'kibana',
producer: 'alerts',
solution: 'stack',
minimumLicenseRequired: 'basic',
isExportable: true,
async executor(alertExecutorOptions) {
@ -93,6 +95,7 @@ export const failingAlertType: RuleType<never, never, never, never, never, 'defa
],
category: 'kibana',
producer: 'alerts',
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,

View file

@ -323,6 +323,7 @@ function case2FeatureSplit(deps: PluginSetupDependencies) {
actionGroups: [{ id: 'default', name: 'Default' }],
category: 'kibana',
producer,
solution: 'stack',
defaultActionGroupId: 'default',
minimumLicenseRequired: 'basic',
isExportable: true,