[Cases][Docs] Add case template overview (#187815)

This commit is contained in:
Lisa Cawley 2024-07-17 10:05:29 -07:00 committed by GitHub
parent b75ca2a7b5
commit 88be854b89
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 264 additions and 124 deletions

View file

@ -8,7 +8,7 @@ Retrieves information about <<action-types,connectors>>.
In particular, only the connectors that are supported for use in cases are
returned. Refer to the list of supported external incident management systems in
<<add-case-connectors>>.
<<case-connectors>>.
[NOTE]
====

View file

@ -29,7 +29,7 @@ You must have `all` privileges for the *Cases* feature in the *Management*,
=== {api-description-title}
Connectors are used to interface with external systems. You must create a
connector before you can use it in your cases. Refer to <<add-case-connectors>>.
connector before you can use it in your cases. Refer to <<case-connectors>>.
If you set a default connector, it is automatically selected when you create
cases in {kib}. If you use the <<cases-api-create,create case API>>, however,

View file

@ -29,7 +29,7 @@ You must have `all` privileges for the *Cases* feature in the *Management*,
=== {api-description-title}
Connectors are used to interface with external systems. You must create a
connector before you can it in your cases. Refer to <<add-case-connectors>>.
connector before you can it in your cases. Refer to <<case-connectors>>.
=== {api-path-parms-title}

View file

@ -1,72 +0,0 @@
[[add-case-connectors]]
== Add connectors to cases
:frontmatter-description: Configure connectors to push case details to external incident management systems.
:frontmatter-tags-products: [kibana]
:frontmatter-tags-content-type: [how-to]
:frontmatter-tags-user-goals: [configure]
++++
<titleabbrev>Add connectors</titleabbrev>
++++
You can add connectors to cases to push information to these external incident
management systems:
* {ibm-r}
* {jira}
* {sn-itsm}
* {sn-sir}
* {swimlane}
* {webhook-cm}
NOTE: To create connectors and send cases to external systems, you must have the
appropriate {kib} feature privileges. Refer to <<setup-cases>>.
[discrete]
[[create-case-connectors]]
== Create connectors
:frontmatter-description: Open and track issues in {kib} cases.
:frontmatter-tags-products: [kibana]
:frontmatter-tags-content-type: [overview]
:frontmatter-tags-user-goals: [analyze]
You can create connectors in *{stack-manage-app} > {connectors-ui}*,
as described in <<action-types>>. Alternatively, you can create them in
*{stack-manage-app} > Cases*:
. Click *Settings*.
+
--
[role="screenshot"]
image::images/cases-settings.png[View case settings]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
--
. From the *Incident management system* list, select *Add new connector*.
. Select an external incident management system.
. Enter your required settings. Refer to <<resilient-action-type>>,
<<jira-action-type>>, <<servicenow-action-type>>, <<servicenow-sir-action-type>>,
<<swimlane-action-type>>, or <<cases-webhook-action-type>> for connector
configuration details.
. Click *Save*.
[discrete]
[[edit-case-connector-settings]]
== Edit connector settings
You can create additional connectors, update existing connectors, change
the default connector, and change case closure options.
. Go to *{stack-manage-app} > Cases* and click *Settings*.
. To change whether cases are automatically closed after they are sent to an
external system, update the case closure options.
. To change the default connector for new cases, select the connector from the
*Incident management system* list.
. To update a connector, click *Update <connector name>* and edit the connector
fields as required.

View file

@ -9,6 +9,8 @@ Cases are used to open and track issues directly in {kib}.
You can add assignees and tags to your cases, set their severity and status, and add alerts, comments, and visualizations.
You can create cases automatically when alerts occur or send cases to external incident management systems by configuring connectors.
You can also optionally add custom fields and case templates. preview:[]
[role="screenshot"]
image::images/cases-list.png[Cases page]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
@ -21,5 +23,4 @@ cases in *{stack-manage-app}*.
* <<setup-cases>>
* <<manage-cases>>
* <<add-case-connectors>>
* <<cases-settings>>
* <<manage-cases-settings>>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 280 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 208 KiB

Before After
Before After

View file

@ -1,4 +1,4 @@
include::cases.asciidoc[]
include::setup-cases.asciidoc[leveloffset=+1]
include::manage-cases.asciidoc[leveloffset=+1]
include::add-connectors.asciidoc[leveloffset=+1]
include::manage-cases-settings.asciidoc[leveloffset=+1]

View file

@ -0,0 +1,78 @@
[[manage-cases-settings]]
== Configure case settings
:frontmatter-description: Change the default behavior of cases by adding connectors, custom fields, templates, and closure options.
:frontmatter-tags-products: [kibana]
:frontmatter-tags-content-type: [how-to]
:frontmatter-tags-user-goals: [configure]
To change case closure options and add custom fields, templates, and connectors for external incident management systems, go to *{stack-manage-app} > Cases* and click *Settings*.
[role="screenshot"]
image::images/cases-settings.png[View case settings]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
[[case-closures]]
=== Case closures
If you close cases in your external incident management system, they will remain open in *Cases* until you close them manually.
To change whether cases are automatically closed after they are sent to an external system, update the case closure options.
[[case-connectors]]
=== External incident management systems
You can add connectors to cases to push information to these external incident
management systems:
* {ibm-r}
* {jira}
* {sn-itsm}
* {sn-sir}
* {swimlane}
* {webhook-cm}
NOTE: To create connectors and send cases to external systems, you must have the
appropriate {kib} feature privileges. Refer to <<setup-cases>>.
You can create connectors in *{stack-manage-app} > {connectors-ui}*, as described in <<action-types>>.
Alternatively, you can create them in *{stack-manage-app} > Cases > Settings*:
. From the *Incident management system* list, select *Add new connector*.
. Select an external incident management system.
. Enter your required settings. Refer to <<resilient-action-type>>,
<<jira-action-type>>, <<servicenow-action-type>>, <<servicenow-sir-action-type>>,
<<swimlane-action-type>>, or <<cases-webhook-action-type>> for connector
configuration details.
You can subsequently choose the connector when you create cases and use it in case templates.
To change the default connector for new cases, select the connector from the
*Incident management system* list.
To update a connector, click *Update <connector name>* and edit the connector fields as required.
[[case-templates]]
=== Templates
preview::[]
You can make the case creation process faster and more consistent by adding templates.
A template defines values for one or all of the case fields (such as severity, tags, description, and title) as well as any custom fields.
To create a template:
. In the *Templates* section, click *Add template*.
+
--
[role="screenshot"]
image::images/cases-templates-add.png[Add a template in case settings]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
--
. You must provide a template name and case severity.
You can optionally add template tags and a description, values for each case field, and a case connector.
When users create cases, they can optionally select a template and use its values or override them.
NOTE: If you update or delete templates, existing cases are unaffected.

View file

@ -6,6 +6,8 @@
:frontmatter-tags-content-type: [how-to]
:frontmatter-tags-user-goals: [analyze]
To perform these tasks, you must have <<setup-cases,full access>> to the appropriate case features in {kib}.
[[open-case]]
=== Open a new case
@ -19,6 +21,8 @@ image::images/cases-create.png[Create a case in {stack-manage-app}]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
--
. If you defined <<case-templates,templates>>, you can optionally select one to use its default field values. preview:[]
. Give the case a name, severity, and description.
+
TIP: In the `Description` area, you can use
@ -28,11 +32,11 @@ text.
. Optionally, add a category, assignees, and tags.
You can add users only if they meet the necessary <<setup-cases,prerequisites>>.
. preview:[] If you defined any custom fields, they appear in the *Additional fields* section.
Check out <<case-custom-fields>>.
. If you defined any custom fields, they appear in the *Additional fields* section.
Check out <<case-custom-fields>>. preview:[]
. For the *External incident management system*, select a connector. For more
information, refer to <<add-case-connectors>>.
information, refer to <<case-connectors>>.
. After you've completed all of the required fields, click *Create case*.

View file

@ -432,4 +432,9 @@ This connector was renamed. Refer to <<openai-action-type>>.
== APIs
For the most up-to-date API details, refer to the
{kib-repo}/tree/{branch}/x-pack/plugins/alerting/docs/openapi[alerting], {kib-repo}/tree/{branch}/x-pack/plugins/cases/docs/openapi[cases], {kib-repo}/tree/{branch}/x-pack/plugins/actions/docs/openapi[connectors], and {kib-repo}/tree/{branch}/x-pack/plugins/ml/common/openapi[machine learning] open API specifications.
{kib-repo}/tree/{branch}/x-pack/plugins/alerting/docs/openapi[alerting], {kib-repo}/tree/{branch}/x-pack/plugins/cases/docs/openapi[cases], {kib-repo}/tree/{branch}/x-pack/plugins/actions/docs/openapi[connectors], and {kib-repo}/tree/{branch}/x-pack/plugins/ml/common/openapi[machine learning] open API specifications.
[role="exclude",id="add-case-connectors"]
== Add connectors to cases
This content has moved. Refer to <<manage-cases-settings>>.

View file

@ -28,7 +28,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
700
);
await testSubjects.setValue('custom-field-label-input', 'my-field');
await testSubjects.click('custom-field-flyout-save');
await testSubjects.click('common-flyout-save');
await commonScreenshots.takeScreenshot(
'cases-custom-field-settings',
screenshotDirectories,

View file

@ -19,6 +19,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await pageObjects.header.waitUntilLoadingHasFinished();
await testSubjects.click('configure-case-button');
await commonScreenshots.takeScreenshot('cases-settings', screenshotDirectories);
await testSubjects.click('add-template');
await commonScreenshots.takeScreenshot(
'cases-add-template',
screenshotDirectories,
1400,
1000
);
await testSubjects.click('common-flyout-cancel');
await testSubjects.click('add-custom-field');
await commonScreenshots.takeScreenshot(
'cases-add-custom-field',
@ -27,7 +35,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
700
);
await testSubjects.setValue('custom-field-label-input', 'my-field');
await testSubjects.click('custom-field-flyout-save');
await testSubjects.click('common-flyout-save');
await commonScreenshots.takeScreenshot(
'cases-custom-field-settings',
screenshotDirectories,

View file

@ -26,7 +26,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) {
700
);
await testSubjects.setValue('custom-field-label-input', 'my-field');
await testSubjects.click('custom-field-flyout-save');
await testSubjects.click('common-flyout-save');
await commonScreenshots.takeScreenshot(
'cases-custom-fields-view',
screenshotDirectories,

View file

@ -1,23 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {
const cases = getService('cases');
const commonScreenshots = getService('commonScreenshots');
const screenshotDirectories = ['response_ops_docs', 'stack_cases'];
describe('edit external connections', function () {
it('cases configure screenshot', async () => {
await cases.navigation.navigateToApp();
await cases.navigation.navigateToConfigurationPage();
await commonScreenshots.takeScreenshot('cases-settings', screenshotDirectories, 1400, 1024);
});
});
}

View file

@ -47,8 +47,8 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) {
});
loadTestFile(require.resolve('./list_view'));
loadTestFile(require.resolve('./details_view'));
loadTestFile(require.resolve('./external_connections'));
loadTestFile(require.resolve('./custom_fields'));
loadTestFile(require.resolve('./settings'));
loadTestFile(require.resolve('./details_view'));
});
}

View file

@ -0,0 +1,44 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function ({ getPageObject, getService }: FtrProviderContext) {
const cases = getService('cases');
const commonScreenshots = getService('commonScreenshots');
const testSubjects = getService('testSubjects');
const screenshotDirectories = ['response_ops_docs', 'stack_cases'];
describe('case settings', function () {
it('case settings screenshot', async () => {
await cases.navigation.navigateToApp();
await cases.navigation.navigateToConfigurationPage();
await commonScreenshots.takeScreenshot('cases-settings', screenshotDirectories, 1400, 1024);
await testSubjects.click('add-template');
await commonScreenshots.takeScreenshot(
'cases-templates-add',
screenshotDirectories,
1400,
1000
);
await testSubjects.click('common-flyout-cancel');
// await testSubjects.click('add-custom-field');
// await commonScreenshots.takeScreenshot(
// 'cases-custom-fields-add',
// screenshotDirectories,
// 1400,
// 700
// );
// await testSubjects.setValue('custom-field-label-input', 'my-field');
// await testSubjects.click('common-flyout-save');
// await commonScreenshots.takeScreenshot('cases-settings', screenshotDirectories, 1400, 1024);
// await cases.navigation.navigateToApp();
// await testSubjects.click('createNewCaseBtn');
// await commonScreenshots.takeScreenshot('cases-create', screenshotDirectories, 1400, 1900);
// await testSubjects.click('create-case-cancel');
});
});
}

View file

@ -7,7 +7,17 @@
import { createTestConfig } from '../../config.base';
const enabledActionTypes = ['.index', '.server-log'];
const enabledActionTypes = [
'.cases-webhook',
'.index',
'.jira',
'.resilient',
'.server-log',
'.servicenow',
'.servicenow-itom',
'.servicenow-sir',
'.swimlane',
];
export default createTestConfig({
serverlessProject: 'oblt',

View file

@ -16,5 +16,6 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) {
});
loadTestFile(require.resolve('./list_view'));
loadTestFile(require.resolve('./settings'));
});
}

View file

@ -67,12 +67,6 @@ export default function ({ getPageObject, getPageObjects, getService }: FtrProvi
await svlCommonScreenshots.takeScreenshot('cases', screenshotDirectories, 1700, 1024);
});
it('case settings screenshot', async () => {
await navigateToCasesApp(getPageObject, getService, owner);
await testSubjects.click('configure-case-button');
await svlCommonScreenshots.takeScreenshot('add-case-connector', screenshotDirectories);
});
it('case detail screenshot', async () => {
await pageObjects.common.navigateToUrlWithBrowserHistory(
'observability',

View file

@ -0,0 +1,48 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { OBSERVABILITY_OWNER } from '@kbn/cases-plugin/common';
import { FtrProviderContext } from '../../../../../ftr_provider_context';
import { navigateToCasesApp } from '../../../../../../shared/lib/cases';
export default function ({ getPageObject, getPageObjects, getService }: FtrProviderContext) {
const svlCases = getService('svlCases');
const svlCommonScreenshots = getService('svlCommonScreenshots');
const screenshotDirectories = ['response_ops_docs', 'observability_cases'];
const testSubjects = getService('testSubjects');
const owner = OBSERVABILITY_OWNER;
describe('Observability case settings', function () {
after(async () => {
await svlCases.api.deleteAllCaseItems();
});
it('case settings screenshots', async () => {
await navigateToCasesApp(getPageObject, getService, owner);
await testSubjects.click('configure-case-button');
await svlCommonScreenshots.takeScreenshot(
'observability-cases-settings',
screenshotDirectories
);
await testSubjects.click('add-template');
await svlCommonScreenshots.takeScreenshot(
'observability-cases-templates',
screenshotDirectories,
1400,
1000
);
await testSubjects.click('common-flyout-cancel');
await testSubjects.click('dropdown-connectors');
await testSubjects.click('dropdown-connector-add-connector');
await svlCommonScreenshots.takeScreenshot(
'observability-cases-add-connector',
screenshotDirectories
);
await testSubjects.click('euiFlyoutCloseButton');
});
});
}

View file

@ -16,5 +16,6 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) {
});
loadTestFile(require.resolve('./list_view'));
loadTestFile(require.resolve('./settings'));
});
}

View file

@ -75,13 +75,6 @@ export default function ({ getPageObject, getPageObjects, getService }: FtrProvi
await svlCommonScreenshots.takeScreenshot('cases-home-page', screenshotDirectories);
});
it('case settings screenshot', async () => {
await navigateToCasesApp(getPageObject, getService, owner);
await testSubjects.click('configure-case-button');
await pageObjects.header.waitUntilLoadingHasFinished();
await svlCommonScreenshots.takeScreenshot('case-settings', screenshotDirectories);
});
it('case detail screenshot', async () => {
await pageObjects.common.navigateToUrlWithBrowserHistory(
'securitySolution',

View file

@ -0,0 +1,48 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { SECURITY_SOLUTION_OWNER } from '@kbn/cases-plugin/common';
import { FtrProviderContext } from '../../../../../ftr_provider_context';
import { navigateToCasesApp } from '../../../../../../shared/lib/cases';
export default function ({ getPageObject, getPageObjects, getService }: FtrProviderContext) {
const pageObjects = getPageObjects(['common', 'header', 'svlCommonPage', 'svlCommonNavigation']);
const svlCases = getService('svlCases');
const svlCommonScreenshots = getService('svlCommonScreenshots');
const screenshotDirectories = ['response_ops_docs', 'security_cases'];
const testSubjects = getService('testSubjects');
const owner = SECURITY_SOLUTION_OWNER;
describe('security case settings', function () {
after(async () => {
await svlCases.api.deleteAllCaseItems();
});
beforeEach(async () => {
await pageObjects.svlCommonPage.loginWithRole('admin');
});
it('case settings screenshot', async () => {
await navigateToCasesApp(getPageObject, getService, owner);
await testSubjects.click('configure-case-button');
await pageObjects.header.waitUntilLoadingHasFinished();
await svlCommonScreenshots.takeScreenshot('security-cases-settings', screenshotDirectories);
await testSubjects.click('add-template');
await svlCommonScreenshots.takeScreenshot(
'security-cases-templates',
screenshotDirectories,
1400,
1000
);
await testSubjects.click('common-flyout-cancel');
await testSubjects.click('dropdown-connectors');
await testSubjects.click('dropdown-connector-add-connector');
await svlCommonScreenshots.takeScreenshot('security-cases-connectors', screenshotDirectories);
await testSubjects.click('euiFlyoutCloseButton');
});
});
}