mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[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:
parent
bed491dc1a
commit
f8a3051605
77 changed files with 200 additions and 10 deletions
|
@ -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()),
|
||||
|
|
|
@ -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}`;
|
||||
},
|
||||
|
|
|
@ -66,6 +66,7 @@ function getPatternRuleType(): RuleType {
|
|||
actionGroups: [{ id: 'default', name: 'Default' }],
|
||||
category: 'kibana',
|
||||
producer: 'alertsFixture',
|
||||
solution: 'stack',
|
||||
defaultActionGroupId: 'default',
|
||||
minimumLicenseRequired: 'basic',
|
||||
isExportable: true,
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -98,6 +98,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
autoRecoverAlerts: true,
|
||||
|
|
|
@ -100,6 +100,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
validate: {
|
||||
|
|
|
@ -32,6 +32,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
autoRecoverAlerts: true,
|
||||
|
|
|
@ -228,6 +228,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
autoRecoverAlerts: true,
|
||||
|
|
|
@ -232,6 +232,7 @@ describe('scheduleBackfill()', () => {
|
|||
},
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
validate: {
|
||||
params: { validate: (params) => params },
|
||||
},
|
||||
|
|
|
@ -93,6 +93,7 @@ describe('aggregate()', () => {
|
|||
name: 'myType',
|
||||
category: 'test',
|
||||
producer: 'myApp',
|
||||
solution: 'stack',
|
||||
enabledInLicense: true,
|
||||
hasAlertsMappings: false,
|
||||
hasFieldsForAAD: false,
|
||||
|
|
|
@ -173,6 +173,7 @@ describe('bulkDelete', () => {
|
|||
},
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
validate: {
|
||||
params: schema.any(),
|
||||
},
|
||||
|
|
|
@ -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: [],
|
||||
});
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -82,6 +82,7 @@ const listedTypes = new Map<string, RegistryRuleType>([
|
|||
name: 'myType',
|
||||
category: 'test',
|
||||
producer: 'myApp',
|
||||
solution: 'stack',
|
||||
enabledInLicense: true,
|
||||
hasAlertsMappings: false,
|
||||
hasFieldsForAAD: false,
|
||||
|
|
|
@ -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 },
|
||||
},
|
||||
|
|
|
@ -21,6 +21,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
|
|||
recoveryActionGroup: RecoveredActionGroup,
|
||||
executor: jest.fn(),
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
autoRecoverAlerts: true,
|
||||
|
|
|
@ -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 },
|
||||
},
|
||||
|
|
|
@ -50,6 +50,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
ruleTaskTimeout: '1m',
|
||||
validate: {
|
||||
params: schema.any(),
|
||||
|
|
|
@ -24,6 +24,7 @@ describe('createAlertEventLogRecordObject', () => {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
validate: {
|
||||
params: schema.any(),
|
||||
},
|
||||
|
|
|
@ -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(),
|
||||
},
|
||||
|
|
|
@ -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' },
|
||||
|
|
|
@ -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: {} };
|
||||
},
|
||||
|
|
|
@ -47,6 +47,7 @@ const ruleTypes: RegistryAlertTypeWithAuth[] = [
|
|||
},
|
||||
category: 'test',
|
||||
producer: 'test',
|
||||
solution: 'stack',
|
||||
enabledInLicense: true,
|
||||
defaultScheduleInterval: '10m',
|
||||
hasAlertsMappings: false,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 },
|
||||
},
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -42,6 +42,7 @@ const ruleType: jest.Mocked<UntypedNormalizedRuleType> = {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
validate: {
|
||||
|
|
|
@ -26,6 +26,7 @@ describe('validateActions', () => {
|
|||
recoveryActionGroup: RecoveredActionGroup,
|
||||
executor: jest.fn(),
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
validate: {
|
||||
|
|
|
@ -125,6 +125,7 @@ export function getBeforeSetup(
|
|||
},
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
validate: {
|
||||
params: { validate: (params) => params },
|
||||
},
|
||||
|
|
|
@ -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 [],
|
||||
},
|
||||
]
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 },
|
||||
},
|
||||
|
|
|
@ -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 },
|
||||
},
|
||||
|
|
|
@ -155,6 +155,7 @@ export const getRuleType = (): NormalizedRuleType<
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
validate: {
|
||||
params: schema.any(),
|
||||
},
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -73,6 +73,7 @@ const ruleType: jest.Mocked<
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
autoRecoverAlerts: true,
|
||||
|
|
|
@ -67,6 +67,7 @@ const ruleType: UntypedNormalizedRuleType = {
|
|||
executor: jest.fn(),
|
||||
category: 'test',
|
||||
producer: 'alerts',
|
||||
solution: 'stack',
|
||||
validate: {
|
||||
params: schema.any(),
|
||||
},
|
||||
|
|
|
@ -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[];
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
>;
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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,
|
||||
/*
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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',
|
||||
}),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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({}),
|
||||
|
|
|
@ -44,6 +44,7 @@ export const legacyRulesNotificationRuleType = ({
|
|||
defaultActionGroupId: 'default',
|
||||
category: DEFAULT_APP_CATEGORIES.security.id,
|
||||
producer: SERVER_APP_ID,
|
||||
solution: 'security',
|
||||
validate: {
|
||||
params: legacyRulesNotificationParams,
|
||||
},
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -652,6 +652,7 @@ export function defineRoutes(
|
|||
executor: async () => ({ state: {} }),
|
||||
category: 'siem.queryRule',
|
||||
producer: 'alerts',
|
||||
solution: 'security',
|
||||
cancelAlertsOnRuleTimeout: true,
|
||||
ruleTaskTimeout: '5m',
|
||||
recoveryActionGroup: {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -323,6 +323,7 @@ function case2FeatureSplit(deps: PluginSetupDependencies) {
|
|||
actionGroups: [{ id: 'default', name: 'Default' }],
|
||||
category: 'kibana',
|
||||
producer,
|
||||
solution: 'stack',
|
||||
defaultActionGroupId: 'default',
|
||||
minimumLicenseRequired: 'basic',
|
||||
isExportable: true,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue