From f725f5a51524adb05eac2d599bf9745886865cdf Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Tue, 21 May 2024 14:41:08 -0400 Subject: [PATCH 01/13] fix inconsistent capitalization --- locales/en/public.json | 2 +- src/app/AppLayout/AppLayout.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/locales/en/public.json b/locales/en/public.json index 6a54478bb..c74f51e48 100644 --- a/locales/en/public.json +++ b/locales/en/public.json @@ -16,7 +16,7 @@ "APP_LAUNCHER": { "ABOUT": "About", "DOCUMENTATION": "Documentation", - "GUIDED_TOUR": "Guided tour", + "GUIDED_TOUR": "Guided Tour", "HELP": "Help", "QUICKSTARTS": "Quick Starts" } diff --git a/src/app/AppLayout/AppLayout.tsx b/src/app/AppLayout/AppLayout.tsx index cf7d5bbe3..cfebdef47 100644 --- a/src/app/AppLayout/AppLayout.tsx +++ b/src/app/AppLayout/AppLayout.tsx @@ -336,7 +336,7 @@ export const AppLayout: React.FC = ({ children }) => { , - + {t('AppLayout.APP_LAUNCHER.GUIDED_TOUR')} , From 26214296129157abc55ea50a468233ceca7a32d2 Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 22 May 2024 18:33:49 -0400 Subject: [PATCH 02/13] fix inconsistent capitalization --- src/app/About/AboutDescription.tsx | 2 +- src/app/AppLayout/NotificationCenter.tsx | 4 +- src/app/CreateRecording/CreateRecording.tsx | 6 +- .../CreateRecording/CustomRecordingForm.tsx | 2 +- src/app/Dashboard/DashboardCardActionMenu.tsx | 2 +- .../Dashboard/LayoutTemplateUploadModal.tsx | 4 +- .../cryostat-dashboard-templates.tsx | 2 +- src/app/Events/EventTemplates.tsx | 2 +- src/app/Joyride/CryostatJoyride.tsx | 4 +- src/app/Modal/types.ts | 66 ++++++------- .../QuickStarts/QuickStartsCatalogPage.tsx | 2 +- src/app/QuickStarts/README.md | 4 +- .../automated-rules-quickstart.tsx | 30 +++--- .../quickstarts/generic-quickstart.tsx | 2 +- .../quickstarts/settings-quickstart.tsx | 18 ++-- .../quickstarts/start-a-recording.tsx | 8 +- .../topology/custom-target-quickstart.tsx | 20 ++-- .../topology/group-start-recordings.tsx | 8 +- src/app/Recordings/ActiveRecordingsTable.tsx | 2 +- src/app/Recordings/RecordingFilters.tsx | 6 +- src/app/Rules/CreateRule.tsx | 24 ++--- src/app/Rules/Rules.tsx | 28 +++--- src/app/Rules/RulesUploadModal.tsx | 10 +- .../Credentials/CreateCredentialModal.tsx | 4 +- .../Credentials/CredentialTestTable.tsx | 2 +- .../Credentials/StoredCredentials.tsx | 4 +- .../Shared/Components/JmxAuthDescription.tsx | 2 +- .../MatchExpressionVisualizer.tsx | 6 +- src/app/Shared/Services/api.types.ts | 2 +- src/app/Shared/Services/api.utils.ts | 52 +++++----- src/app/Shared/Services/service.utils.ts | 2 +- src/app/Topology/Actions/CreateTarget.tsx | 10 +- src/app/Topology/Actions/QuickSearchPanel.tsx | 4 +- .../Actions/quicksearches/custom-target.tsx | 2 +- src/app/Topology/Actions/utils.tsx | 2 +- src/app/Topology/Entity/EntityDetails.tsx | 86 ++++++++--------- src/app/Topology/Toolbar/DisplayOptions.tsx | 2 +- src/app/build.json | 2 +- src/app/routes.tsx | 14 +-- .../AutomatedAnalysisConfigDrawer.test.tsx | 2 +- src/test/Events/EventTemplates.test.tsx | 4 +- .../Recordings/ActiveRecordingsTable.test.tsx | 2 +- src/test/Rules/CreateRule.test.tsx | 20 ++-- src/test/Rules/Rules.test.tsx | 4 +- .../Rules/__snapshots__/Rules.test.tsx.snap | 14 +-- .../Settings/DeletionDialogControl.test.tsx | 2 +- .../Settings/NotificationControl.test.tsx | 2 +- .../DeletionDialogControl.test.tsx.snap | 44 ++++----- .../NotificationControl.test.tsx.snap | 96 +++++++++---------- .../__snapshots__/Settings.test.tsx.snap | 2 +- 50 files changed, 322 insertions(+), 322 deletions(-) diff --git a/src/app/About/AboutDescription.tsx b/src/app/About/AboutDescription.tsx index e091becb2..af4282917 100644 --- a/src/app/About/AboutDescription.tsx +++ b/src/app/About/AboutDescription.tsx @@ -40,7 +40,7 @@ export const AboutDescription: React.FC = () => { const result = cryostatVersion.match(expr); if (!result) { notificationsContext.warning( - 'Cryostat Version Parse Failure', + 'Cryostat version parse failure', `Could not parse Cryostat version string '${cryostatVersion}'.`, ); return; diff --git a/src/app/AppLayout/NotificationCenter.tsx b/src/app/AppLayout/NotificationCenter.tsx index 06e8bf9b2..4e1c0812a 100644 --- a/src/app/AppLayout/NotificationCenter.tsx +++ b/src/app/AppLayout/NotificationCenter.tsx @@ -60,8 +60,8 @@ export const NotificationCenter: React.FC = ({ onClose const [totalUnreadNotificationsCount, setTotalUnreadNotificationsCount] = React.useState(0); const [isHeaderDropdownOpen, setHeaderDropdownOpen] = React.useState(false); const [drawerCategories, setDrawerCategories] = React.useState([ - { title: 'Completed Actions', isExpanded: true, notifications: [] as Notification[], unreadCount: 0 }, - { title: 'Cryostat Status', isExpanded: false, notifications: [] as Notification[], unreadCount: 0 }, + { title: 'Completed actions', isExpanded: true, notifications: [] as Notification[], unreadCount: 0 }, + { title: 'Cryostat status', isExpanded: false, notifications: [] as Notification[], unreadCount: 0 }, { title: 'Problems', isExpanded: true, notifications: [] as Notification[], unreadCount: 0 }, ] as NotificationDrawerCategory[]); diff --git a/src/app/CreateRecording/CreateRecording.tsx b/src/app/CreateRecording/CreateRecording.tsx index 08e2ad233..80a990b17 100644 --- a/src/app/CreateRecording/CreateRecording.tsx +++ b/src/app/CreateRecording/CreateRecording.tsx @@ -29,14 +29,14 @@ export const CreateRecording: React.FC = () => { ); return ( - + - + - + diff --git a/src/app/CreateRecording/CustomRecordingForm.tsx b/src/app/CreateRecording/CustomRecordingForm.tsx index dfe0a1688..5eac26648 100644 --- a/src/app/CreateRecording/CustomRecordingForm.tsx +++ b/src/app/CreateRecording/CustomRecordingForm.tsx @@ -286,7 +286,7 @@ export const CustomRecordingForm: React.FC = () => { setAdvancedRecordingOptions(recordingOptions); }, error: (error) => { - setErrorMessage(isTargetAgentHttp(target) ? 'Unsupported operation: Create recordings' : error.message); + setErrorMessage(isTargetAgentHttp(target) ? 'Unsupported operation: Create Recordings' : error.message); setTemplates([]); setFormData((old) => ({ ...old, template: undefined })); setAdvancedRecordingOptions({}); diff --git a/src/app/Dashboard/DashboardCardActionMenu.tsx b/src/app/Dashboard/DashboardCardActionMenu.tsx index 3a2c40b1d..68b9d62ce 100644 --- a/src/app/Dashboard/DashboardCardActionMenu.tsx +++ b/src/app/Dashboard/DashboardCardActionMenu.tsx @@ -59,7 +59,7 @@ export const DashboardCardActionMenu: React.FC = ({ {t('REMOVE', { ns: 'common' })} , - + {t('DashboardCardActionMenu.RESET_SIZE')} , ]} diff --git a/src/app/Dashboard/LayoutTemplateUploadModal.tsx b/src/app/Dashboard/LayoutTemplateUploadModal.tsx index 152739dd9..af247ad8e 100644 --- a/src/app/Dashboard/LayoutTemplateUploadModal.tsx +++ b/src/app/Dashboard/LayoutTemplateUploadModal.tsx @@ -162,7 +162,7 @@ export const LayoutTemplateUploadModal: React.FC onSingleSuccess( fileUpload.file.name, - Warning: To see this template in the template picker, make sure the Cryostat Feature Level is set + Warning: To see this template in the template picker, make sure the Cryostat Feature level is set to BETA. , ); @@ -250,7 +250,7 @@ export const LayoutTemplateUploadModal: React.FC } >
- + = (_) => { (t: EventTemplate) => { let actions = [ { - title: 'Create Recording...', + title: 'Create recording...', onClick: () => navigate('/recordings/create', { state: { template: { name: t.name, type: t.type } } as Partial, diff --git a/src/app/Joyride/CryostatJoyride.tsx b/src/app/Joyride/CryostatJoyride.tsx index 17b78251c..896d0051d 100644 --- a/src/app/Joyride/CryostatJoyride.tsx +++ b/src/app/Joyride/CryostatJoyride.tsx @@ -108,10 +108,10 @@ const CryostatJoyride: React.FC = ({ children }) => { placement: 'right', }, { - title: 'Automated Rules', + title: 'Automated rules', content: (

- Create, delete, enable, and view Cryostat Automated Rules in this view. Automated Rules + Create, delete, enable, and view Cryostat Automated rules in this view. Automated rules allow you start recordings on target JVMs based on a set of conditions.

), diff --git a/src/app/Modal/types.ts b/src/app/Modal/types.ts index 52f997f47..dda3de0a3 100644 --- a/src/app/Modal/types.ts +++ b/src/app/Modal/types.ts @@ -39,56 +39,56 @@ export interface DeleteOrDisableWarning { export const DeleteActiveRecordings: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteActiveRecordings, title: 'Permanently delete your JFR recording?', - label: 'Delete Active Recording', - description: `If you click delete, recording and report data will be lost.`, + label: 'Delete Active recording', + description: `If you click Delete, recording and report data will be lost.`, ariaLabel: 'Recording delete warning', }; export const DeleteArchivedRecordings: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteArchivedRecordings, - title: 'Permanently delete your archived JFR recording?', - label: 'Delete Archived Recording', - description: `If you click delete, recording and report data will be lost.`, + title: 'Permanently delete your Archived JFR recording?', + label: 'Delete Archived recording', + description: `If you click Delete, recording and report data will be lost.`, ariaLabel: 'Recording delete warning', }; export const DeleteAutomatedRules: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteAutomatedRules, - title: 'Permanently delete your Automated Rule?', - label: 'Delete Automated Rule', - description: `If you click delete, rule data will be lost.`, + title: 'Permanently delete your Automated rule?', + label: 'Delete Automated rule', + description: `If you click Delete, rule data will be lost.`, ariaLabel: 'Automated rule delete warning', }; export const DisableAutomatedRules: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DisableAutomatedRules, - title: 'Disable your Automated Rule?', - label: 'Disable Automated Rule', + title: 'Disable your Automated rule?', + label: 'Disable Automated rule', description: `If you click Disable, the rule will be disabled.`, ariaLabel: 'Automated rule disable warning', }; export const DeleteEventTemplates: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteEventTemplates, - title: 'Permanently delete your Event Template?', - label: 'Delete Event Template', - description: `If you click delete, custom event template data will be lost.`, + title: 'Permanently delete your Event template?', + label: 'Delete Event template', + description: `If you click Delete, custom event template data will be lost.`, ariaLabel: 'Event template delete warning', }; export const DeleteProbeTemplates: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteProbeTemplates, - title: 'Permanently delete your Probe Template?', - label: 'Delete Probe Template', - description: `If you click delete, custom probe template data will be lost.`, + title: 'Permanently delete your Probe template?', + label: 'Delete Probe template', + description: `If you click Delete, custom Probe template data will be lost.`, ariaLabel: 'Probe template delete warning', }; export const DeleteActiveProbes: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteActiveProbes, - title: 'Permanently remove your Active Probes from the target?', - label: 'Remove Active Probes', - description: `If you click delete, active probes will be removed from the target.`, + title: 'Permanently remove your active Probes from the target?', + label: 'Remove active Probes', + description: `If you click Delete, active Probes will be removed from the target.`, ariaLabel: 'Active Probes remove warning', }; @@ -96,7 +96,7 @@ export const DeleteCredentials: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteCredentials, title: 'Permanently delete your Credentials?', label: 'Delete Credentials', - description: `If you click delete, credential data for this target will be lost.`, + description: `If you click Delete, Credential data for this target will be lost.`, ariaLabel: 'Credentials delete warning', }; @@ -104,32 +104,32 @@ export const DeleteCustomTargets: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteCustomTargets, title: 'Permanently delete your Custom Target?', label: 'Delete Custom Targets', - description: `If you click delete, custom target information will be lost.`, + description: `If you click Delete, Custom Target information will be lost.`, ariaLabel: 'Custom Targets delete warning', }; export const DeleteDashboardLayout: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteDashboardLayout, - title: 'Permanently delete your Dashboard Layout?', - label: 'Delete Dashboard Layouts', - description: `If you click delete, dashboard layout configuration data will be lost.`, - ariaLabel: 'Dashboard Layout delete warning', + title: 'Permanently delete your Dashboard layout?', + label: 'Delete Dashboard layouts', + description: `If you click Delete, Dashboard layout configuration data will be lost.`, + ariaLabel: 'Dashboard layout delete warning', }; export const ClearDashboardLayout: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.ClearDashboardLayout, - title: 'Permanently clear your Dashboard Layout?', - label: 'Clear Dashboard Layout', - description: 'If you click clear, all cards in the current dashboard layout will be removed.', - ariaLabel: 'Dashboard Layout clear warning', + title: 'Permanently clear your Dashboard layout?', + label: 'Clear Dashboard layout', + description: 'If you click Clear, all cards in the current Dashboard layout will be removed.', + ariaLabel: 'Dashboard layout clear warning', }; export const DeleteLayoutTemplate: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteLayoutTemplate, - title: 'Permanently delete your Layout Template?', - label: 'Delete Layout Template', - description: `If you click delete, layout template configuration data will be lost.`, - ariaLabel: 'Layout Template delete warning', + title: 'Permanently delete your Layout template?', + label: 'Delete Layout template', + description: `If you click Delete, Layout template configuration data will be lost.`, + ariaLabel: 'Layout template delete warning', }; export const DeleteWarningKinds: DeleteOrDisableWarning[] = [ diff --git a/src/app/QuickStarts/QuickStartsCatalogPage.tsx b/src/app/QuickStarts/QuickStartsCatalogPage.tsx index 7793c56db..355ee9666 100644 --- a/src/app/QuickStarts/QuickStartsCatalogPage.tsx +++ b/src/app/QuickStarts/QuickStartsCatalogPage.tsx @@ -23,7 +23,7 @@ const QuickStartsCatalogPage: React.FC = (_) => { const { t } = useTranslation(); // TODO: Quick start categories (patternfly/quickstarts supports this through individual components) - // e.g. Dashboard Quick Starts, Topology Quick Starts, Recording Quick Starts, etc. + // e.g. Dashboard Quick starts, Topology Quick starts, Recording Quick starts, etc. return ( , description: `Learn about automated rules in **[APP]** and how to create one.`, - prerequisites: ['Start a Recording'], + prerequisites: ['Start a recording'], introduction: ` -## Automated Rules -Automated Rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently [APP] should copy the application recording buffer into [APP]'s own archived storage. +## Automated rules +Automated rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently [APP] should copy the application recording buffer into [APP]'s own archived storage. ### What you'll learn @@ -49,29 +49,29 @@ Automated Rules are configurations that instruct [APP] to create JDK Flight Reco `, tasks: [ { - title: 'Create a new Automated Rule', + title: 'Create a new Automated rule', description: ` -1. In the [APP] console navigation bar, click [Automated Rules]{{highlight nav-automatedrules-tab}}. +1. In the [APP] console navigation bar, click [Automated rules]{{highlight nav-automatedrules-tab}}. 2. Click [Create]{{highlight create-rule-btn}}. `, review: { - instructions: '#### Verify that you see the Automated Rules creation form.', + instructions: '#### Verify that you see the Automated rules creation form.', failedTaskHelp: 'If you do not see the navigation bar, click the [menu button]{{highlight nav-toggle-btn}} on the masthead.', }, }, { - title: 'Fill out the Automated Rule form', + title: 'Fill out the Automated rule form', description: ` -To create a new rule, use the Automated Rule creation form to fill in the required fields. +To create a new rule, use the Automated rule creation form to fill in the required fields. -The [Match Expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the match expression: \`true\`{{copy}}. You can also match targets more specifically with a match expression like \`target.annotations.cryostat['PORT'] == 9091\`{{copy}}, which will match targets that are connected to [APP] on port 9091. +The [Match expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the match expression: \`true\`{{copy}}. You can also match targets more specifically with a match expression like \`target.annotations.cryostat['PORT'] == 9091\`{{copy}}, which will match targets that are connected to [APP] on port 9091. To create a new rule, you must fill out the following required fields: 1. Enter a name for the rule in the [Name]{{highlight rule-name}} field. -2. Enter an expression in the [Match Expression]{{highlight rule-matchexpr}} field. To see an example match expression, click the [match hint]{{highlight rule-matchexpr-help}}. -[Use the [Match Expression Visualizer]{{highlight match-expr-card}} to test your match expression against the target JVMs currently discovered by [APP]. Any matched targets will appear unfaded in the Graph view and will be listed in the List view.]{{admonition tip}} +2. Enter an expression in the [Match expression]{{highlight rule-matchexpr}} field. To see an example match expression, click the [match hint]{{highlight rule-matchexpr-help}}. +[Use the [Match expression visualizer]{{highlight match-expr-card}} to test your match expression against the target JVMs currently discovered by [APP]. Any matched targets will appear unfaded in the Graph view and will be listed in the List view.]{{admonition tip}} 3. Select an [Event Template]{{highlight rule-evt-template}}. @@ -81,7 +81,7 @@ To create a new rule, you must fill out the following required fields: `, review: { - instructions: '#### Verify that you see the new rule in the Automated Rules table.', + instructions: '#### Verify that you see the new rule in the Automated rules table.', failedTaskHelp: `If you do not see the new rule, follow the previous steps again. If you cannot create the rule, check that you have entered valid values for each required field.`, }, @@ -101,13 +101,13 @@ The recording should be named according to the rule-name format, such as \`auto_ `, review: { instructions: - '#### Verify that you see the new recording with the correct Automated Rule recording naming scheme in the list of recordings.', + '#### Verify that you see the new recording with the correct Automated rule recording naming scheme in the list of recordings.', failedTaskHelp: 'If you do not see the new recording, go back to the Rule Creation form, and try verifying that your rule match expression correctly matches the intended target JVMs in this task.', }, }, ], - conclusion: conclusion(displayName, 'Automated Rules'), + conclusion: conclusion(displayName, 'Automated rules'), type: { text: 'Advanced', color: 'red', diff --git a/src/app/QuickStarts/quickstarts/generic-quickstart.tsx b/src/app/QuickStarts/quickstarts/generic-quickstart.tsx index 8a0185b6f..14d5b6ce5 100644 --- a/src/app/QuickStarts/quickstarts/generic-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/generic-quickstart.tsx @@ -21,7 +21,7 @@ import { PficonTemplateIcon } from '@patternfly/react-icons'; import { conclusion } from '../quickstart-utils'; // Quick start name (currently cannot use [APP], there is a bug with how the title gets rendered in the quick start panel) -const displayName = 'Getting started with quick starts in Cryostat'; +const displayName = 'Getting started with Quick starts in Cryostat'; // Additional info: https://docs.openshift.com/container-platform/4.9/web_console/creating-quick-start-tutorials.html const GenericQuickStart: QuickStart = { diff --git a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx index d39caf071..fe3f67141 100644 --- a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx @@ -65,16 +65,16 @@ The **Connectivity** tab enables you to configure the WebSocket connection betwe 1. Click [Connectivity]{{highlight settings-connectivity-tab}}. 2. Configure the **WebSocket Connection Debounce** time. -3. Configure the **Auto-Refresh** period for content-views. -[To use the **Auto-Refresh** feature, make sure to enable the [Auto-Refresh]{{highlight settings-connectivity-tab-auto-refresh}} checkbox.]{{admonition tip}} +3. Configure the **Auto-refresh** period for content-views. +[To use the **Auto-refresh** feature, make sure to enable the [Auto-refresh]{{highlight settings-connectivity-tab-auto-refresh}} checkbox.]{{admonition tip}} `, }, { - title: 'Go to the **Notifications & Messages** tab', + title: 'Go to the **Notifications & messages** tab', description: ` -The **Notifications & Messages** tab allows you to configure the notifications and deletion warnings. +The **Notifications & messages** tab allows you to configure the notifications and deletion warnings. -1. Click [Notifications & Messages]{{highlight settings-notifications&messages-tab}}. +1. Click [Notifications & messages]{{highlight settings-notifications&messages-tab}}. 2. You can enable or disable notifications from various categories. Click \`Show more\` for the full list of notifications. To control the maximum number of notifications, configure the input control. 3. You are also able to enable or disable deletion dialog warnings for various destructive actions. Click \`Show more\` for the full list of deletion warnings. @@ -88,8 +88,8 @@ The **Dashboard** tab allows you to configure settings for the various Dashboard The **Automated Analysis** dashboard card allows you to automatically start an analysis on the recording with a click of a button. You can configure the recording that is started by this card. 1. From the list of settings tabs, click [Dashboard]{{highlight settings-dashboard-tab}}. -2. Configure the **Automated Analysis Recording Configuration** settings. -3. Configure the **Dashboard Metrics Configuration** settings. +2. Configure the **Automated analysis recording configuration** settings. +3. Configure the **Dashboard metrics configuration** settings. [When using the **Automated Analysis Card**, make sure the **Event Template** is compatible with the target JVM.]{{admonition warning}} [Setting both an infinite maximum size and age may result in an **Out Of Memory** error during report generation.]{{admonition caution}} @@ -104,9 +104,9 @@ The **Automated Analysis** dashboard card allows you to automatically start an a 2. Configure the **Credentials Storage** settings. Credentials are necessary to authenticate with the target JVMs that [APP] communicates with, if JMX auth is enabled or if a [APP] agent authenticated connection is required. If you prefer not to store these credentials in the [APP] backend, you can opt to store them in local session storage instead. -3. Configure the **Feature Level** settings. +3. Configure the **Feature level** settings. - The **Feature Level** setting enables you to enable or disable beta features. + The **Feature level** setting enables you to enable or disable beta features. `, }, diff --git a/src/app/QuickStarts/quickstarts/start-a-recording.tsx b/src/app/QuickStarts/quickstarts/start-a-recording.tsx index 3d74629c0..a8c10e70e 100644 --- a/src/app/QuickStarts/quickstarts/start-a-recording.tsx +++ b/src/app/QuickStarts/quickstarts/start-a-recording.tsx @@ -18,7 +18,7 @@ import { FeatureLevel } from '@app/Shared/Services/service.types'; import { QuickStart } from '@patternfly/quickstarts'; import { CryostatIcon, conclusion } from '../quickstart-utils'; -const displayName = 'Start a Recording'; +const displayName = 'Start a recording'; const RecordingQuickStart: QuickStart = { metadata: { @@ -34,7 +34,7 @@ const RecordingQuickStart: QuickStart = { description: `Learn how to start a recording with Java Flight Recorder (JFR) with **[APP]**.`, prerequisites: [''], introduction: ` -## Start a Recording +## Start a recording **Java Flight Recorder (JFR)** is a profiling tool that is built into the JVM. It allows you to record events that happen in the JVM and then analyze the recording to find performance issues. [APP] leverages JFR to provide a simple way to start, stop, and download recordings from a containerized target JVM. ### What you'll learn @@ -81,11 +81,11 @@ There are two tabs within the Recordings page: [Active Recordings]{{highlight active-recordings-tab}} and [Archived Recordings]{{highlight archived-recordings-tab}}. -**Active recordings** are recordings that only exist only within the target JVM. **Archived recordings** are recordings that have been saved from the target JVM and copied to [APP]'s storage volume. +**Active Recordings** are recordings that only exist only within the target JVM. **Archived recordings** are recordings that have been saved from the target JVM and copied to [APP]'s storage volume. To start an active recording: -1. Click [Create]{{highlight recordings-create-btn}} to open the **Custom Flight Recording Form**. +1. Click [Create]{{highlight recordings-create-btn}} to open the **Custom Flight recording Form**. [If you have a smaller viewport, the \`Create\` button may not be immediately visible. In this case, you can click on the kebab button (three vertical dots) to reveal additional options, including \`Create\`."]{{admonition note}} 2. Enter a name for the recording in the [Name]{{highlight crf-name}} field. 3. Select the [Duration]{{highlight crf-duration}} for the recording. You can select \`CONTINUOUS\` to record until the recording is stopped. diff --git a/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx b/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx index 705f62868..ef6206d2b 100644 --- a/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx @@ -53,17 +53,17 @@ However, in some cases (e.g. for **Kubernetes API**, JMX port is not 9091< }, }, { - title: 'Open Custom Target Creation Form', + title: 'Open Custom Target creation form', description: ` 1. From the toolbar, click on the [catalog icon]{{highlight topology-catalog-btn}}. - This will open a modal containing the **Topology Entity Catalog**. + This will open a modal containing the **Topology entity catalog**. [Alternatively, press Ctrl + Space or right click the topology view. This will open a mini catalog for quick access.]{{admonition tip}} 2. Find and select the **Custom Target** option. To aid your search, use the search bar. -3. Click on the **Create** button to open the **Custom Target Creation Form**. +3. Click on the **Create** button to open the **Custom Target creation form**. `, review: { instructions: '#### Verify that you can open the catalog and select Custom Target.', @@ -75,28 +75,28 @@ However, in some cases (e.g. for **Kubernetes API**, JMX port is not 9091< description: ` 1. Enter the JMX **Connection URL** for the target into the [Connection URL]{{highlight ct-connecturl-input}} field. 2. Optionally assign an **Alias** to the target by using the [Alias]{{highlight ct-alias-input}} field. -3. If the target has **JMX authentication** enabled, click the [JMX Credential Option]{{highlight ct-credential-expand}} to expand the form. +3. If the target has **JMX authentication** enabled, click the [JMX credential option]{{highlight ct-credential-expand}} to expand the form. 4. Use the [Username]{{highlight ct-username-input}} and [Password]{{highlight ct-password-input}} fields to enter the username and password. `, review: { instructions: '#### Verify that you have filled out the form.', failedTaskHelp: - 'Click the [JMX Credential Option]{{highlight ct-credential-expand}} to expand the form to reveal the username and password fields.', + 'Click the [JMX credential option]{{highlight ct-credential-expand}} to expand the form to reveal the username and password fields.', }, }, { - title: 'Test the custom target definition.', + title: 'Test the Custom Target definition.', description: ` After form is filled, the [sample node]{{highlight ct-sample-testnode}} will be populated with those information. To test the **Custom Target** definition: -1. Click on the [sample node icon]{{highlight ct-sample-testnode-icon}} to test your custom target definition. **Cryostat** will attempt a connection to the target defined by the form data. +1. Click on the [sample node icon]{{highlight ct-sample-testnode-icon}} to test your Custom Target definition. **Cryostat** will attempt a connection to the target defined by the form data. 2. If the attempt succeeds, a **Checkmark** icon is shown. Otherwise, an **Exclaimation** icon along with an alert banner that describes the error. 3. Re-enter the form and repeat step 1-2 until you have a valid definition. `, review: { - instructions: '#### Verify that you can test the custom target definition.', + instructions: '#### Verify that you can test the Custom Target definition.', failedTaskHelp: 'You must provide a valid **Connection URL** to enable testing.', }, }, @@ -109,7 +109,7 @@ To create the **Custom Target** definition: 2. If the submission is successful, the view will automatically be directed to the **Topology** page. Otherwise, revise your form inputs. `, review: { - instructions: '#### Verify that you can create the custom target and redirected to Topology View.', + instructions: '#### Verify that you can create the Custom Target and redirected to Topology View.', failedTaskHelp: 'Revise your **Custom Target** definition to ensure it is valid.', }, }, @@ -117,7 +117,7 @@ To create the **Custom Target** definition: title: 'View the Custom Target.', description: ` The **Custom Target** will appear under **Custom Targets Realm**. -[In Graph View, use the toolbar to filter out the **Custom Targets Realm** and the control bar to fit graph into screen, if needed.]{{admonition tip}} +[In Graph view, use the toolbar to filter out the **Custom Targets Realm** and the control bar to fit graph into screen, if needed.]{{admonition tip}} `, review: { instructions: '#### Verify that you can can see the Custom Target.', diff --git a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx index f39ce4b41..22d59b081 100644 --- a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx +++ b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx @@ -59,16 +59,16 @@ With **Topology** view, you can perform actions (i.e. start recording) on an ind description: ` To open the action menu for a target group: -- *Graph View*: Right-click a target group to display the **Action** menu. +- *Graph view*: Right-click a target group to display the **Action** menu. -- *List View*: Click the **Action** dropdown menu next to the group name. +- *List view*: Click the **Action** dropdown menu next to the group name. `, review: { instructions: '#### Verify that you see action menu.', failedTaskHelp: ` -In *Graph View*, the line surronding the targets represents the group. +In *Graph view*, the line surronding the targets represents the group. -In *List View*, to reveal nested groups, click on list rows.`, +In *List view*, to reveal nested groups, click on list rows.`, }, }, { diff --git a/src/app/Recordings/ActiveRecordingsTable.tsx b/src/app/Recordings/ActiveRecordingsTable.tsx index 8809cb9be..b30c1765f 100644 --- a/src/app/Recordings/ActiveRecordingsTable.tsx +++ b/src/app/Recordings/ActiveRecordingsTable.tsx @@ -98,7 +98,7 @@ const tableColumns: TableColumn[] = [ sortable: true, }, { - title: 'Start Time', + title: 'Start time', keyPaths: ['startTime'], sortable: true, }, diff --git a/src/app/Recordings/RecordingFilters.tsx b/src/app/Recordings/RecordingFilters.tsx index 16571ea78..256521f43 100644 --- a/src/app/Recordings/RecordingFilters.tsx +++ b/src/app/Recordings/RecordingFilters.tsx @@ -54,9 +54,9 @@ export interface RecordingFiltersCategories { export const categoriesToDisplayNames = { Name: 'Name', Label: 'Label', - State: 'Recording State', - StartedBeforeDate: 'Started Before Date', - StartedAfterDate: 'Started After Date', + State: 'Recording state', + StartedBeforeDate: 'Started before date', + StartedAfterDate: 'Started after date', DurationSeconds: 'Duration (s)', }; diff --git a/src/app/Rules/CreateRule.tsx b/src/app/Rules/CreateRule.tsx index 6d770cae3..9f6f17a70 100644 --- a/src/app/Rules/CreateRule.tsx +++ b/src/app/Rules/CreateRule.tsx @@ -343,8 +343,8 @@ export const CreateRuleForm: React.FC = (_props) => { return ( - Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM - applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be + Automated rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM + applications. Each Automated rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently Cryostat should copy the application recording buffer into Cryostat's own archived storage. @@ -386,11 +386,11 @@ export const CreateRuleForm: React.FC = (_props) => { />
Try an expression like: @@ -473,7 +473,7 @@ enabled in the future.`} /> @@ -605,7 +605,7 @@ enabled in the future.`} { const breadcrumbs: BreadcrumbTrail[] = React.useMemo( () => [ { - title: 'Automated Rules', + title: 'Automated rules', path: '/rules', }, ], @@ -679,7 +679,7 @@ export const CreateRule: React.FC = () => { - Match Expression Visualizer + Match expression visualizer diff --git a/src/app/Rules/Rules.tsx b/src/app/Rules/Rules.tsx index 1f30f0417..a9341a9d9 100644 --- a/src/app/Rules/Rules.tsx +++ b/src/app/Rules/Rules.tsx @@ -72,7 +72,7 @@ const tableColumns: TableColumn[] = [ keyPaths: ['description'], }, { - title: 'Match Expression', + title: 'Match expression', keyPaths: ['matchExpression'], sortable: true, tooltip: @@ -84,31 +84,31 @@ const tableColumns: TableColumn[] = [ tooltip: 'The name and location of the Event Template applied by this rule.', }, { - title: 'Archival Period', + title: 'Archival period', keyPaths: ['archivalPeriodSeconds'], tooltip: 'Period in seconds. Cryostat will connect to matching targets at this interval and copy the relevant recording data into its archives. Values less than 1 prevent data from being repeatedly copied into archives - recordings will be started and remain only in target JVM memory.', }, { - title: 'Initial Delay', + title: 'Initial delay', keyPaths: ['initialDelaySeconds'], tooltip: - 'Initial delay in seconds. Cryostat will wait this amount of time before first copying recording data into its archives. Values less than 0 default to equal to the Archival Period. You can set a non-zero Initial Delay with a zero Archival Period, which will start a recording and copy it into archives exactly once after a set delay.', + 'Initial delay in seconds. Cryostat will wait this amount of time before first copying recording data into its archives. Values less than 0 default to equal to the Archival period. You can set a non-zero Initial delay with a zero Archival period, which will start a recording and copy it into archives exactly once after a set delay.', }, { - title: 'Preserved Archives', + title: 'Preserved archives', keyPaths: ['preservedArchives'], tooltip: 'The number of recording copies to be maintained in the Cryostat archives. Cryostat will continue retrieving further archived copies and trimming the oldest copies from the archive to maintain this limit. Values less than 1 prevent data from being copied into archives - recordings will be started and remain only in target JVM memory.', }, { - title: 'Maximum Age', + title: 'Maximum age', keyPaths: ['maxAgeSeconds'], tooltip: 'The maximum age in seconds for data kept in the JFR recordings started by this rule. Values less than 1 indicate no limit.', }, { - title: 'Maximum Size', + title: 'Maximum size', keyPaths: ['maxSizeBytes'], tooltip: 'The maximum size in bytes for JFR recordings started by this rule. Values less than 1 indicate no limit.', }, @@ -369,7 +369,7 @@ export const RulesTable: React.FC = (_) => { - No Automated Rules + No Automated rules @@ -377,7 +377,7 @@ export const RulesTable: React.FC = (_) => { } else { return ( - + {tableColumns.map(({ title, tooltip, sortable }, index) => ( @@ -406,15 +406,15 @@ export const RulesTable: React.FC = (_) => { return ( <> - + - About Automated Rules + About Automated rules - Automated Rules define a dynamic set of Target JVMs to connect to and start{' '} + Automated rules define a dynamic set of Target JVMs to connect to and start{' '} Active Recordings using a specific Event Template{' '} - when the Automated Rule is created and when any new matching Target JVMs appear. If your Target JVM + when the Automated rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in Security. - Automated Rules can be configured to periodically copy the contents of the Active Recording to{' '} + Automated rules can be configured to periodically copy the contents of the Active recording to{' '} Archives to ensure you always have up-to-date information about your JVMs. diff --git a/src/app/Rules/RulesUploadModal.tsx b/src/app/Rules/RulesUploadModal.tsx index 48381fb41..3c13ce219 100644 --- a/src/app/Rules/RulesUploadModal.tsx +++ b/src/app/Rules/RulesUploadModal.tsx @@ -138,16 +138,16 @@ export const RuleUploadModal: React.FC = ({ onClose, ...pr variant={ModalVariant.large} showClose={true} onClose={handleClose} - title="Upload Automated Rules" - description="Select an Automated Rules definition file to upload. File must be in valid JSON format." + title="Upload Automated rules" + description="Select an Automated rules definition file to upload. File must be in valid JSON format." help={ What"s this?} bodyContent={
- Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching - target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how + Automated rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching + target JVM applications. Each Automated rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently Cryostat should copy the application recording buffer into Cryostat"s own archived storage.
@@ -160,7 +160,7 @@ export const RuleUploadModal: React.FC = ({ onClose, ...pr } > - + = ({ onDismiss, onPropsSave, prog onCredentialChange={setCredential} > Try an expression like: diff --git a/src/app/SecurityPanel/Credentials/CredentialTestTable.tsx b/src/app/SecurityPanel/Credentials/CredentialTestTable.tsx index 2419251c1..bd9cdc5b0 100644 --- a/src/app/SecurityPanel/Credentials/CredentialTestTable.tsx +++ b/src/app/SecurityPanel/Credentials/CredentialTestTable.tsx @@ -159,7 +159,7 @@ export const CredentialTestTable: React.FC = ({ ...pro {`${ matchedExpr === '' ? 'Enter another' : 'Clear' - } Match Expression and try again.`} + } Match expression and try again.`} ); diff --git a/src/app/SecurityPanel/Credentials/StoredCredentials.tsx b/src/app/SecurityPanel/Credentials/StoredCredentials.tsx index ae1af7326..23556ac43 100644 --- a/src/app/SecurityPanel/Credentials/StoredCredentials.tsx +++ b/src/app/SecurityPanel/Credentials/StoredCredentials.tsx @@ -165,7 +165,7 @@ const reducer = (state: State, action) => { const tableColumns: TableColumn[] = [ { - title: 'Match Expression', + title: 'Match expression', keyPaths: ['matchExpression'], sortable: true, }, @@ -436,7 +436,7 @@ export const StoredCredentials = () => { {tableColumns.map(({ title }, index) => ( {title} diff --git a/src/app/Shared/Components/JmxAuthDescription.tsx b/src/app/Shared/Components/JmxAuthDescription.tsx index 31f487d12..b1d0e6650 100644 --- a/src/app/Shared/Components/JmxAuthDescription.tsx +++ b/src/app/Shared/Components/JmxAuthDescription.tsx @@ -41,7 +41,7 @@ export const JmxAuthDescription: React.FC These authentication credentials are stored in encrypted storage managed by the Cryostat backend and used for - manually managing recordings and event templates on target JVMs, as well as for Automated Rules which run in the + manually managing recordings and event templates on target JVMs, as well as for Automated rules which run in the background and open unattended target connections. diff --git a/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx b/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx index 128be53f4..34ad312ef 100644 --- a/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx +++ b/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx @@ -95,11 +95,11 @@ const LayoutRadioGroup: React.FC = ({ onChange, ...props const configs = React.useMemo( () => [ { - title: 'Graph View', + title: 'Graph view', isGraph: true, }, { - title: 'List View', + title: 'List view', isGraph: false, }, ], @@ -353,7 +353,7 @@ const ListView: React.FC<{ alertOptions?: AlertOptions }> = ({ alertOptions, ... {`${ matchedExpr === '' ? 'Enter another' : 'Clear' - } Match Expression and try again.`} + } Match expression and try again.`} diff --git a/src/app/Shared/Services/api.types.ts b/src/app/Shared/Services/api.types.ts index fc847143c..6df538975 100644 --- a/src/app/Shared/Services/api.types.ts +++ b/src/app/Shared/Services/api.types.ts @@ -486,7 +486,7 @@ export enum NodeType { // A target JVM using the Cryostat Agent, *not* connectable over JMX. Agent instances // that do publish a JMX Service URL should publish themselves with the JVM NodeType. AGENT = 'CryostatAgent', - // Custom target defined via Custom Target Creation Form. + // Custom Target defined via Custom Target creation form. CUSTOM_TARGET = 'CustomTarget', // Kubernetes platform. NAMESPACE = 'Namespace', diff --git a/src/app/Shared/Services/api.utils.ts b/src/app/Shared/Services/api.utils.ts index 22cc28b58..797e22937 100644 --- a/src/app/Shared/Services/api.utils.ts +++ b/src/app/Shared/Services/api.utils.ts @@ -192,20 +192,20 @@ export const messageKeys = new Map([ // not sent by the backend NotificationCategory.GrafanaConfiguration, { - title: 'Grafana Configuration', + title: 'Grafana configuration', }, ], [ NotificationCategory.LayoutTemplateCreated, { - title: 'Layout Template Created', + title: 'Layout template created', }, ], [ NotificationCategory.TargetJvmDiscovery, { variant: AlertVariant.info, - title: 'Target JVM Discovery', + title: 'Target JVM discovery', body: (v) => { const evt: TargetDiscoveryEvent = v.message.event; const target: Target = evt.serviceRef; @@ -226,7 +226,7 @@ export const messageKeys = new Map([ NotificationCategory.WsClientActivity, { variant: AlertVariant.info, - title: 'WebSocket Client Activity', + title: 'WebSocket client activity', body: (evt) => { const addr = Object.keys(evt.message)[0]; const status = evt.message[addr]; @@ -239,7 +239,7 @@ export const messageKeys = new Map([ NotificationCategory.ActiveRecordingCreated, { variant: AlertVariant.success, - title: 'Recording Created', + title: 'Recording created', body: (evt) => `${evt.message.recording.name} created in target: ${evt.message.target}`, } as NotificationMessageMapper, ], @@ -247,7 +247,7 @@ export const messageKeys = new Map([ NotificationCategory.ActiveRecordingStopped, { variant: AlertVariant.success, - title: 'Recording Stopped', + title: 'Recording stopped', body: (evt) => `${evt.message.recording.name} was stopped`, } as NotificationMessageMapper, ], @@ -255,7 +255,7 @@ export const messageKeys = new Map([ NotificationCategory.ActiveRecordingSaved, { variant: AlertVariant.success, - title: 'Recording Saved', + title: 'Recording saved', body: (evt) => `${evt.message.recording.name} was archived`, } as NotificationMessageMapper, ], @@ -263,7 +263,7 @@ export const messageKeys = new Map([ NotificationCategory.ActiveRecordingDeleted, { variant: AlertVariant.success, - title: 'Recording Deleted', + title: 'Recording deleted', body: (evt) => `${evt.message.recording.name} was deleted`, } as NotificationMessageMapper, ], @@ -271,7 +271,7 @@ export const messageKeys = new Map([ NotificationCategory.SnapshotCreated, { variant: AlertVariant.success, - title: 'Snapshot Created', + title: 'Snapshot created', body: (evt) => `${evt.message.recording.name} was created in target: ${evt.message.target}`, } as NotificationMessageMapper, ], @@ -279,7 +279,7 @@ export const messageKeys = new Map([ NotificationCategory.SnapshotDeleted, { variant: AlertVariant.success, - title: 'Snapshot Deleted', + title: 'Snapshot deleted', body: (evt) => `${evt.message.recording.name} was deleted`, } as NotificationMessageMapper, ], @@ -287,7 +287,7 @@ export const messageKeys = new Map([ NotificationCategory.ArchivedRecordingCreated, { variant: AlertVariant.success, - title: 'Archived Recording Uploaded', + title: 'Archived recording uploaded', body: (evt) => `${evt.message.recording.name} was uploaded into archives`, } as NotificationMessageMapper, ], @@ -295,7 +295,7 @@ export const messageKeys = new Map([ NotificationCategory.ArchivedRecordingDeleted, { variant: AlertVariant.success, - title: 'Archived Recording Deleted', + title: 'Archived recording deleted', body: (evt) => `${evt.message.recording.name} was deleted`, } as NotificationMessageMapper, ], @@ -303,7 +303,7 @@ export const messageKeys = new Map([ NotificationCategory.TemplateUploaded, { variant: AlertVariant.success, - title: 'Template Created', + title: 'Template created', body: (evt) => `${evt.message.template.name} was created`, } as NotificationMessageMapper, ], @@ -311,7 +311,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbeTemplateUploaded, { variant: AlertVariant.success, - title: 'Probe Template Created', + title: 'Probe template created', body: (evt) => `${evt.message.probeTemplate} was created`, } as NotificationMessageMapper, ], @@ -319,7 +319,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbeTemplateApplied, { variant: AlertVariant.success, - title: 'Probe Template Applied', + title: 'Probe template applied', body: (evt) => `${evt.message.probeTemplate} was inserted`, } as NotificationMessageMapper, ], @@ -327,7 +327,7 @@ export const messageKeys = new Map([ NotificationCategory.TemplateDeleted, { variant: AlertVariant.success, - title: 'Template Deleted', + title: 'Template deleted', body: (evt) => `${evt.message.template.name} was deleted`, } as NotificationMessageMapper, ], @@ -335,7 +335,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbeTemplateDeleted, { variant: AlertVariant.success, - title: 'Probe Template Deleted', + title: 'Probe template deleted', body: (evt) => `${evt.message.probeTemplate} was deleted`, } as NotificationMessageMapper, ], @@ -343,7 +343,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbesRemoved, { variant: AlertVariant.success, - title: 'Probes Removed from Target', + title: 'Probes removed from target', body: (evt) => `Probes successfully removed from ${evt.message.target}`, } as NotificationMessageMapper, ], @@ -351,7 +351,7 @@ export const messageKeys = new Map([ NotificationCategory.RuleCreated, { variant: AlertVariant.success, - title: 'Automated Rule Created', + title: 'Automated rule created', body: (evt) => `${evt.message.name} was created`, } as NotificationMessageMapper, ], @@ -359,7 +359,7 @@ export const messageKeys = new Map([ NotificationCategory.RuleUpdated, { variant: AlertVariant.success, - title: 'Automated Rule Updated', + title: 'Automated rule updated', body: (evt) => `${evt.message.name} was ` + (evt.message.enabled ? 'enabled' : 'disabled'), } as NotificationMessageMapper, ], @@ -367,7 +367,7 @@ export const messageKeys = new Map([ NotificationCategory.RuleDeleted, { variant: AlertVariant.success, - title: 'Automated Rule Deleted', + title: 'Automated rule deleted', body: (evt) => `${evt.message.name} was deleted`, } as NotificationMessageMapper, ], @@ -375,7 +375,7 @@ export const messageKeys = new Map([ NotificationCategory.RecordingMetadataUpdated, { variant: AlertVariant.success, - title: 'Recording Metadata Updated', + title: 'Recording metadata updated', body: (evt) => `${evt.message.recording.name} metadata was updated`, } as NotificationMessageMapper, ], @@ -383,7 +383,7 @@ export const messageKeys = new Map([ NotificationCategory.TargetCredentialsStored, { variant: AlertVariant.success, - title: 'Target Credentials Stored', + title: 'Target credentials stored', body: (evt) => `Credentials stored for target: ${evt.message.target}`, } as NotificationMessageMapper, ], @@ -391,7 +391,7 @@ export const messageKeys = new Map([ NotificationCategory.TargetCredentialsDeleted, { variant: AlertVariant.success, - title: 'Target Credentials Deleted', + title: 'Target credentials deleted', body: (evt) => `Credentials deleted for target: ${evt.message.target}`, } as NotificationMessageMapper, ], @@ -399,7 +399,7 @@ export const messageKeys = new Map([ NotificationCategory.CredentialsStored, { variant: AlertVariant.success, - title: 'Credentials Stored', + title: 'Credentials stored', body: (evt) => `Credentials stored for: ${evt.message.matchExpression}`, } as NotificationMessageMapper, ], @@ -407,7 +407,7 @@ export const messageKeys = new Map([ NotificationCategory.CredentialsDeleted, { variant: AlertVariant.success, - title: 'Credentials Deleted', + title: 'Credentials deleted', body: (evt) => `Credentials deleted for: ${evt.message.matchExpression}`, } as NotificationMessageMapper, ], diff --git a/src/app/Shared/Services/service.utils.ts b/src/app/Shared/Services/service.utils.ts index 40fa88ce1..a7b1c3b44 100644 --- a/src/app/Shared/Services/service.utils.ts +++ b/src/app/Shared/Services/service.utils.ts @@ -21,7 +21,7 @@ import { MatchExpressionService } from './MatchExpression.service'; import { AutomatedAnalysisRecordingConfig, ChartControllerConfig } from './service.types'; // ====================================== -// Match Expression +// Match expression // ====================================== export const SearchExprServiceContext = React.createContext(new MatchExpressionService()); diff --git a/src/app/Topology/Actions/CreateTarget.tsx b/src/app/Topology/Actions/CreateTarget.tsx index e223ed228..e83abbcba 100644 --- a/src/app/Topology/Actions/CreateTarget.tsx +++ b/src/app/Topology/Actions/CreateTarget.tsx @@ -279,7 +279,7 @@ export const CreateTarget: React.FC = ({ prefilled }) => { = ({ prefilled }) => { fieldId="alias" helperText={ - Connection Nickname (same as Connection URL if not specified). + Connection nickname (same as Connection URL if not specified). } > @@ -350,7 +350,7 @@ export const CreateTarget: React.FC = ({ prefilled }) => { onClick={() => toggleCredentialForm('jmx-credential-option')} type={'button'} > - JMX Credential Options + JMX credential options
Creates credentials that Cryostat uses to connect to target JVMs over JMX. @@ -455,7 +455,7 @@ export const SampleNodeDonut: React.FC = ({ const statusIcon = React.useMemo(() => { if (testing) { - return { icon: , message: 'Testing custom target definition.' }; + return { icon: , message: 'Testing Custom Target definition.' }; } return validation.option === ValidatedOptions.success ? { @@ -522,7 +522,7 @@ export const SampleNodeDonut: React.FC = ({ - Click on the sample node above to test custom target definition. + Click on the sample node above to test Custom Target definition. diff --git a/src/app/Topology/Actions/QuickSearchPanel.tsx b/src/app/Topology/Actions/QuickSearchPanel.tsx index f0aca0c2e..cec010f0e 100644 --- a/src/app/Topology/Actions/QuickSearchPanel.tsx +++ b/src/app/Topology/Actions/QuickSearchPanel.tsx @@ -231,7 +231,7 @@ export const QuickSearchModal: React.FC = ({ } return ( - For quickstarts on how to create these entities, visit Quick Starts. + For quickstarts on how to create these entities, visit Quick starts. ); }, [activeLevel]); @@ -242,7 +242,7 @@ export const QuickSearchModal: React.FC = ({ onClose={onClose} variant={variant} titleIconVariant={QuickSearchIcon} - title={'Topology Entity Catalog'} + title={'Topology entity catalog'} className={'topology__quick-search-modal'} id={'topology-quick-search-modal'} description={
Select an entity to add to view. {guide}
} diff --git a/src/app/Topology/Actions/quicksearches/custom-target.tsx b/src/app/Topology/Actions/quicksearches/custom-target.tsx index 8de24f1e6..9d9f629c7 100644 --- a/src/app/Topology/Actions/quicksearches/custom-target.tsx +++ b/src/app/Topology/Actions/quicksearches/custom-target.tsx @@ -27,7 +27,7 @@ const _CustomTargetSearchItem: QuickSearchItem = { color: 'green', }, ], - descriptionShort: 'Define a custom target definition.', + descriptionShort: 'Define a Custom Target definition.', descriptionFull: 'Provide a JMX Service URL along with necessary credentials to point to a target JVM.', featureLevel: FeatureLevel.PRODUCTION, createAction: ({ navigate }) => { diff --git a/src/app/Topology/Actions/utils.tsx b/src/app/Topology/Actions/utils.tsx index 7f58c29a1..f994d0aed 100644 --- a/src/app/Topology/Actions/utils.tsx +++ b/src/app/Topology/Actions/utils.tsx @@ -101,7 +101,7 @@ export const nodeActions: NodeAction[] = [ services.target.setTarget(targetNode.target); navigate('/rules/create'); }, - title: 'Create Automated Rules', + title: 'Create Automated rules', }, { key: '', isSeparator: true }, { diff --git a/src/app/Topology/Entity/EntityDetails.tsx b/src/app/Topology/Entity/EntityDetails.tsx index 3ec111e6a..6600d8c72 100644 --- a/src/app/Topology/Entity/EntityDetails.tsx +++ b/src/app/Topology/Entity/EntityDetails.tsx @@ -179,7 +179,7 @@ export const TargetDetails: React.FC<{ title: 'Alias', helperTitle: 'Alias', helperDescription: constructHelperDescription( - 'Connection Nickname (same as Connection URL if not specified).', + 'Connection nickname (same as Connection URL if not specified).', 'Target', ['alias'], ), @@ -311,9 +311,9 @@ const MBeanDetails: React.FC<{ const _collapsedData = React.useMemo((): DescriptionConfig[] => { return [ { - key: 'Start Time', - title: 'Start Time', - helperTitle: 'Start Time', + key: 'Start time', + title: 'Start time', + helperTitle: 'Start time', helperDescription: 'The time when this JVM process started.', content: (mbeanMetrics?.runtime?.startTime || 0) > 0 ? ( @@ -325,51 +325,51 @@ const MBeanDetails: React.FC<{ ), }, { - key: 'JVM Version', - title: 'JVM Version', - helperTitle: 'JVM Version', + key: 'JVM version', + title: 'JVM version', + helperTitle: 'JVM version', helperDescription: 'The version of the JVM.', content: mbeanMetrics.runtime?.vmVersion || , }, { - key: 'JVM Vendor', - title: 'JVM Vendor', - helperTitle: 'JVM Vendor', + key: 'JVM vendor', + title: 'JVM vendor', + helperTitle: 'JVM vendor', helperDescription: 'The vendor who supplied this JVM', content: mbeanMetrics.runtime?.vmVendor || , }, { - key: 'Operating System Name', - title: 'Operating System Name', - helperTitle: 'Operating System Name', + key: 'Operating system name', + title: 'Operating system name', + helperTitle: 'Operating system name', helperDescription: 'The name of the host system.', content: mbeanMetrics.os?.name || , }, { - key: 'Operating System Architecture', - title: 'Operating System Architecture', - helperTitle: 'Operating System Architecture', + key: 'Operating system architecture', + title: 'Operating system architecture', + helperTitle: 'Operating system architecture', helperDescription: 'The CPU architecture of the host system.', content: mbeanMetrics.os?.arch || , }, { - key: 'Operating System Version', - title: 'Operating System Version', - helperTitle: 'Operating System Version', + key: 'Operating system version', + title: 'Operating system version', + helperTitle: 'Operating system version', helperDescription: 'The version of the host operating system.', content: mbeanMetrics.os?.version || , }, { - key: 'Available Processors', - title: 'Available Processors', - helperTitle: 'Available Processors', + key: 'Available rrocessors', + title: 'Available processors', + helperTitle: 'Available processors', helperDescription: 'The count of total processors available to the JVM process on its host.', content: mbeanMetrics.os?.availableProcessors || , }, { - key: 'Total Physical Memory', - title: 'Total Physical Memory', - helperTitle: 'Total Physical Memory', + key: 'Total physical memory', + title: 'Total physical memory', + helperTitle: 'Total physical memory', helperDescription: 'The total amount of physical memory of the host operating system.', content: mbeanMetrics.os?.totalPhysicalMemorySize ? ( formatBytes(mbeanMetrics.os?.totalPhysicalMemorySize) @@ -378,9 +378,9 @@ const MBeanDetails: React.FC<{ ), }, { - key: 'Total Swap Space', - title: 'Total Swap Space', - helperTitle: 'Total Swap Space', + key: 'Total swap space', + title: 'Total swap space', + helperTitle: 'Total swap space', helperDescription: 'The total amount of swap space of the host operating system.', content: mbeanMetrics.os?.totalSwapSpaceSize ? ( formatBytes(mbeanMetrics.os?.totalSwapSpaceSize) @@ -389,30 +389,30 @@ const MBeanDetails: React.FC<{ ), }, { - key: 'Class Path', - title: 'Class Path', - helperTitle: 'JVM Class Path', + key: 'Class path', + title: 'Class path', + helperTitle: 'JVM class path', helperDescription: 'The list of class path locations for this JVM', content: , }, { - key: 'Library Paths', - title: 'Library Paths', - helperTitle: 'JVM Library Paths', + key: 'Library paths', + title: 'Library paths', + helperTitle: 'JVM Library paths', helperDescription: 'The list of library path locations for this JVM', content: , }, { - key: 'Input Arguments', - title: 'Input Arguments', - helperTitle: 'JVM Input Arguments', + key: 'Input arguments', + title: 'Input arguments', + helperTitle: 'JVM Input arguments', helperDescription: 'The arguments passed to this JVM on startup', content: , }, { - key: 'System Properties', - title: 'System Properties', - helperTitle: 'JVM System Properties', + key: 'System properties', + title: 'System properties', + helperTitle: 'JVM system properties', helperDescription: 'The current system properties of this JVM', content: , }, @@ -476,13 +476,13 @@ export const TargetResources: React.FC<{ targetNode: TargetNode }> = ({ targetNo const tableConfigs = React.useMemo( () => [ { - title: 'Owned Resources', + title: 'Owned resources', columns: ['Resource', 'Total'], rowData: TargetOwnedResourceTypeAsArray.filter((r) => agentDetected || r !== 'agentProbes'), }, { - title: 'Related Resources', - columns: ['Resource', 'Matching Total'], + title: 'Related resources', + columns: ['Resource', 'Matching total'], rowData: TargetRelatedResourceTypeAsArray, }, ], diff --git a/src/app/Topology/Toolbar/DisplayOptions.tsx b/src/app/Topology/Toolbar/DisplayOptions.tsx index 83f7811c0..5cb219451 100644 --- a/src/app/Topology/Toolbar/DisplayOptions.tsx +++ b/src/app/Topology/Toolbar/DisplayOptions.tsx @@ -101,7 +101,7 @@ export const DisplayOptions: React.FC = ({ onToggle={handleToggle} isDisabled={isDisabled} isOpen={open} - aria-label={'Display Options'} + aria-label={'Display options'} placeholderText={'Display options'} customContent={menuContent} /> diff --git a/src/app/build.json b/src/app/build.json index 72a32e1fd..46e0cecaf 100644 --- a/src/app/build.json +++ b/src/app/build.json @@ -10,7 +10,7 @@ "discussionUrl": "https://github.com/cryostatio/cryostat3/discussions", "knownIssuesUrl": "https://github.com/cryostatio/cryostat3/issues", "fileIssueUrl": "https://github.com/cryostatio/cryostat3/issues/new?labels=user+report,bug&body=Affects+__REPLACE_VERSION__", - "mailingListName": "Google Groups", + "mailingListName": "Google groups", "mailingListUrl": "https://groups.google.com/g/cryostat-development", "licenseUrl": "https://github.com/cryostatio/cryostat3/blob/main/LICENSE.txt", "version": "3.0.0-dev" diff --git a/src/app/routes.tsx b/src/app/routes.tsx index 28ce016da..c0e30a39d 100644 --- a/src/app/routes.tsx +++ b/src/app/routes.tsx @@ -81,9 +81,9 @@ const routes: IAppRoute[] = [ { component: QuickStarts, - label: 'Quick Starts', + label: 'Quick starts', path: '/quickstarts', - title: 'Quick Starts', + title: 'Quick starts', description: 'Get started with Cryostat.', }, { @@ -105,18 +105,18 @@ const routes: IAppRoute[] = [ { component: RulesTable, - label: 'Automated Rules', + label: 'Automated rules', path: '/rules', - title: 'Automated Rules', + title: 'Automated rules', description: - 'Create recordings on multiple target JVMs at once using Automated Rules consisting of a name, match expression, template, archival period, and more.', + 'Create Recordings on multiple target JVMs at once using Automated rules consisting of a name, match expression, template, archival period, and more.', navGroup: CONSOLE, children: [ { component: CreateRule, path: '/rules/create', - title: 'Create Automated Rule', + title: 'Create Automated rule', }, ], }, @@ -133,7 +133,7 @@ const routes: IAppRoute[] = [ component: CreateRecording, path: '/recordings/create', - title: 'Create Recording', + title: 'Create recording', }, ], }, diff --git a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx index 7a452bc80..be096f9e2 100644 --- a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx +++ b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx @@ -101,7 +101,7 @@ describe('', () => { expect(screen.getByText(/automatedanalysisconfigform/i)).toBeInTheDocument(); }); - it('creates a recording when Create Recording is clicked', async () => { + it('creates a recording when Create recording is clicked', async () => { const onCreateFunction = jest.fn(); const requestSpy = jest.spyOn(defaultServices.api, 'createRecording'); const { user } = render({ diff --git a/src/test/Events/EventTemplates.test.tsx b/src/test/Events/EventTemplates.test.tsx index 915705da6..216524842 100644 --- a/src/test/Events/EventTemplates.test.tsx +++ b/src/test/Events/EventTemplates.test.tsx @@ -212,7 +212,7 @@ describe('', () => { await user.click(screen.getByLabelText('Actions')); - expect(screen.getByText('Create Recording...')); + expect(screen.getByText('Create recording...')); expect(screen.getByText('Download')); expect(screen.getByText('Delete')); @@ -246,7 +246,7 @@ describe('', () => { await user.click(screen.getByLabelText('Actions')); - expect(screen.getByText('Create Recording...')); + expect(screen.getByText('Create recording...')); expect(screen.getByText('Download')); expect(screen.getByText('Delete')); diff --git a/src/test/Recordings/ActiveRecordingsTable.test.tsx b/src/test/Recordings/ActiveRecordingsTable.test.tsx index fb6a9bbf3..9afc45bea 100644 --- a/src/test/Recordings/ActiveRecordingsTable.test.tsx +++ b/src/test/Recordings/ActiveRecordingsTable.test.tsx @@ -205,7 +205,7 @@ describe('', () => { expect(button).toBeVisible(); }); - ['Name', 'Start Time', 'Duration', 'State', 'Labels'].map((text) => { + ['Name', 'Start time', 'Duration', 'State', 'Labels'].map((text) => { const header = screen.getByText(text); expect(header).toBeInTheDocument(); expect(header).toBeVisible(); diff --git a/src/test/Rules/CreateRule.test.tsx b/src/test/Rules/CreateRule.test.tsx index 5bb566850..ffb1befa1 100644 --- a/src/test/Rules/CreateRule.test.tsx +++ b/src/test/Rules/CreateRule.test.tsx @@ -23,7 +23,7 @@ import { of, throwError } from 'rxjs'; import { escapeKeyboardInput, render } from '../utils'; jest.mock('@app/Shared/Components/MatchExpression/MatchExpressionVisualizer', () => ({ - MatchExpressionVisualizer: () => <>Match Expression Visualizer, + MatchExpressionVisualizer: () => <>Match expression visualizer, })); const mockConnectUrl = 'service:jmx:rmi://someUrl'; @@ -127,7 +127,7 @@ describe('', () => { ], }, }); - const matchExpressionInput = screen.getByLabelText('Match Expression *'); + const matchExpressionInput = screen.getByLabelText('Match expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); @@ -153,7 +153,7 @@ describe('', () => { ], }, }); - const matchExpressionInput = screen.getByLabelText('Match Expression *'); + const matchExpressionInput = screen.getByLabelText('Match expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); @@ -179,7 +179,7 @@ describe('', () => { ], }, }); - const matchExpressionInput = screen.getByLabelText('Match Expression *'); + const matchExpressionInput = screen.getByLabelText('Match expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); @@ -230,7 +230,7 @@ describe('', () => { expect(descriptionInput).toBeInTheDocument(); expect(descriptionInput).toBeVisible(); - const matchExpressionInput = screen.getByLabelText('Match Expression *'); + const matchExpressionInput = screen.getByLabelText('Match expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); @@ -238,23 +238,23 @@ describe('', () => { expect(templateSelect).toBeInTheDocument(); expect(templateSelect).toBeVisible(); - const maxSizeInput = screen.getByLabelText('Maximum Size'); + const maxSizeInput = screen.getByLabelText('Maximum size'); expect(maxSizeInput).toBeInTheDocument(); expect(maxSizeInput).toBeVisible(); - const maxAgeInput = screen.getByLabelText('Maximum Age'); + const maxAgeInput = screen.getByLabelText('Maximum age'); expect(maxAgeInput).toBeInTheDocument(); expect(maxAgeInput).toBeVisible(); - const archivalPeriodInput = screen.getByLabelText('Archival Period'); + const archivalPeriodInput = screen.getByLabelText('Archival period'); expect(archivalPeriodInput).toBeInTheDocument(); expect(archivalPeriodInput).toBeVisible(); - const preservedArchivesInput = screen.getByLabelText('Preserved Archives'); + const preservedArchivesInput = screen.getByLabelText('Preserved archives'); expect(preservedArchivesInput).toBeInTheDocument(); expect(preservedArchivesInput).toBeVisible(); - const initialDelayInput = screen.getByLabelText('Initial Delay'); + const initialDelayInput = screen.getByLabelText('Initial delay'); expect(initialDelayInput).toBeInTheDocument(); expect(initialDelayInput).toBeVisible(); diff --git a/src/test/Rules/Rules.test.tsx b/src/test/Rules/Rules.test.tsx index 5d3f85155..2fab0f84d 100644 --- a/src/test/Rules/Rules.test.tsx +++ b/src/test/Rules/Rules.test.tsx @@ -146,7 +146,7 @@ describe('', () => { expect(modal).toBeInTheDocument(); expect(modal).toBeVisible(); - const modalTitle = await within(modal).findByText('Upload Automated Rules'); + const modalTitle = await within(modal).findByText('Upload Automated rules'); expect(modalTitle).toBeInTheDocument(); expect(modalTitle).toBeVisible(); @@ -337,7 +337,7 @@ describe('', () => { expect(modal).toBeInTheDocument(); expect(modal).toBeVisible(); - const modalTitle = await within(modal).findByText('Upload Automated Rules'); + const modalTitle = await within(modal).findByText('Upload Automated rules'); expect(modalTitle).toBeInTheDocument(); expect(modalTitle).toBeVisible(); diff --git a/src/test/Rules/__snapshots__/Rules.test.tsx.snap b/src/test/Rules/__snapshots__/Rules.test.tsx.snap index 1d2c8488e..9541f340a 100644 --- a/src/test/Rules/__snapshots__/Rules.test.tsx.snap +++ b/src/test/Rules/__snapshots__/Rules.test.tsx.snap @@ -23,7 +23,7 @@ exports[` renders correctly 1`] = `

- Automated Rules + Automated rules

@@ -45,12 +45,12 @@ exports[` renders correctly 1`] = `
- About Automated Rules + About Automated rules
- Automated Rules define a dynamic set of Target JVMs to connect to and start + Automated rules define a dynamic set of Target JVMs to connect to and start renders correctly 1`] = ` > Active Recordings - using a specific + using a specific renders correctly 1`] = ` Event Template - when the Automated Rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in + when the Automated rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in Security - . Automated Rules can be configured to periodically copy the contents of the Active Recording to + . Automated rules can be configured to periodically copy the contents of the Active recording to renders correctly 1`] = ` data-ouia-component-type="PF4/Title" data-ouia-safe={true} > - No Automated Rules + No Automated rules
diff --git a/src/test/Settings/DeletionDialogControl.test.tsx b/src/test/Settings/DeletionDialogControl.test.tsx index fa2b0815d..7403222c0 100644 --- a/src/test/Settings/DeletionDialogControl.test.tsx +++ b/src/test/Settings/DeletionDialogControl.test.tsx @@ -118,7 +118,7 @@ describe('', () => { await user.click(expandButton); - const activeRecordingSwitch = screen.getByLabelText('Delete Active Recording'); + const activeRecordingSwitch = screen.getByLabelText('Delete Active recording'); expect(activeRecordingSwitch).toBeInTheDocument(); expect(activeRecordingSwitch).toBeVisible(); expect(activeRecordingSwitch).toBeChecked(); diff --git a/src/test/Settings/NotificationControl.test.tsx b/src/test/Settings/NotificationControl.test.tsx index 3c4779a35..05c3ebe19 100644 --- a/src/test/Settings/NotificationControl.test.tsx +++ b/src/test/Settings/NotificationControl.test.tsx @@ -147,7 +147,7 @@ describe('', () => { await user.click(expandButton); - const webSocketAct = screen.getByLabelText('WebSocket Client Activity'); + const webSocketAct = screen.getByLabelText('WebSocket client activity'); expect(webSocketAct).toBeInTheDocument(); expect(webSocketAct).toBeVisible(); expect(webSocketAct).toBeChecked(); diff --git a/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap b/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap index d4fbb06c0..0efe1db0b 100644 --- a/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap +++ b/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap @@ -51,14 +51,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="all-deletion-warnings-on" > - All Deletion Warnings + All deletion warnings @@ -138,14 +138,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteActiveRecordings-on" > - Delete Active Recording + Delete Active recording @@ -177,14 +177,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteArchivedRecordings-on" > - Delete Archived Recording + Delete Archived recording @@ -216,14 +216,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteAutomatedRules-on" > - Delete Automated Rule + Delete Automated rule @@ -255,14 +255,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DisableAutomatedRules-on" > - Disable Automated Rule + Disable Automated rule @@ -294,14 +294,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteEventTemplates-on" > - Delete Event Template + Delete Event template @@ -333,14 +333,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteProbeTemplates-on" > - Delete Probe Template + Delete Probe template @@ -372,14 +372,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteActiveProbes-on" > - Remove Active Probes + Remove active Probes @@ -489,14 +489,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteDashboardLayout-on" > - Delete Dashboard Layouts + Delete Dashboard layouts @@ -528,14 +528,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteLayoutTemplate-on" > - Delete Layout Template + Delete Layout template @@ -567,14 +567,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ClearDashboardLayout-on" > - Clear Dashboard Layout + Clear Dashboard layout diff --git a/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap b/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap index 1bbb529ea..3f9cfd0ba 100644 --- a/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap +++ b/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap @@ -259,14 +259,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="WsClientActivity-on" > - WebSocket Client Activity + WebSocket client activity @@ -298,14 +298,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="TargetJvmDiscovery-on" > - Target JVM Discovery + Target JVM discovery @@ -376,14 +376,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ActiveRecordingStopped-on" > - Recording Stopped + Recording stopped @@ -415,14 +415,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ActiveRecordingSaved-on" > - Recording Saved + Recording saved @@ -454,14 +454,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ActiveRecordingDeleted-on" > - Recording Deleted + Recording deleted @@ -493,14 +493,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="SnapshotCreated-on" > - Snapshot Created + Snapshot created @@ -532,14 +532,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="SnapshotDeleted-on" > - Snapshot Deleted + Snapshot deleted @@ -578,7 +578,7 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-off" id="ArchivedRecordingCreated-off" > - Archived Recording Uploaded + Archived recording uploaded @@ -610,14 +610,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ArchivedRecordingDeleted-on" > - Archived Recording Deleted + Archived recording deleted @@ -649,14 +649,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="TemplateUploaded-on" > - Template Created + Template created @@ -688,14 +688,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="TemplateDeleted-on" > - Template Deleted + Template deleted @@ -727,14 +727,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbeTemplateUploaded-on" > - Probe Template Created + Probe template created @@ -766,14 +766,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbeTemplateDeleted-on" > - Probe Template Deleted + Probe template deleted @@ -805,14 +805,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbeTemplateApplied-on" > - Probe Template Applied + Probe template applied @@ -844,14 +844,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbesRemoved-on" > - Probes Removed from Target + Probes removed from target @@ -883,14 +883,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="RuleCreated-on" > - Automated Rule Created + Automated rule created @@ -922,14 +922,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="RuleUpdated-on" > - Automated Rule Updated + Automated rule updated @@ -961,14 +961,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="RuleDeleted-on" > - Automated Rule Deleted + Automated rule deleted @@ -1000,14 +1000,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="RecordingMetadataUpdated-on" > - Recording Metadata Updated + Recording metadata updated @@ -1039,14 +1039,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="GrafanaConfiguration-on" > - Grafana Configuration + Grafana configuration @@ -1078,7 +1078,7 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="LayoutTemplateCreated-on" > - Layout Template Created + Layout template created @@ -1156,14 +1156,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="TargetCredentialsDeleted-on" > - Target Credentials Deleted + Target credentials deleted @@ -1195,14 +1195,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="CredentialsStored-on" > - Credentials Stored + Credentials stored @@ -1234,14 +1234,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="CredentialsDeleted-on" > - Credentials Deleted + Credentials deleted diff --git a/src/test/Settings/__snapshots__/Settings.test.tsx.snap b/src/test/Settings/__snapshots__/Settings.test.tsx.snap index c5a644e79..0169f1b29 100644 --- a/src/test/Settings/__snapshots__/Settings.test.tsx.snap +++ b/src/test/Settings/__snapshots__/Settings.test.tsx.snap @@ -129,7 +129,7 @@ exports[` renders correctly 1`] = ` - Notifications & Messages + Notifications & messages From 093faae75fd04715d2454d54a08ad9fa5d05af1b Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 22 May 2024 20:03:41 -0400 Subject: [PATCH 03/13] fix broken tests --- locales/en/public.json | 70 +++++++++---------- locales/en/public_old.json | 7 ++ src/itest/RecordingWorkflow.test.ts | 2 +- .../Rules/__snapshots__/Rules.test.tsx.snap | 2 +- .../NotificationControl.test.tsx.snap | 12 ++-- 5 files changed, 50 insertions(+), 43 deletions(-) create mode 100644 locales/en/public_old.json diff --git a/locales/en/public.json b/locales/en/public.json index c74f51e48..47f8dc917 100644 --- a/locales/en/public.json +++ b/locales/en/public.json @@ -4,21 +4,21 @@ }, "AboutDescription": { "BUGS": "Bugs", - "FILE_A_REPORT": "File a Report", + "FILE_A_REPORT": "File a report", "HOMEPAGE": "Homepage", - "KNOWN_ISSUES": "Known Issues", + "KNOWN_ISSUES": "Known issues", "LICENSE": "License", - "MAILING_LIST": "Mailing List", - "OPEN_SOURCE_LICENSE": "Open Source License", - "VERSION": "version" + "MAILING_LIST": "Mailing list", + "OPEN_SOURCE_LICENSE": "Open source license", + "VERSION": "Version" }, "AppLayout": { "APP_LAUNCHER": { "ABOUT": "About", "DOCUMENTATION": "Documentation", - "GUIDED_TOUR": "Guided Tour", + "GUIDED_TOUR": "Guided tour", "HELP": "Help", - "QUICKSTARTS": "Quick Starts" + "QUICKSTARTS": "Quick starts" } }, "AutomatedAnalysisCard": { @@ -37,7 +37,7 @@ "STALE_REPORT": { "TEXT_one": "Most recent data from {{ count }} {{ units }} ago.", "TEXT_other": "Most recent data from {{ count }} {{ units }}s ago.", - "TOOLTIP": "Report data is stale. Click the Create Recording button and choose an option to start an active recording to source automated reports from." + "TOOLTIP": "Report data is stale. Click the Create recording button and choose an option to start an active recording to source automated reports from." }, "TOOLBAR": { "CHECKBOX": { @@ -64,7 +64,7 @@ "AutomatedAnalysisConfigDrawer": { "INPUT_GROUP": { "CREATE_RECORDING": { - "LABEL": "Create Recording" + "LABEL": "Create recording" }, "OPEN_SETTINGS": { "LABEL": "Open Settings" @@ -72,13 +72,13 @@ } }, "AutomatedAnalysisConfigForm": { - "CURRENT_CONFIG": "Current Configuration", - "FORM_TITLE": "Profiling Recording Configuration", + "CURRENT_CONFIG": "Current configuration", + "FORM_TITLE": "Profiling recording Configuration", "FORMATTED_TEMPLATE": "Name: {{template.name}}, Type: {{template.type}}", "MAXIMUM_AGE": "Maximum age ({{unit}})", "MAXIMUM_SIZE": "Maximum size ({{unit}})", "SAVE_CHANGES": "Save changes", - "TEMPLATE_HELPER_TEXT": "The Event Template to be applied to Automated Analysis recordings.", + "TEMPLATE_HELPER_TEXT": "The Event template to be applied to Automated Analysis recordings.", "TEMPLATE_INVALID_WARNING": "WARNING: Setting a Target Template as a default template type configuration may not apply to all Target JVMs if the JVMs do not support them." }, "AutomatedAnalysisScoreFilter": { @@ -141,23 +141,23 @@ }, "TITLE": "{{chartKind}} (last {{duration}}s, every {{period}}s)" }, - "ClickableAutomatedAnalysisLabel": { + "ClickableAutomatedAnalysisresult": { "ARIA_LABELS": { - "POPOVER": "automated-analysis-description-popover" + "POPOVER": "cryostat_tmp" } }, "Dashboard": { "ADD_CARD_HELPER_TEXT": "Choose a card type to add to your dashboard. Some cards require additional configuration.", "CARD_CATALOG_DESCRIPTION": "Cards added to this Dashboard layout present information at a glance about the selected target. The layout is preserved for all targets viewed on this client.", - "CARD_CATALOG_TITLE": "Dashboard Card Catalog", - "INVALID_CARD_CONFIGURATIONS": "Invalid Card Configurations", + "CARD_CATALOG_TITLE": "Dashboard Card catalog", + "INVALID_CARD_CONFIGURATIONS": "Invalid Card configurations", "PAGE_TITLE": "Dashboard" }, "DashboardCardActionMenu": { - "RESET_SIZE": "Reset Size" + "RESET_SIZE": "Reset size" }, "DashboardLayoutCreateModal": { - "CREATE_LAYOUT": "Create Dashboard Layout", + "CREATE_LAYOUT": "Create Dashboard layout", "ERROR": { "NAME_INVALID": "Name must be alphanumeric and can contain underscores, dashes, and periods.", "NAME_REQUIRED": "Layout name is a mandatory field.", @@ -166,10 +166,10 @@ }, "LABEL": "Create a new dashboard layout", "NAME": { - "HELPER_TEXT": "Enter a name for the dashboard layout.", + "HELPER_TEXT": "Enter a name for the Dashboard layout.", "LABEL": "Name" }, - "RENAME_LAYOUT": "Rename Dashboard Layout" + "RENAME_LAYOUT": "Rename Dashboard layout" }, "DashboardLayoutSetAsTemplateModal": { "DOWNLOAD": { @@ -207,7 +207,7 @@ "LABEL": "Layout menu", "OTHERS": "Layouts" }, - "NEW_LAYOUT": "New Layout", + "NEW_LAYOUT": "New layout", "RENAME": { "LABEL": "Rename layout" }, @@ -279,7 +279,7 @@ "QuickStarts": { "CATALOG_PAGE": { "HINT": "Quick start tutorials to get started with Cryostat.", - "TITLE": "Quick Starts" + "TITLE": "Quick starts" } }, "RecordingLabelFields": { @@ -290,27 +290,27 @@ "AUTO_REFRESH": { "CHECKBOX_LABEL": "Enabled", "DESCRIPTION": "Set the refresh period for content views. Views normally update dynamically via WebSocket notifications, so this should not be needed unless WebSockets are not working.", - "TITLE": "Auto-Refresh" + "TITLE": "Auto-refresh" }, "AUTOMATED_ANALYSIS_CONFIG": { - "DESCRIPTION": "Set the recording configuration for automated analysis recordings. You may want smaller or larger values for max-age and max-size depending on how recent you want events to be recorded from the analysis.", - "TITLE": "Automated Analysis Recording Configuration" + "DESCRIPTION": "Set the recording configuration for Automated Analysis recordings. You may want smaller or larger values for max-age and max-size depending on how recent you want events to be recorded from the analysis.", + "TITLE": "Automated Analysis recording configuration" }, "CATEGORIES": { "ADVANCED": "Advanced", "CONNECTIVITY": "Connectivity", "DASHBOARD": "Dashboard", "GENERAL": "General", - "NOTIFICATION_MESSAGE": "Notifications & Messages" + "NOTIFICATION_MESSAGE": "Notifications & messages" }, "CHARTS_CONFIG": { "DESCRIPTION": "", "REFRESH_RATE_SETTING": "Configure the minimum time to wait between data refreshes. Individual metrics cards may still request updates on a faster cycle, but the client application instance will throttle update requests to the server according to this setting.", - "TITLE": "Dashboard Metrics Configuration" + "TITLE": "Dashboard metrics configuration" }, "CREDENTIALS_STORAGE": { "BACKEND": { - "DESCRIPTION": "Keep credentials in encrypted Cryostat backend storage. These credentials will be available to other users and will be used for Automated Rules.", + "DESCRIPTION": "Keep credentials in encrypted Cryostat backend storage. These credentials will be available to other users and will be used for Automated rules.", "TITLE": "Backend" }, "BROWSER_SESSION": { @@ -332,12 +332,12 @@ "DELETION_DIALOG_CONTROL": { "DESCRIPTION": "", "SWITCH_DESCRIPTION": "Enable or disable deletion dialogs by deletion type.", - "SWITCH_LABEL": "All Deletion Warnings", - "TITLE": "Show Deletion Dialogs" + "SWITCH_LABEL": "All deletion warnings", + "TITLE": "Show deletion dialogs" }, "FEATURE_LEVEL": { "DESCRIPTION": "Control which graphical features appear in the application.", - "TITLE": "Feature Level" + "TITLE": "Feature level" }, "LANGUAGE": { "ARIA_LABELS": { @@ -350,7 +350,7 @@ "DESCRIPTION": "", "INPUT": "Control the maximum number of notification alerts that appear at once.", "INPUT_DESCRIPTION": "Enable or disable all notifications.", - "SWITCH_LABEL": "All Notifications", + "SWITCH_LABEL": "All notifications", "TITLE": "Notifications" }, "THEME": { @@ -365,7 +365,7 @@ }, "WEBSOCKET_CONNECTION_DEBOUNCE": { "DESCRIPTION": "Set the retry interval (in milliseconds) used when establishing WebSocket connections. Increase this time if the web-interface repeatedly displays WebSocket connection/disconnection messages. Decrease this time if the web-interface takes a long time to populate on startup.", - "TITLE": "WebSocket Retry Interval" + "TITLE": "WebSocket retry interval" } }, "TimePicker": { @@ -393,7 +393,7 @@ } }, "Topology": { - "GRAPH_VIEW": "Graph View", - "LIST_VIEW": "List View" + "GRAPH_VIEW": "Graph view", + "LIST_VIEW": "List view" } } diff --git a/locales/en/public_old.json b/locales/en/public_old.json new file mode 100644 index 000000000..af3f07f0c --- /dev/null +++ b/locales/en/public_old.json @@ -0,0 +1,7 @@ +{ + "ClickableAutomatedAnalysisLabel": { + "ARIA_LABELS": { + "POPOVER": "automated-analysis-description-popover" + } + } +} diff --git a/src/itest/RecordingWorkflow.test.ts b/src/itest/RecordingWorkflow.test.ts index fd034fced..ea5f9edb0 100644 --- a/src/itest/RecordingWorkflow.test.ts +++ b/src/itest/RecordingWorkflow.test.ts @@ -70,7 +70,7 @@ describe('Recording workflow steps', function () { await recordings.archiveRecording(active[0]); const notif = await cryostat.getLatestNotification(); - assert.equal(notif.title, 'Recording Saved'); + assert.equal(notif.title, 'Recording saved'); assert.ok(notif.description.includes('helloWorld')); }); diff --git a/src/test/Rules/__snapshots__/Rules.test.tsx.snap b/src/test/Rules/__snapshots__/Rules.test.tsx.snap index 9541f340a..52c184353 100644 --- a/src/test/Rules/__snapshots__/Rules.test.tsx.snap +++ b/src/test/Rules/__snapshots__/Rules.test.tsx.snap @@ -58,7 +58,7 @@ exports[` renders correctly 1`] = ` > Active Recordings - using a specific + using a specific renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="all-notifications-on" > - All Notifications + All notifications @@ -337,14 +337,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ActiveRecordingCreated-on" > - Recording Created + Recording created @@ -571,7 +571,7 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ArchivedRecordingCreated-on" > - Archived Recording Uploaded + Archived recording uploaded From c4aac309b77083d5aed0b6b5403941575e60900d Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 22 May 2024 20:10:59 -0400 Subject: [PATCH 04/13] delete public_old.json --- locales/en/public_old.json | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 locales/en/public_old.json diff --git a/locales/en/public_old.json b/locales/en/public_old.json deleted file mode 100644 index af3f07f0c..000000000 --- a/locales/en/public_old.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ClickableAutomatedAnalysisLabel": { - "ARIA_LABELS": { - "POPOVER": "automated-analysis-description-popover" - } - } -} From 65e6f493a1bd4e46050ca839b585d1f63a7ce9ca Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 22 May 2024 20:41:11 -0400 Subject: [PATCH 05/13] update util.ts --- src/itest/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/itest/util.ts b/src/itest/util.ts index 57231e038..3b13e42d8 100644 --- a/src/itest/util.ts +++ b/src/itest/util.ts @@ -148,7 +148,7 @@ export class Dashboard { const layoutSelector = await getElementById(this.driver, 'dashboard-layout-dropdown-toggle'); await layoutSelector.click(); - const newLayoutButton = await getElementByXPath(this.driver, '//button[contains(.,"New Layout")]'); + const newLayoutButton = await getElementByXPath(this.driver, '//button[contains(.,"New layout")]'); await newLayoutButton.click(); } From fe21e6d76c2f9076741035a97859d95f50200f92 Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Thu, 23 May 2024 16:33:00 -0400 Subject: [PATCH 06/13] resolved issues --- locales/en/public.json | 38 ++++++------- src/app/Agent/AgentProbeTemplates.tsx | 2 +- src/app/CreateRecording/CreateRecording.tsx | 6 +-- .../CreateRecording/CustomRecordingForm.tsx | 4 +- .../CreateRecording/SnapshotRecordingForm.tsx | 2 +- .../AutomatedAnalysisCardList.tsx | 2 +- .../AutomatedAnalysisFilters.tsx | 2 +- src/app/Dashboard/DashboardSolo.tsx | 2 +- .../cryostat-dashboard-templates.tsx | 2 +- src/app/Events/EventTemplates.tsx | 4 +- src/app/Joyride/CryostatJoyride.tsx | 6 +-- src/app/Modal/types.ts | 54 +++++++++---------- src/app/QuickStarts/README.md | 2 +- .../automated-rules-quickstart.tsx | 22 ++++---- .../quickstarts/dashboard-quickstart.tsx | 8 +-- .../quickstarts/settings-quickstart.tsx | 4 +- .../quickstarts/start-a-recording.tsx | 4 +- .../topology/group-start-recordings.tsx | 8 +-- src/app/Recordings/ActiveRecordingsTable.tsx | 2 +- .../Recordings/ArchivedRecordingsTable.tsx | 2 +- src/app/Rules/CreateRule.tsx | 6 +-- src/app/Rules/Rules.tsx | 14 ++--- src/app/Rules/RulesUploadModal.tsx | 10 ++-- .../Shared/Components/JmxAuthDescription.tsx | 2 +- src/app/Shared/Services/api.utils.ts | 24 ++++----- src/app/Topology/Actions/utils.tsx | 10 ++-- src/app/routes.tsx | 10 ++-- src/app/utils/fakeData.ts | 4 +- src/test/Agent/AgentProbeTemplates.test.tsx | 2 +- .../CustomRecordingForm.test.tsx.snap | 4 +- .../SnapshotRecordingForm.test.tsx.snap | 2 +- .../AutomatedAnalysisConfigDrawer.test.tsx | 2 +- .../AutomatedAnalysisConfigForm.test.tsx | 4 +- .../AutomatedAnalysisCardList.test.tsx.snap | 2 +- src/test/Events/EventTemplates.test.tsx | 12 ++--- .../EventTemplates.test.tsx.snap | 2 +- src/test/Rules/Rules.test.tsx | 4 +- .../Rules/__snapshots__/Rules.test.tsx.snap | 12 ++--- .../Settings/AutomatedAnalysisConfig.test.tsx | 2 +- .../Settings/DeletionDialogControl.test.tsx | 2 +- src/test/Settings/Settings.test.tsx | 6 +-- .../AutomatedAnalysisConfig.test.tsx.snap | 2 +- .../DeletionDialogControl.test.tsx.snap | 36 ++++++------- .../NotificationControl.test.tsx.snap | 48 ++++++++--------- 44 files changed, 199 insertions(+), 199 deletions(-) diff --git a/locales/en/public.json b/locales/en/public.json index 47f8dc917..f02091745 100644 --- a/locales/en/public.json +++ b/locales/en/public.json @@ -24,11 +24,11 @@ "AutomatedAnalysisCard": { "CARD_DESCRIPTION": "Assess common application performance and configuration issues.", "CARD_DESCRIPTION_FULL": "Creates a recording and periodically evaluates various common problems in application configuration and performance. Results are displayed with scores from 0-100 with colour coding and in groups. This card should be unique on a dashboard.", - "CARD_TITLE": "Automated Analysis", + "CARD_TITLE": "Automated analysis", "CRITICAL_RESULTS_one": "{{count}} Critical Result", "CRITICAL_RESULTS_other": "{{count}} Critical Results", "ERROR_TEXT": "Cryostat was unable to generate an automated analysis report.", - "ERROR_TITLE": "Automated Analysis Error", + "ERROR_TITLE": "Automated analysis Error", "GOOD_RESULTS": "No problems", "NO_RESULTS": "No Results Found", "NO_RESULTS_BODY": "No results match this filter criteria. Try removing filters, showing unavailable scores, or resetting the severity score filter to 0.", @@ -37,7 +37,7 @@ "STALE_REPORT": { "TEXT_one": "Most recent data from {{ count }} {{ units }} ago.", "TEXT_other": "Most recent data from {{ count }} {{ units }}s ago.", - "TOOLTIP": "Report data is stale. Click the Create recording button and choose an option to start an active recording to source automated reports from." + "TOOLTIP": "Report data is stale. Click the Create Recording button and choose an option to start an active recording to source automated reports from." }, "TOOLBAR": { "CHECKBOX": { @@ -48,7 +48,7 @@ "DELETE": { "LABEL": "Delete automated analysis" }, - "LABEL": "Automated Analysis Toolbar", + "LABEL": "Automated analysis Toolbar", "REFRESH": { "LABEL": "Refresh automated analysis" }, @@ -64,7 +64,7 @@ "AutomatedAnalysisConfigDrawer": { "INPUT_GROUP": { "CREATE_RECORDING": { - "LABEL": "Create recording" + "LABEL": "Create Recording" }, "OPEN_SETTINGS": { "LABEL": "Open Settings" @@ -78,7 +78,7 @@ "MAXIMUM_AGE": "Maximum age ({{unit}})", "MAXIMUM_SIZE": "Maximum size ({{unit}})", "SAVE_CHANGES": "Save changes", - "TEMPLATE_HELPER_TEXT": "The Event template to be applied to Automated Analysis recordings.", + "TEMPLATE_HELPER_TEXT": "The Event Template to be applied to automated analysis recordings.", "TEMPLATE_INVALID_WARNING": "WARNING: Setting a Target Template as a default template type configuration may not apply to all Target JVMs if the JVMs do not support them." }, "AutomatedAnalysisScoreFilter": { @@ -141,14 +141,14 @@ }, "TITLE": "{{chartKind}} (last {{duration}}s, every {{period}}s)" }, - "ClickableAutomatedAnalysisresult": { + "ClickableAutomatedAnalysisLabel": { "ARIA_LABELS": { - "POPOVER": "cryostat_tmp" + "POPOVER": "automated-analysis-description-popover" } }, "Dashboard": { "ADD_CARD_HELPER_TEXT": "Choose a card type to add to your dashboard. Some cards require additional configuration.", - "CARD_CATALOG_DESCRIPTION": "Cards added to this Dashboard layout present information at a glance about the selected target. The layout is preserved for all targets viewed on this client.", + "CARD_CATALOG_DESCRIPTION": "Cards added to this Dashboard Layout present information at a glance about the selected target. The layout is preserved for all targets viewed on this client.", "CARD_CATALOG_TITLE": "Dashboard Card catalog", "INVALID_CARD_CONFIGURATIONS": "Invalid Card configurations", "PAGE_TITLE": "Dashboard" @@ -157,23 +157,23 @@ "RESET_SIZE": "Reset size" }, "DashboardLayoutCreateModal": { - "CREATE_LAYOUT": "Create Dashboard layout", + "CREATE_LAYOUT": "Create Dashboard Layout", "ERROR": { "NAME_INVALID": "Name must be alphanumeric and can contain underscores, dashes, and periods.", "NAME_REQUIRED": "Layout name is a mandatory field.", "NAME_TAKEN": "Specified layout name already exists.", "NAME_TOO_LONG": "Name must be 20 characters or less." }, - "LABEL": "Create a new dashboard layout", + "LABEL": "Create a new Dashboard Layout", "NAME": { - "HELPER_TEXT": "Enter a name for the Dashboard layout.", + "HELPER_TEXT": "Enter a name for the Dashboard Layout.", "LABEL": "Name" }, - "RENAME_LAYOUT": "Rename Dashboard layout" + "RENAME_LAYOUT": "Rename Dashboard Layout" }, "DashboardLayoutSetAsTemplateModal": { "DOWNLOAD": { - "DESCRIPTION": "Download the current dashboard layout as a template.", + "DESCRIPTION": "Download the current Dashboard Layout as a template.", "TITLE": "Download Custom Layout Template" }, "ERROR": { @@ -192,7 +192,7 @@ } }, "SET_TEMPLATE": { - "DESCRIPTION": "Set the current dashboard layout as a template.", + "DESCRIPTION": "Set the current Dashboard Layout as a template.", "TITLE": "Set Custom Layout Template" } }, @@ -267,7 +267,7 @@ "VERSION_INVALID": "Template version is invalid." }, "HELP": { - "CONTENT": "Dashboard Layout Templates are pre-configured dashboard designs that can be used as a starting point for new dashboard layouts. Each template is defined in a JSON file that contains a list of dashboard cards and their configurations, as well as a unique name for the template. The name must be alphanumeric and can include underscores, dashes, and periods." + "CONTENT": "Dashboard Layout Templates are pre-configured dashboard designs that can be used as a starting point for new dashboard layouts. Each template is defined in a JSON file that contains a list of Dashboard Cards and their configurations, as well as a unique name for the template. The name must be alphanumeric and can include underscores, dashes, and periods." }, "TITLE": "Upload Dashboard Layout Template" }, @@ -293,8 +293,8 @@ "TITLE": "Auto-refresh" }, "AUTOMATED_ANALYSIS_CONFIG": { - "DESCRIPTION": "Set the recording configuration for Automated Analysis recordings. You may want smaller or larger values for max-age and max-size depending on how recent you want events to be recorded from the analysis.", - "TITLE": "Automated Analysis recording configuration" + "DESCRIPTION": "Set the recording configuration for automated analysis recordings. You may want smaller or larger values for max-age and max-size depending on how recent you want events to be recorded from the analysis.", + "TITLE": "Automated analysis recording configuration" }, "CATEGORIES": { "ADVANCED": "Advanced", @@ -310,7 +310,7 @@ }, "CREDENTIALS_STORAGE": { "BACKEND": { - "DESCRIPTION": "Keep credentials in encrypted Cryostat backend storage. These credentials will be available to other users and will be used for Automated rules.", + "DESCRIPTION": "Keep credentials in encrypted Cryostat backend storage. These credentials will be available to other users and will be used for Automated Rules.", "TITLE": "Backend" }, "BROWSER_SESSION": { diff --git a/src/app/Agent/AgentProbeTemplates.tsx b/src/app/Agent/AgentProbeTemplates.tsx index 3c9921b1b..9f23d4179 100644 --- a/src/app/Agent/AgentProbeTemplates.tsx +++ b/src/app/Agent/AgentProbeTemplates.tsx @@ -301,7 +301,7 @@ export const AgentProbeTemplates: React.FC = ({ agentD id="templateFilter" type="search" placeholder="Filter..." - aria-label="Probe template filter" + aria-label="Probe Template filter" onChange={setFilterText} value={filterText} /> diff --git a/src/app/CreateRecording/CreateRecording.tsx b/src/app/CreateRecording/CreateRecording.tsx index 80a990b17..08e2ad233 100644 --- a/src/app/CreateRecording/CreateRecording.tsx +++ b/src/app/CreateRecording/CreateRecording.tsx @@ -29,14 +29,14 @@ export const CreateRecording: React.FC = () => { ); return ( - + - + - + diff --git a/src/app/CreateRecording/CustomRecordingForm.tsx b/src/app/CreateRecording/CustomRecordingForm.tsx index 5eac26648..386bd184d 100644 --- a/src/app/CreateRecording/CustomRecordingForm.tsx +++ b/src/app/CreateRecording/CustomRecordingForm.tsx @@ -543,11 +543,11 @@ export const CustomRecordingForm: React.FC = () => { > A value of 0 for maximum size or age means unbounded. = (_) = <> - A Snapshot recording is one which contains all information about all events that have been captured in the + A Snapshot Recording is one which contains all information about all events that have been captured in the current session by other,  non-Snapshot recordings. Snapshots do not themselves define which events are enabled, their thresholds, or any other options. A Snapshot is only ever in the STOPPED state from the moment it is created. diff --git a/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx b/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx index 75d8f9b5f..e5b6999bc 100644 --- a/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx +++ b/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx @@ -113,7 +113,7 @@ export const AutomatedAnalysisCardList: React.FC return ( - + {t('NAME', { ns: 'common' })} diff --git a/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisFilters.tsx b/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisFilters.tsx index cf9bce22c..6983c1167 100644 --- a/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisFilters.tsx +++ b/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisFilters.tsx @@ -117,7 +117,7 @@ export const AutomatedAnalysisFilters: React.FC = case 'Topic': return t('FILTER_TOPIC', { ns: 'common' }); default: - throw new Error(`Unknown Automated Analysis Filter Category: ${category}`); + throw new Error(`Unknown automated analysis filter category: ${category}`); } }, [t], diff --git a/src/app/Dashboard/DashboardSolo.tsx b/src/app/Dashboard/DashboardSolo.tsx index 194765686..4a859048a 100644 --- a/src/app/Dashboard/DashboardSolo.tsx +++ b/src/app/Dashboard/DashboardSolo.tsx @@ -54,7 +54,7 @@ const DashboardSolo: React.FC = () => { - Dashboard card not found + Dashboard Card not found Provide valid layout and cardId query parameters and try again. diff --git a/src/app/Dashboard/cryostat-dashboard-templates.tsx b/src/app/Dashboard/cryostat-dashboard-templates.tsx index 7826bbc06..2047ac9c5 100644 --- a/src/app/Dashboard/cryostat-dashboard-templates.tsx +++ b/src/app/Dashboard/cryostat-dashboard-templates.tsx @@ -283,7 +283,7 @@ const MemoryMonitoringLayout: LayoutTemplate = { }; const AutomatedAnalysisLayout: LayoutTemplate = { - name: 'Automated Analysis', + name: 'Automated analysis', description: 'A layout template for identifying and calculating risk scores for common performance issues in a JVM.', vendor: LayoutTemplateVendor.CRYOSTAT, cards: [ diff --git a/src/app/Events/EventTemplates.tsx b/src/app/Events/EventTemplates.tsx index f8f41fe8e..b0909a6b6 100644 --- a/src/app/Events/EventTemplates.tsx +++ b/src/app/Events/EventTemplates.tsx @@ -254,7 +254,7 @@ export const EventTemplates: React.FC = (_) => { (t: EventTemplate) => { let actions = [ { - title: 'Create recording...', + title: 'Create Recording...', onClick: () => navigate('/recordings/create', { state: { template: { name: t.name, type: t.type } } as Partial, @@ -356,7 +356,7 @@ export const EventTemplates: React.FC = (_) => { id="templateFilter" type="search" placeholder="Filter..." - aria-label="Event template filter" + aria-label="Event Template filter" onChange={setFilterText} value={filterText} isDisabled={errorMessage != ''} diff --git a/src/app/Joyride/CryostatJoyride.tsx b/src/app/Joyride/CryostatJoyride.tsx index 896d0051d..d36ef651d 100644 --- a/src/app/Joyride/CryostatJoyride.tsx +++ b/src/app/Joyride/CryostatJoyride.tsx @@ -88,7 +88,7 @@ const CryostatJoyride: React.FC = ({ children }) => { use of Dashboard Cards.


-

There are various dashboard cards that can be configured to display different metrics and charts.

+

There are various Dashboard Cards that can be configured to display different metrics and charts.

), target: '*[data-tour-id="dashboard"]', @@ -108,10 +108,10 @@ const CryostatJoyride: React.FC = ({ children }) => { placement: 'right', }, { - title: 'Automated rules', + title: 'Automated Rules', content: (

- Create, delete, enable, and view Cryostat Automated rules in this view. Automated rules + Create, delete, enable, and view Cryostat Automated Rules in this view. Automated Rules allow you start recordings on target JVMs based on a set of conditions.

), diff --git a/src/app/Modal/types.ts b/src/app/Modal/types.ts index dda3de0a3..2572a8bd1 100644 --- a/src/app/Modal/types.ts +++ b/src/app/Modal/types.ts @@ -39,7 +39,7 @@ export interface DeleteOrDisableWarning { export const DeleteActiveRecordings: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteActiveRecordings, title: 'Permanently delete your JFR recording?', - label: 'Delete Active recording', + label: 'Delete Active Recording', description: `If you click Delete, recording and report data will be lost.`, ariaLabel: 'Recording delete warning', }; @@ -47,47 +47,47 @@ export const DeleteActiveRecordings: DeleteOrDisableWarning = { export const DeleteArchivedRecordings: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteArchivedRecordings, title: 'Permanently delete your Archived JFR recording?', - label: 'Delete Archived recording', + label: 'Delete Archived Recording', description: `If you click Delete, recording and report data will be lost.`, ariaLabel: 'Recording delete warning', }; export const DeleteAutomatedRules: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteAutomatedRules, - title: 'Permanently delete your Automated rule?', - label: 'Delete Automated rule', + title: 'Permanently delete your Automated Rule?', + label: 'Delete Automated Rule', description: `If you click Delete, rule data will be lost.`, - ariaLabel: 'Automated rule delete warning', + ariaLabel: 'Automated Rule delete warning', }; export const DisableAutomatedRules: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DisableAutomatedRules, - title: 'Disable your Automated rule?', - label: 'Disable Automated rule', + title: 'Disable your Automated Rule?', + label: 'Disable Automated Rule', description: `If you click Disable, the rule will be disabled.`, - ariaLabel: 'Automated rule disable warning', + ariaLabel: 'Automated Rule disable warning', }; export const DeleteEventTemplates: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteEventTemplates, - title: 'Permanently delete your Event template?', - label: 'Delete Event template', + title: 'Permanently delete your Event Template?', + label: 'Delete Event Template', description: `If you click Delete, custom event template data will be lost.`, - ariaLabel: 'Event template delete warning', + ariaLabel: 'Event Template delete warning', }; export const DeleteProbeTemplates: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteProbeTemplates, - title: 'Permanently delete your Probe template?', - label: 'Delete Probe template', - description: `If you click Delete, custom Probe template data will be lost.`, - ariaLabel: 'Probe template delete warning', + title: 'Permanently delete your Probe Template?', + label: 'Delete Probe Template', + description: `If you click Delete, custom Probe Template data will be lost.`, + ariaLabel: 'Probe Template delete warning', }; export const DeleteActiveProbes: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteActiveProbes, title: 'Permanently remove your active Probes from the target?', - label: 'Remove active Probes', + label: 'Remove Active Probes', description: `If you click Delete, active Probes will be removed from the target.`, ariaLabel: 'Active Probes remove warning', }; @@ -110,26 +110,26 @@ export const DeleteCustomTargets: DeleteOrDisableWarning = { export const DeleteDashboardLayout: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteDashboardLayout, - title: 'Permanently delete your Dashboard layout?', + title: 'Permanently delete your Dashboard Layout?', label: 'Delete Dashboard layouts', - description: `If you click Delete, Dashboard layout configuration data will be lost.`, - ariaLabel: 'Dashboard layout delete warning', + description: `If you click Delete, Dashboard Layout configuration data will be lost.`, + ariaLabel: 'Dashboard Layout delete warning', }; export const ClearDashboardLayout: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.ClearDashboardLayout, - title: 'Permanently clear your Dashboard layout?', - label: 'Clear Dashboard layout', - description: 'If you click Clear, all cards in the current Dashboard layout will be removed.', - ariaLabel: 'Dashboard layout clear warning', + title: 'Permanently clear your Dashboard Layout?', + label: 'Clear Dashboard Layout', + description: 'If you click Clear, all cards in the current Dashboard Layout will be removed.', + ariaLabel: 'Dashboard Layout clear warning', }; export const DeleteLayoutTemplate: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteLayoutTemplate, - title: 'Permanently delete your Layout template?', - label: 'Delete Layout template', - description: `If you click Delete, Layout template configuration data will be lost.`, - ariaLabel: 'Layout template delete warning', + title: 'Permanently delete your Layout Template?', + label: 'Delete Layout Template', + description: `If you click Delete, Layout Template configuration data will be lost.`, + ariaLabel: 'Layout Template delete warning', }; export const DeleteWarningKinds: DeleteOrDisableWarning[] = [ diff --git a/src/app/QuickStarts/README.md b/src/app/QuickStarts/README.md index 0bd049d54..2ffdaf1e0 100644 --- a/src/app/QuickStarts/README.md +++ b/src/app/QuickStarts/README.md @@ -27,7 +27,7 @@ TODO: Fix this section when quick starts are categorized [About]{{highlight nav-about-tab}} [Dashboard]{{highlight nav-dashboard-tab}} [Topology]{{highlight nav-topology-tab}} -[Automated rules]{{highlight nav-automatedrules-tab}} +[Automated Rules]{{highlight nav-automatedrules-tab}} [Recordings]{{highlight nav-recordings-tab}} [Archives]{{highlight nav-archives-tab}} [Events]{{highlight nav-events-tab}} diff --git a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx index 6a0cae9c5..7e4976000 100644 --- a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx @@ -17,7 +17,7 @@ import { FeatureLevel } from '@app/Shared/Services/service.types'; import { QuickStart } from '@patternfly/quickstarts'; import { CryostatIcon, conclusion } from '../quickstart-utils'; -const displayName = 'Get started with Automated rules'; +const displayName = 'Get started with Automated Rules'; const AutomatedRulesQuickStart: QuickStart = { metadata: { @@ -33,8 +33,8 @@ const AutomatedRulesQuickStart: QuickStart = { description: `Learn about automated rules in **[APP]** and how to create one.`, prerequisites: ['Start a recording'], introduction: ` -## Automated rules -Automated rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently [APP] should copy the application recording buffer into [APP]'s own archived storage. +## Automated Rules +Automated Rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently [APP] should copy the application recording buffer into [APP]'s own archived storage. ### What you'll learn @@ -49,21 +49,21 @@ Automated rules are configurations that instruct [APP] to create JDK Flight Reco `, tasks: [ { - title: 'Create a new Automated rule', + title: 'Create a new Automated Rule', description: ` -1. In the [APP] console navigation bar, click [Automated rules]{{highlight nav-automatedrules-tab}}. +1. In the [APP] console navigation bar, click [Automated Rules]{{highlight nav-automatedrules-tab}}. 2. Click [Create]{{highlight create-rule-btn}}. `, review: { - instructions: '#### Verify that you see the Automated rules creation form.', + instructions: '#### Verify that you see the Automated Rules creation form.', failedTaskHelp: 'If you do not see the navigation bar, click the [menu button]{{highlight nav-toggle-btn}} on the masthead.', }, }, { - title: 'Fill out the Automated rule form', + title: 'Fill out the Automated Rule form', description: ` -To create a new rule, use the Automated rule creation form to fill in the required fields. +To create a new rule, use the Automated Rule creation form to fill in the required fields. The [Match expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the match expression: \`true\`{{copy}}. You can also match targets more specifically with a match expression like \`target.annotations.cryostat['PORT'] == 9091\`{{copy}}, which will match targets that are connected to [APP] on port 9091. @@ -81,7 +81,7 @@ To create a new rule, you must fill out the following required fields: `, review: { - instructions: '#### Verify that you see the new rule in the Automated rules table.', + instructions: '#### Verify that you see the new rule in the Automated Rules table.', failedTaskHelp: `If you do not see the new rule, follow the previous steps again. If you cannot create the rule, check that you have entered valid values for each required field.`, }, @@ -101,13 +101,13 @@ The recording should be named according to the rule-name format, such as \`auto_ `, review: { instructions: - '#### Verify that you see the new recording with the correct Automated rule recording naming scheme in the list of recordings.', + '#### Verify that you see the new recording with the correct Automated Rule recording naming scheme in the list of recordings.', failedTaskHelp: 'If you do not see the new recording, go back to the Rule Creation form, and try verifying that your rule match expression correctly matches the intended target JVMs in this task.', }, }, ], - conclusion: conclusion(displayName, 'Automated rules'), + conclusion: conclusion(displayName, 'Automated Rules'), type: { text: 'Advanced', color: 'red', diff --git a/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx b/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx index 9f7f41e04..9a735db41 100644 --- a/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx @@ -86,7 +86,7 @@ The new layout is automatically selected and should be named \`Custom1\`, assumi The following Dashboard Cards are available: - **Target JVM Details** -- **Automated Analysis** +- **Automated analysis** - **JFR Metrics Chart (BETA)** - **MBean Metrics Chart** @@ -149,14 +149,14 @@ You can rename, delete and quickly switch between **Dashboard Layouts** for diff This will open a dropdown menu. 2. Select **Choose Template**. A modal will open with a list of available templates. There will be two template categories: **Suggested** and **Cryostat**. -3. From the **Cryostat** category, select the **Automated Analysis** template. +3. From the **Cryostat** category, select the **Automated analysis** template. 4. Enter a name for the new layout in the **Name** field. 5. Click **Create** to finish. `, review: { - instructions: '#### Verify that you are able to create a dashboard layout from template.', + instructions: '#### Verify that you are able to create a Dashboard Layout from template.', failedTaskHelp: - 'If you are having trouble creating a dashboard layout from a template, make sure that you have selected a template from the Template Picker and entered a name for the new layout.', + 'If you are having trouble creating a Dashboard Layout from a template, make sure that you have selected a template from the Template Picker and entered a name for the new layout.', }, }, ], diff --git a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx index fe3f67141..22199c639 100644 --- a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx @@ -85,13 +85,13 @@ The **Notifications & messages** tab allows you to configure the notifications a description: ` The **Dashboard** tab allows you to configure settings for the various Dashboard Cards that you can add to the Dashboard. -The **Automated Analysis** dashboard card allows you to automatically start an analysis on the recording with a click of a button. You can configure the recording that is started by this card. +The **Automated analysis** Dashboard Card allows you to automatically start an analysis on the recording with a click of a button. You can configure the recording that is started by this card. 1. From the list of settings tabs, click [Dashboard]{{highlight settings-dashboard-tab}}. 2. Configure the **Automated analysis recording configuration** settings. 3. Configure the **Dashboard metrics configuration** settings. -[When using the **Automated Analysis Card**, make sure the **Event Template** is compatible with the target JVM.]{{admonition warning}} +[When using the **Automated analysis card**, make sure the **Event Template** is compatible with the target JVM.]{{admonition warning}} [Setting both an infinite maximum size and age may result in an **Out Of Memory** error during report generation.]{{admonition caution}} `, }, diff --git a/src/app/QuickStarts/quickstarts/start-a-recording.tsx b/src/app/QuickStarts/quickstarts/start-a-recording.tsx index a8c10e70e..97d3e9040 100644 --- a/src/app/QuickStarts/quickstarts/start-a-recording.tsx +++ b/src/app/QuickStarts/quickstarts/start-a-recording.tsx @@ -85,7 +85,7 @@ There are two tabs within the Recordings page: To start an active recording: -1. Click [Create]{{highlight recordings-create-btn}} to open the **Custom Flight recording Form**. +1. Click [Create]{{highlight recordings-create-btn}} to open the **Custom Flight Recording Form**. [If you have a smaller viewport, the \`Create\` button may not be immediately visible. In this case, you can click on the kebab button (three vertical dots) to reveal additional options, including \`Create\`."]{{admonition note}} 2. Enter a name for the recording in the [Name]{{highlight crf-name}} field. 3. Select the [Duration]{{highlight crf-duration}} for the recording. You can select \`CONTINUOUS\` to record until the recording is stopped. @@ -128,7 +128,7 @@ Downloading a recording will save the recording to your local machine as a JFR f { title: 'View an analysis report', description: ` -[APP] is able to generate an **Automated Analysis Report** using a JFR recording. The **Java Mission Control** rules engine analyzes your recording, looks for common problems, and assigns a severity score from 0 (no problem) to 100 (potentially severe problem) to each problem. +[APP] is able to generate an **Automated analysis Report** using a JFR recording. The **Java Mission Control** rules engine analyzes your recording, looks for common problems, and assigns a severity score from 0 (no problem) to 100 (potentially severe problem) to each problem. 1. Click the [kebab menu]{{highlight recording-kebab}} next to the recording that you want to view an analysis report for. 2. Click \`View Report ...\` to view an analysis report of the recording in a new tab. 3. *Optional:* Right click on the page and select \`Save Page As...\` to download the report HTML file to your local machine. diff --git a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx index 22d59b081..30471005a 100644 --- a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx +++ b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx @@ -26,7 +26,7 @@ const GroupStartRecordingQuickStart: QuickStart = { }, spec: { version: 2.3, - displayName: 'Start recording on multiple target JVMs', + displayName: 'Start Recording on multiple target JVMs', durationMinutes: 5, icon: , description: 'Learn how to start recordings on multiple targets at once.', @@ -72,9 +72,9 @@ In *List view*, to reveal nested groups, click on list rows.`, }, }, { - title: 'Start recording for a group of targets.', + title: 'Start Recording for a group of targets.', description: ` -To start a recording for targets under the selected group, select the \`Start recording\` option. +To start a recording for targets under the selected group, select the \`Start Recording\` option. On each descendant target, **Cryostat** will create an active recording named \`cryostat_topology_action\` with the label \`cryostat.io.topology-group=\` which represents the group the action is invoked on. @@ -104,7 +104,7 @@ To check the started recordings in the previous step: }, }, ], - conclusion: conclusion('Start recording on multiple target JVMs', 'Topology'), + conclusion: conclusion('Start Recording on multiple target JVMs', 'Topology'), type: { text: 'Featured', color: 'blue', diff --git a/src/app/Recordings/ActiveRecordingsTable.tsx b/src/app/Recordings/ActiveRecordingsTable.tsx index b30c1765f..e8b6a20d2 100644 --- a/src/app/Recordings/ActiveRecordingsTable.tsx +++ b/src/app/Recordings/ActiveRecordingsTable.tsx @@ -1011,7 +1011,7 @@ export const ActiveRecordingRow: React.FC = ({ onClick={handleLoadAnalysis} icon={} /> - Automated Analysis + Automated analysis {loadingAnalysis ? ( diff --git a/src/app/Recordings/ArchivedRecordingsTable.tsx b/src/app/Recordings/ArchivedRecordingsTable.tsx index c8fd7d5d5..a9a2d750a 100644 --- a/src/app/Recordings/ArchivedRecordingsTable.tsx +++ b/src/app/Recordings/ArchivedRecordingsTable.tsx @@ -926,7 +926,7 @@ export const ArchivedRecordingRow: React.FC = ({ - Automated Analysis + Automated analysis {loadingAnalysis ? ( diff --git a/src/app/Rules/CreateRule.tsx b/src/app/Rules/CreateRule.tsx index 9f6f17a70..ecc94c10b 100644 --- a/src/app/Rules/CreateRule.tsx +++ b/src/app/Rules/CreateRule.tsx @@ -343,8 +343,8 @@ export const CreateRuleForm: React.FC = (_props) => { return ( - Automated rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM - applications. Each Automated rule specifies parameters for which Event Template to use, how much data should be + Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM + applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently Cryostat should copy the application recording buffer into Cryostat's own archived storage. @@ -651,7 +651,7 @@ export const CreateRule: React.FC = () => { const breadcrumbs: BreadcrumbTrail[] = React.useMemo( () => [ { - title: 'Automated rules', + title: 'Automated Rules', path: '/rules', }, ], diff --git a/src/app/Rules/Rules.tsx b/src/app/Rules/Rules.tsx index a9341a9d9..e5ab1fcf0 100644 --- a/src/app/Rules/Rules.tsx +++ b/src/app/Rules/Rules.tsx @@ -369,7 +369,7 @@ export const RulesTable: React.FC = (_) => { - No Automated rules + No Automated Rules @@ -377,7 +377,7 @@ export const RulesTable: React.FC = (_) => { } else { return ( - + {tableColumns.map(({ title, tooltip, sortable }, index) => ( @@ -406,15 +406,15 @@ export const RulesTable: React.FC = (_) => { return ( <> - + - About Automated rules + About Automated Rules - Automated rules define a dynamic set of Target JVMs to connect to and start{' '} + Automated Rules define a dynamic set of Target JVMs to connect to and start{' '} Active Recordings using a specific Event Template{' '} - when the Automated rule is created and when any new matching Target JVMs appear. If your Target JVM + when the Automated Rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in Security. - Automated rules can be configured to periodically copy the contents of the Active recording to{' '} + Automated Rules can be configured to periodically copy the contents of the Active Recording to{' '} Archives to ensure you always have up-to-date information about your JVMs. diff --git a/src/app/Rules/RulesUploadModal.tsx b/src/app/Rules/RulesUploadModal.tsx index 3c13ce219..6ea301c83 100644 --- a/src/app/Rules/RulesUploadModal.tsx +++ b/src/app/Rules/RulesUploadModal.tsx @@ -41,7 +41,7 @@ export const parseRule = (file: File): Observable => { if (isRule(obj)) { return obj; } else { - throw new Error('Automated rule content is invalid.'); + throw new Error('Automated Rule content is invalid.'); } }), ); @@ -138,16 +138,16 @@ export const RuleUploadModal: React.FC = ({ onClose, ...pr variant={ModalVariant.large} showClose={true} onClose={handleClose} - title="Upload Automated rules" - description="Select an Automated rules definition file to upload. File must be in valid JSON format." + title="Upload Automated Rules" + description="Select an Automated Rules definition file to upload. File must be in valid JSON format." help={ What"s this?} bodyContent={
- Automated rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching - target JVM applications. Each Automated rule specifies parameters for which Event Template to use, how + Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching + target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently Cryostat should copy the application recording buffer into Cryostat"s own archived storage.
diff --git a/src/app/Shared/Components/JmxAuthDescription.tsx b/src/app/Shared/Components/JmxAuthDescription.tsx index b1d0e6650..31f487d12 100644 --- a/src/app/Shared/Components/JmxAuthDescription.tsx +++ b/src/app/Shared/Components/JmxAuthDescription.tsx @@ -41,7 +41,7 @@ export const JmxAuthDescription: React.FC These authentication credentials are stored in encrypted storage managed by the Cryostat backend and used for - manually managing recordings and event templates on target JVMs, as well as for Automated rules which run in the + manually managing recordings and event templates on target JVMs, as well as for Automated Rules which run in the background and open unattended target connections. diff --git a/src/app/Shared/Services/api.utils.ts b/src/app/Shared/Services/api.utils.ts index 797e22937..a4cefcfed 100644 --- a/src/app/Shared/Services/api.utils.ts +++ b/src/app/Shared/Services/api.utils.ts @@ -198,7 +198,7 @@ export const messageKeys = new Map([ [ NotificationCategory.LayoutTemplateCreated, { - title: 'Layout template created', + title: 'Layout Template created', }, ], [ @@ -287,7 +287,7 @@ export const messageKeys = new Map([ NotificationCategory.ArchivedRecordingCreated, { variant: AlertVariant.success, - title: 'Archived recording uploaded', + title: 'Archived Recording uploaded', body: (evt) => `${evt.message.recording.name} was uploaded into archives`, } as NotificationMessageMapper, ], @@ -295,7 +295,7 @@ export const messageKeys = new Map([ NotificationCategory.ArchivedRecordingDeleted, { variant: AlertVariant.success, - title: 'Archived recording deleted', + title: 'Archived Recording deleted', body: (evt) => `${evt.message.recording.name} was deleted`, } as NotificationMessageMapper, ], @@ -311,7 +311,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbeTemplateUploaded, { variant: AlertVariant.success, - title: 'Probe template created', + title: 'Probe Template created', body: (evt) => `${evt.message.probeTemplate} was created`, } as NotificationMessageMapper, ], @@ -319,7 +319,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbeTemplateApplied, { variant: AlertVariant.success, - title: 'Probe template applied', + title: 'Probe Template applied', body: (evt) => `${evt.message.probeTemplate} was inserted`, } as NotificationMessageMapper, ], @@ -335,7 +335,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbeTemplateDeleted, { variant: AlertVariant.success, - title: 'Probe template deleted', + title: 'Probe Template deleted', body: (evt) => `${evt.message.probeTemplate} was deleted`, } as NotificationMessageMapper, ], @@ -343,7 +343,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbesRemoved, { variant: AlertVariant.success, - title: 'Probes removed from target', + title: 'Probes removed from Target', body: (evt) => `Probes successfully removed from ${evt.message.target}`, } as NotificationMessageMapper, ], @@ -351,7 +351,7 @@ export const messageKeys = new Map([ NotificationCategory.RuleCreated, { variant: AlertVariant.success, - title: 'Automated rule created', + title: 'Automated Rule created', body: (evt) => `${evt.message.name} was created`, } as NotificationMessageMapper, ], @@ -359,7 +359,7 @@ export const messageKeys = new Map([ NotificationCategory.RuleUpdated, { variant: AlertVariant.success, - title: 'Automated rule updated', + title: 'Automated Rule updated', body: (evt) => `${evt.message.name} was ` + (evt.message.enabled ? 'enabled' : 'disabled'), } as NotificationMessageMapper, ], @@ -367,7 +367,7 @@ export const messageKeys = new Map([ NotificationCategory.RuleDeleted, { variant: AlertVariant.success, - title: 'Automated rule deleted', + title: 'Automated Rule deleted', body: (evt) => `${evt.message.name} was deleted`, } as NotificationMessageMapper, ], @@ -383,7 +383,7 @@ export const messageKeys = new Map([ NotificationCategory.TargetCredentialsStored, { variant: AlertVariant.success, - title: 'Target credentials stored', + title: 'Target Credentials stored', body: (evt) => `Credentials stored for target: ${evt.message.target}`, } as NotificationMessageMapper, ], @@ -391,7 +391,7 @@ export const messageKeys = new Map([ NotificationCategory.TargetCredentialsDeleted, { variant: AlertVariant.success, - title: 'Target credentials deleted', + title: 'Target Credentials deleted', body: (evt) => `Credentials deleted for target: ${evt.message.target}`, } as NotificationMessageMapper, ], diff --git a/src/app/Topology/Actions/utils.tsx b/src/app/Topology/Actions/utils.tsx index f994d0aed..9e9c414f0 100644 --- a/src/app/Topology/Actions/utils.tsx +++ b/src/app/Topology/Actions/utils.tsx @@ -101,7 +101,7 @@ export const nodeActions: NodeAction[] = [ services.target.setTarget(targetNode.target); navigate('/rules/create'); }, - title: 'Create Automated rules', + title: 'Create Automated Rules', }, { key: '', isSeparator: true }, { @@ -120,7 +120,7 @@ export const nodeActions: NodeAction[] = [ }, { key: 'GROUP_START_RECORDING', - title: 'Start recording', + title: 'Start Recording', isGroup: true, action: (element, { services, notifications }) => { const group: EnvironmentNode = element.getData(); @@ -166,7 +166,7 @@ export const nodeActions: NodeAction[] = [ }, { key: 'GROUP_ARCHIVE_RECORDING', - title: 'Archive recording', + title: 'Archive Recording', isGroup: true, action: (element, { services, notifications }) => { const group: EnvironmentNode = element.getData(); @@ -210,7 +210,7 @@ export const nodeActions: NodeAction[] = [ }, { key: 'GROUP_STOP_RECORDING', - title: 'Stop recording', + title: 'Stop Recording', isGroup: true, action: (element, { services, notifications }) => { const group: EnvironmentNode = element.getData(); @@ -256,7 +256,7 @@ export const nodeActions: NodeAction[] = [ { key: '', isSeparator: true, isGroup: true }, { key: 'GROUP_DELETE_RECORDING', - title: 'Delete recording', + title: 'Delete Recording', isGroup: true, action: (element, { services, notifications }) => { const group: EnvironmentNode = element.getData(); diff --git a/src/app/routes.tsx b/src/app/routes.tsx index c0e30a39d..933b161a8 100644 --- a/src/app/routes.tsx +++ b/src/app/routes.tsx @@ -105,18 +105,18 @@ const routes: IAppRoute[] = [ { component: RulesTable, - label: 'Automated rules', + label: 'Automated Rules', path: '/rules', - title: 'Automated rules', + title: 'Automated Rules', description: - 'Create Recordings on multiple target JVMs at once using Automated rules consisting of a name, match expression, template, archival period, and more.', + 'Create Recordings on multiple target JVMs at once using Automated Rules consisting of a name, match expression, template, archival period, and more.', navGroup: CONSOLE, children: [ { component: CreateRule, path: '/rules/create', - title: 'Create Automated rule', + title: 'Create Automated Rule', }, ], }, @@ -133,7 +133,7 @@ const routes: IAppRoute[] = [ component: CreateRecording, path: '/recordings/create', - title: 'Create recording', + title: 'Create Recording', }, ], }, diff --git a/src/app/utils/fakeData.ts b/src/app/utils/fakeData.ts index 1723e190c..e3a5b2d95 100644 --- a/src/app/utils/fakeData.ts +++ b/src/app/utils/fakeData.ts @@ -347,8 +347,8 @@ class FakeApiService extends ApiService { return of([]); } - // Automated Analysis Card - // This fakes the fetch for Automated Analysis recording to return available. + // Automated analysis card + // This fakes the fetch for automated analysis recording to return available. // Then subsequent graphql call for archived recording is ignored graphql( _query: string, diff --git a/src/test/Agent/AgentProbeTemplates.test.tsx b/src/test/Agent/AgentProbeTemplates.test.tsx index 55c62eb8e..5fe771ce6 100644 --- a/src/test/Agent/AgentProbeTemplates.test.tsx +++ b/src/test/Agent/AgentProbeTemplates.test.tsx @@ -278,7 +278,7 @@ describe('', () => { routerConfigs: { routes: [{ path: '/events', element: }] }, }); - const filterInput = screen.getByLabelText('Probe template filter'); + const filterInput = screen.getByLabelText('Probe Template filter'); expect(filterInput).toBeInTheDocument(); expect(filterInput).toBeVisible(); diff --git a/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap b/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap index 156ed6e59..0671aeb41 100644 --- a/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap +++ b/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap @@ -573,13 +573,13 @@ Array [ className="pf-c-check__label" htmlFor="toDisk-checkbox" > - To Disk + To disk
Write contents of buffer onto disk. If disabled, the buffer acts as circular buffer only keeping the most recent recording information
diff --git a/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap b/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap index b28ef22be..b442a73bd 100644 --- a/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap +++ b/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap @@ -12,7 +12,7 @@ exports[` renders correctly 1`] = ` data-ouia-safe={true} data-pf-content={true} > - A Snapshot recording is one which contains all information about all events that have been captured in the current session by + A Snapshot Recording is one which contains all information about all events that have been captured in the current session by other,  non-Snapshot diff --git a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx index be096f9e2..7a452bc80 100644 --- a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx +++ b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx @@ -101,7 +101,7 @@ describe('', () => { expect(screen.getByText(/automatedanalysisconfigform/i)).toBeInTheDocument(); }); - it('creates a recording when Create recording is clicked', async () => { + it('creates a recording when Create Recording is clicked', async () => { const onCreateFunction = jest.fn(); const requestSpy = jest.spyOn(defaultServices.api, 'createRecording'); const { user } = render({ diff --git a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx index fcfed6b1f..03465ed6b 100644 --- a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx +++ b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx @@ -107,7 +107,7 @@ describe('', () => { const templateSelect = screen.getByLabelText('Template *'); // Template select expect(templateSelect).toBeInTheDocument(); expect(templateSelect).toBeVisible(); - expect(screen.getByText(/The Event Template to be applied to Automated Analysis recordings./i)).toBeInTheDocument(); + expect(screen.getByText(/The Event Template to be applied to automated analysis recordings./i)).toBeInTheDocument(); expect(screen.getByText(/the maximum size of recording data saved to disk./i)).toBeInTheDocument(); @@ -128,7 +128,7 @@ describe('', () => { const templateSelect = screen.getByLabelText('Template *'); // Template select expect(templateSelect).toBeInTheDocument(); expect(templateSelect).toBeVisible(); - expect(screen.getByText(/The Event Template to be applied to Automated Analysis recordings./i)).toBeInTheDocument(); + expect(screen.getByText(/The Event Template to be applied to automated analysis recordings./i)).toBeInTheDocument(); expect(screen.getByText(/the maximum size of recording data saved to disk./i)).toBeInTheDocument(); diff --git a/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap b/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap index 8e0209171..9a08e0ea2 100644 --- a/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap +++ b/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap @@ -8,7 +8,7 @@ exports[` renders correctly 1`] = ` className="automated-analysis-datalist-innerscroll pf-c-scroll-inner-wrapper" > ', () => { await user.click(screen.getByLabelText('Actions')); - expect(screen.getByText('Create recording...')); + expect(screen.getByText('Create Recording...')); expect(screen.getByText('Download')); expect(screen.getByText('Delete')); const deleteAction = screen.getByText('Delete'); await user.click(deleteAction); - expect(screen.getByLabelText('Event template delete warning')); + expect(screen.getByLabelText('Event Template delete warning')); const deleteRequestSpy = jest.spyOn(defaultServices.api, 'deleteCustomEventTemplate'); const dialogWarningSpy = jest.spyOn(defaultServices.settings, 'setDeletionDialogsEnabledFor'); await user.click(screen.getByLabelText("Don't ask me again")); - await user.click(within(screen.getByLabelText('Event template delete warning')).getByText('Delete')); + await user.click(within(screen.getByLabelText('Event Template delete warning')).getByText('Delete')); expect(deleteRequestSpy).toHaveBeenCalledTimes(1); expect(deleteRequestSpy).toBeCalledWith('someEventTemplate'); @@ -246,7 +246,7 @@ describe('', () => { await user.click(screen.getByLabelText('Actions')); - expect(screen.getByText('Create recording...')); + expect(screen.getByText('Create Recording...')); expect(screen.getByText('Download')); expect(screen.getByText('Delete')); @@ -255,7 +255,7 @@ describe('', () => { await user.click(deleteAction); expect(deleteRequestSpy).toHaveBeenCalledTimes(1); - expect(screen.queryByLabelText('Event template delete warning')).not.toBeInTheDocument(); + expect(screen.queryByLabelText('Event Template delete warning')).not.toBeInTheDocument(); }); it('should show error view if failing to retrieve event templates', async () => { @@ -308,7 +308,7 @@ describe('', () => { }, }); - const filterInput = screen.getByLabelText('Event template filter'); + const filterInput = screen.getByLabelText('Event Template filter'); expect(filterInput).toBeInTheDocument(); expect(filterInput).toBeVisible(); diff --git a/src/test/Events/__snapshots__/EventTemplates.test.tsx.snap b/src/test/Events/__snapshots__/EventTemplates.test.tsx.snap index 1009f7e59..d4cc450a1 100644 --- a/src/test/Events/__snapshots__/EventTemplates.test.tsx.snap +++ b/src/test/Events/__snapshots__/EventTemplates.test.tsx.snap @@ -23,7 +23,7 @@ Array [ > ', () => { expect(modal).toBeInTheDocument(); expect(modal).toBeVisible(); - const modalTitle = await within(modal).findByText('Upload Automated rules'); + const modalTitle = await within(modal).findByText('Upload Automated Rules'); expect(modalTitle).toBeInTheDocument(); expect(modalTitle).toBeVisible(); @@ -337,7 +337,7 @@ describe('', () => { expect(modal).toBeInTheDocument(); expect(modal).toBeVisible(); - const modalTitle = await within(modal).findByText('Upload Automated rules'); + const modalTitle = await within(modal).findByText('Upload Automated Rules'); expect(modalTitle).toBeInTheDocument(); expect(modalTitle).toBeVisible(); diff --git a/src/test/Rules/__snapshots__/Rules.test.tsx.snap b/src/test/Rules/__snapshots__/Rules.test.tsx.snap index 52c184353..1d2c8488e 100644 --- a/src/test/Rules/__snapshots__/Rules.test.tsx.snap +++ b/src/test/Rules/__snapshots__/Rules.test.tsx.snap @@ -23,7 +23,7 @@ exports[` renders correctly 1`] = `

- Automated rules + Automated Rules

@@ -45,12 +45,12 @@ exports[` renders correctly 1`] = `
- About Automated rules + About Automated Rules
- Automated rules define a dynamic set of Target JVMs to connect to and start + Automated Rules define a dynamic set of Target JVMs to connect to and start renders correctly 1`] = ` Event Template - when the Automated rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in + when the Automated Rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in Security - . Automated rules can be configured to periodically copy the contents of the Active recording to + . Automated Rules can be configured to periodically copy the contents of the Active Recording to renders correctly 1`] = ` data-ouia-component-type="PF4/Title" data-ouia-safe={true} > - No Automated rules + No Automated Rules
diff --git a/src/test/Settings/AutomatedAnalysisConfig.test.tsx b/src/test/Settings/AutomatedAnalysisConfig.test.tsx index 8a8908525..0f6021e68 100644 --- a/src/test/Settings/AutomatedAnalysisConfig.test.tsx +++ b/src/test/Settings/AutomatedAnalysisConfig.test.tsx @@ -22,7 +22,7 @@ import { renderSnapshot } from '@test/utils'; import * as React from 'react'; jest.mock('@app/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm', () => ({ - AutomatedAnalysisConfigForm: (_: any) => <>Automated Analysis Configuration Form, + AutomatedAnalysisConfigForm: (_: any) => <>Automated analysis Configuration Form, })); jest.mock('@app/TargetView/TargetSelect', () => ({ diff --git a/src/test/Settings/DeletionDialogControl.test.tsx b/src/test/Settings/DeletionDialogControl.test.tsx index 7403222c0..fa2b0815d 100644 --- a/src/test/Settings/DeletionDialogControl.test.tsx +++ b/src/test/Settings/DeletionDialogControl.test.tsx @@ -118,7 +118,7 @@ describe('', () => { await user.click(expandButton); - const activeRecordingSwitch = screen.getByLabelText('Delete Active recording'); + const activeRecordingSwitch = screen.getByLabelText('Delete Active Recording'); expect(activeRecordingSwitch).toBeInTheDocument(); expect(activeRecordingSwitch).toBeVisible(); expect(activeRecordingSwitch).toBeChecked(); diff --git a/src/test/Settings/Settings.test.tsx b/src/test/Settings/Settings.test.tsx index bd8edd127..ae808aebd 100644 --- a/src/test/Settings/Settings.test.tsx +++ b/src/test/Settings/Settings.test.tsx @@ -38,7 +38,7 @@ jest.mock('@app/Settings/Config/AutomatedAnalysis', () => ({ titleKey: 'SETTINGS.AUTOMATED_ANALYSIS_CONFIG.TITLE', descConstruct: 'SETTINGS.AUTOMATED_ANALYSIS_CONFIG.DESCRIPTION', category: 'SETTINGS.CATEGORIES.DASHBOARD', - content: () => Automated Analysis Config Component, + content: () => Automated analysis Config Component, authenticated: true, } as UserSetting, })); @@ -170,7 +170,7 @@ describe('', () => { expect(dashboardTab.getAttribute('aria-selected')).toBe('true'); - const dashboardSettings = screen.queryByText('Automated Analysis Config Component'); + const dashboardSettings = screen.queryByText('Automated analysis Config Component'); expect(dashboardSettings).not.toBeInTheDocument(); }); @@ -231,7 +231,7 @@ describe('', () => { expect(dashboardTab.getAttribute('aria-selected')).toBe('true'); - const dashboardSettings = screen.getByText('Automated Analysis Config Component'); + const dashboardSettings = screen.getByText('Automated analysis Config Component'); expect(dashboardSettings).toBeInTheDocument(); expect(dashboardSettings).toBeVisible(); }); diff --git a/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap b/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap index f81b10788..8629b4192 100644 --- a/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap +++ b/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` renders correctly 1`] = `"Automated Analysis Configuration Form"`; +exports[` renders correctly 1`] = `"Automated analysis Configuration Form"`; diff --git a/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap b/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap index 0efe1db0b..cc3dd71b7 100644 --- a/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap +++ b/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap @@ -138,14 +138,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteActiveRecordings-on" > - Delete Active recording + Delete Active Recording @@ -177,14 +177,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteArchivedRecordings-on" > - Delete Archived recording + Delete Archived Recording @@ -216,14 +216,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteAutomatedRules-on" > - Delete Automated rule + Delete Automated Rule @@ -255,14 +255,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DisableAutomatedRules-on" > - Disable Automated rule + Disable Automated Rule @@ -294,14 +294,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteEventTemplates-on" > - Delete Event template + Delete Event Template @@ -333,14 +333,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteProbeTemplates-on" > - Delete Probe template + Delete Probe Template @@ -372,14 +372,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteActiveProbes-on" > - Remove active Probes + Remove Active Probes @@ -528,14 +528,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteLayoutTemplate-on" > - Delete Layout template + Delete Layout Template @@ -567,14 +567,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ClearDashboardLayout-on" > - Clear Dashboard layout + Clear Dashboard Layout diff --git a/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap b/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap index e822e8377..ef0599300 100644 --- a/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap +++ b/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap @@ -571,14 +571,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ArchivedRecordingCreated-on" > - Archived recording uploaded + Archived Recording uploaded @@ -610,14 +610,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ArchivedRecordingDeleted-on" > - Archived recording deleted + Archived Recording deleted @@ -727,14 +727,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbeTemplateUploaded-on" > - Probe template created + Probe Template created @@ -766,14 +766,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbeTemplateDeleted-on" > - Probe template deleted + Probe Template deleted @@ -805,14 +805,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbeTemplateApplied-on" > - Probe template applied + Probe Template applied @@ -844,14 +844,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbesRemoved-on" > - Probes removed from target + Probes removed from Target @@ -883,14 +883,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="RuleCreated-on" > - Automated rule created + Automated Rule created @@ -922,14 +922,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="RuleUpdated-on" > - Automated rule updated + Automated Rule updated @@ -961,14 +961,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="RuleDeleted-on" > - Automated rule deleted + Automated Rule deleted @@ -1078,14 +1078,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="LayoutTemplateCreated-on" > - Layout template created + Layout Template created @@ -1117,14 +1117,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="TargetCredentialsStored-on" > - Target credentials stored + Target Credentials stored @@ -1156,14 +1156,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="TargetCredentialsDeleted-on" > - Target credentials deleted + Target Credentials deleted From 4949318d474c43c5aa06241a996c9d2947f8e0d4 Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 29 May 2024 21:26:32 -0400 Subject: [PATCH 07/13] more formatting && resolve issues --- locales/en/common.json | 4 +- locales/en/public.json | 62 +++++++------- src/app/Agent/AboutAgentCard.tsx | 4 +- src/app/Agent/AgentLiveProbes.tsx | 6 +- src/app/Agent/AgentProbeTemplates.tsx | 8 +- src/app/AppLayout/AppLayout.tsx | 2 +- src/app/AppLayout/SslErrorModal.tsx | 2 +- .../Archives/AllArchivedRecordingsTable.tsx | 2 +- .../AllTargetsArchivedRecordingsTable.tsx | 4 +- src/app/Archives/ArchiveUploadModal.tsx | 2 +- .../CreateRecording/CustomRecordingForm.tsx | 28 +++---- .../CreateRecording/SnapshotRecordingForm.tsx | 4 +- src/app/Dashboard/AddCard.tsx | 4 +- .../AutomatedAnalysisCardList.tsx | 2 +- src/app/Dashboard/ErrorCard.tsx | 2 +- src/app/Dashboard/LayoutTemplatePicker.tsx | 6 +- .../cryostat-dashboard-templates.tsx | 2 +- src/app/Events/EventTemplates.tsx | 6 +- src/app/Events/EventTypes.tsx | 4 +- src/app/Events/Events.tsx | 2 +- src/app/Joyride/CryostatJoyride.tsx | 14 ++-- src/app/Modal/types.ts | 18 ++-- .../automated-rules-quickstart.tsx | 18 ++-- .../quickstarts/settings-quickstart.tsx | 4 +- .../quickstarts/start-a-recording.tsx | 84 +++++++++---------- .../topology/group-start-recordings.tsx | 24 +++--- src/app/RecordingMetadata/BulkEditLabels.tsx | 4 +- src/app/RecordingMetadata/utils.ts | 2 +- src/app/Recordings/RecordingsTable.tsx | 2 +- src/app/Rules/CreateRule.tsx | 12 +-- src/app/Rules/Rules.tsx | 14 ++-- src/app/Rules/RulesUploadModal.tsx | 4 +- .../Shared/Components/JmxAuthDescription.tsx | 2 +- .../Components/SelectTemplateSelectorForm.tsx | 2 +- src/app/Shared/Services/Api.service.tsx | 4 +- src/app/Shared/Services/Report.service.tsx | 2 +- src/app/Shared/Services/api.types.ts | 8 +- src/app/Shared/Services/api.utils.ts | 2 +- src/app/TargetView/TargetContextSelector.tsx | 4 +- src/app/TargetView/TargetSelect.tsx | 2 +- src/app/Topology/Actions/utils.tsx | 8 +- src/app/Topology/GraphView/NodeDecorator.tsx | 2 +- src/app/routes.tsx | 6 +- src/itest/RecordingWorkflow.test.ts | 8 +- src/mirage/index.ts | 12 +-- src/test/Agent/AgentLiveProbes.test.tsx | 10 +-- src/test/Agent/AgentProbeTemplates.test.tsx | 18 ++-- .../AgentLiveProbes.test.tsx.snap | 6 +- .../AllArchivedRecordingsTable.test.tsx | 8 +- ...AllTargetsArchivedRecordingsTable.test.tsx | 6 +- ...rgetsArchivedRecordingsTable.test.tsx.snap | 2 +- .../CustomRecordingForm.test.tsx | 6 +- .../SnapshotRecordingForm.test.tsx | 6 +- .../CustomRecordingForm.test.tsx.snap | 18 ++-- .../SnapshotRecordingForm.test.tsx.snap | 2 +- .../AutomatedAnalysisCard.test.tsx | 8 +- .../AutomatedAnalysisConfigDrawer.test.tsx | 6 +- .../AutomatedAnalysisConfigForm.test.tsx | 16 ++-- .../AutomatedAnalysisCardList.test.tsx.snap | 2 +- .../Charts/jfr/JFRMetricsChartCard.test.tsx | 6 +- .../JFRMetricsChartCard.test.tsx.snap | 6 +- src/test/Events/EventTemplates.test.tsx | 18 ++-- src/test/Events/EventTypes.test.tsx | 4 +- .../__snapshots__/EventTypes.test.tsx.snap | 2 +- .../RecordingMetadata/BulkEditLabels.test.tsx | 16 ++-- src/test/RecordingMetadata/LabelCell.test.tsx | 4 +- .../RecordingLabelFields.test.tsx | 4 +- .../Recordings/ActiveRecordingsTable.test.tsx | 26 +++--- .../ArchivedRecordingsTable.test.tsx | 26 +++--- .../Recordings/Filters/LabelFilter.test.tsx | 2 +- src/test/Recordings/RecordingFilters.test.tsx | 8 +- .../Recordings/RecordingLabelsPanel.test.tsx | 2 +- .../Rules/__snapshots__/Rules.test.tsx.snap | 4 +- .../Settings/AutomatedAnalysisConfig.test.tsx | 2 +- src/test/Settings/Settings.test.tsx | 6 +- .../AutomatedAnalysisConfig.test.tsx.snap | 2 +- .../DeletionDialogControl.test.tsx.snap | 4 +- .../NotificationControl.test.tsx.snap | 4 +- 78 files changed, 339 insertions(+), 339 deletions(-) diff --git a/locales/en/common.json b/locales/en/common.json index 3d425e2d1..3379ebef0 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -29,9 +29,9 @@ "HOUR_one": "Hour", "HOUR_other": "Hours", "MAXIMUM_AGE": "Maximum age", - "MAXIMUM_AGE_HELPER_TEXT": "The maximum age of recording data stored to disk.", + "MAXIMUM_AGE_HELPER_TEXT": "The maximum age of Recording data stored to disk.", "MAXIMUM_SIZE": "Maximum size", - "MAXIMUM_SIZE_HELPER_TEXT": "The maximum size of recording data saved to disk.", + "MAXIMUM_SIZE_HELPER_TEXT": "The maximum size of Recording data saved to disk.", "MERIDIEM_AM": "AM", "MERIDIEM_PM": "PM", "MINUTE": "Minute", diff --git a/locales/en/public.json b/locales/en/public.json index f02091745..fe20ce071 100644 --- a/locales/en/public.json +++ b/locales/en/public.json @@ -23,21 +23,21 @@ }, "AutomatedAnalysisCard": { "CARD_DESCRIPTION": "Assess common application performance and configuration issues.", - "CARD_DESCRIPTION_FULL": "Creates a recording and periodically evaluates various common problems in application configuration and performance. Results are displayed with scores from 0-100 with colour coding and in groups. This card should be unique on a dashboard.", + "CARD_DESCRIPTION_FULL": "Creates a Recording and periodically evaluates various common problems in application configuration and performance. Results are displayed with scores from 0-100 with colour coding and in groups. This card should be unique on a dashboard.", "CARD_TITLE": "Automated analysis", - "CRITICAL_RESULTS_one": "{{count}} Critical Result", - "CRITICAL_RESULTS_other": "{{count}} Critical Results", + "CRITICAL_RESULTS_one": "{{count}} critical result", + "CRITICAL_RESULTS_other": "{{count}} critical results", "ERROR_TEXT": "Cryostat was unable to generate an automated analysis report.", - "ERROR_TITLE": "Automated analysis Error", + "ERROR_TITLE": "Automated analysis error", "GOOD_RESULTS": "No problems", - "NO_RESULTS": "No Results Found", + "NO_RESULTS": "No results found", "NO_RESULTS_BODY": "No results match this filter criteria. Try removing filters, showing unavailable scores, or resetting the severity score filter to 0.", "RETRY_LOADING": "Retry loading report", - "RETRY_STARTING": "Retry starting recording", + "RETRY_STARTING": "Retry starting Recording", "STALE_REPORT": { "TEXT_one": "Most recent data from {{ count }} {{ units }} ago.", "TEXT_other": "Most recent data from {{ count }} {{ units }}s ago.", - "TOOLTIP": "Report data is stale. Click the Create Recording button and choose an option to start an active recording to source automated reports from." + "TOOLTIP": "Report data is stale. Click the Create Recording button and choose an option to start an active Recording to source automated reports from." }, "TOOLBAR": { "CHECKBOX": { @@ -48,7 +48,7 @@ "DELETE": { "LABEL": "Delete automated analysis" }, - "LABEL": "Automated analysis Toolbar", + "LABEL": "Automated analysis toolbar", "REFRESH": { "LABEL": "Refresh automated analysis" }, @@ -67,19 +67,19 @@ "LABEL": "Create Recording" }, "OPEN_SETTINGS": { - "LABEL": "Open Settings" + "LABEL": "Open settings" } } }, "AutomatedAnalysisConfigForm": { "CURRENT_CONFIG": "Current configuration", - "FORM_TITLE": "Profiling recording Configuration", + "FORM_TITLE": "Profiling Recording configuration", "FORMATTED_TEMPLATE": "Name: {{template.name}}, Type: {{template.type}}", "MAXIMUM_AGE": "Maximum age ({{unit}})", "MAXIMUM_SIZE": "Maximum size ({{unit}})", "SAVE_CHANGES": "Save changes", - "TEMPLATE_HELPER_TEXT": "The Event Template to be applied to automated analysis recordings.", - "TEMPLATE_INVALID_WARNING": "WARNING: Setting a Target Template as a default template type configuration may not apply to all Target JVMs if the JVMs do not support them." + "TEMPLATE_HELPER_TEXT": "The Event Template to be applied to automated analysis Recordings.", + "TEMPLATE_INVALID_WARNING": "WARNING: Setting a target template as a default template type configuration may not apply to all target JVMs if the JVMs do not support them." }, "AutomatedAnalysisScoreFilter": { "CURRENT_SCORE_TEXT": "Only showing analysis results with severity scores ≥ {{ val }}:", @@ -108,31 +108,31 @@ } }, "JFR_METRICS_CARD_DESCRIPTION": "Display common performance metrics from recent JFR data.", - "JFR_METRICS_CARD_DESCRIPTION_FULL": "Display a single performance metric from a list of supported JFR event types. Data is displayed from the present moment back to a specified duration. Note: these metrics are only available for a single target at a time. Second Cryostat-Web instances, for the same user or others, will not behave as expected when using this card type.", + "JFR_METRICS_CARD_DESCRIPTION_FULL": "Display a single performance metric from a list of supported JFR Event Types. Data is displayed from the present moment back to a specified duration. Note: these metrics are only available for a single target at a time. Second Cryostat-Web instances, for the same user or others, will not behave as expected when using this card type.", "JFR_METRICS_CARD_TITLE": "JFR Metrics Chart", "MBEAN_METRICS_CARD_DESCRIPTION": "Display common performance metrics from current MBean data.", "MBEAN_METRICS_CARD_DESCRIPTION_FULL": "Display a single performance metric from a list of supported MBeans.", "MBEAN_METRICS_CARD_TITLE": "MBean Metrics Chart", "NO_RECORDING": { - "DESCRIPTION": "Metrics cards display data taken from running flight recordings with the label . No such recordings are currently available.", - "TITLE": "No source recording" + "DESCRIPTION": "Metrics cards display data taken from running flight Recordings with the label . No such Recordings are currently available.", + "TITLE": "No source Recording" }, "PROP_CONTROLS": { "DATA_WINDOW": { "DESCRIPTION": "The data window width in seconds.", - "NAME": "Data Window" + "NAME": "Data window" }, "PERFORMANCE_METRIC": { "DESCRIPTION": "Select the metric to display in this card.", - "NAME": "Performance Metric" + "NAME": "Performance metric" }, "REFRESH_PERIOD": { "DESCRIPTION": "The chart refresh period in seconds.", - "NAME": "Refresh Period" + "NAME": "Refresh period" }, "THEME": { "DESCRIPTION": "Select a color theme.", - "NAME": "Color Theme" + "NAME": "Color theme" }, "THEME_COLOR": { "DESCRIPTION": "The color theme to apply to this chart.", @@ -147,10 +147,10 @@ } }, "Dashboard": { - "ADD_CARD_HELPER_TEXT": "Choose a card type to add to your dashboard. Some cards require additional configuration.", + "ADD_CARD_HELPER_TEXT": "Choose a card type to add to your Dashboard. Some cards require additional configuration.", "CARD_CATALOG_DESCRIPTION": "Cards added to this Dashboard Layout present information at a glance about the selected target. The layout is preserved for all targets viewed on this client.", "CARD_CATALOG_TITLE": "Dashboard Card catalog", - "INVALID_CARD_CONFIGURATIONS": "Invalid Card configurations", + "INVALID_CARD_CONFIGURATIONS": "Invalid card configurations", "PAGE_TITLE": "Dashboard" }, "DashboardCardActionMenu": { @@ -193,7 +193,7 @@ }, "SET_TEMPLATE": { "DESCRIPTION": "Set the current Dashboard Layout as a template.", - "TITLE": "Set Custom Layout Template" + "TITLE": "Set custom Layout Template" } }, "DashboardLayoutToolbar": { @@ -219,7 +219,7 @@ "DatetimeFilter": { "ARIA_LABELS": { "DATETIME_INPUT": "Input a datetime", - "SEARCH_BUTTON": "Search For Date", + "SEARCH_BUTTON": "Search for date", "TOGGLE_CALENDAR": "Toggle the calendar" }, "INVALID_DATE_TEXT": "Invalid date time" @@ -236,12 +236,12 @@ "RESOLVE_MESSAGE": "Reload the page and try again. If the error still persists, see the list of {{knownIssue}} or {{fileReport}}." }, "ErrorView": { - "EVENT_TEMPLATES": "Error retrieving event templates" + "EVENT_TEMPLATES": "Error retrieving Event Templates" }, "JvmDetailsCard": { "CARD_DESCRIPTION": "Display details about the selected target JVM.", - "CARD_DESCRIPTION_FULL": "View information such as the connection URL, labels, and annotations belonging to the selected target JVM.", - "CARD_TITLE": "Target JVM Details" + "CARD_DESCRIPTION_FULL": "View information such as the connection URL, Labels, and annotations belonging to the selected target JVM.", + "CARD_TITLE": "Target JVM details" }, "LayoutTemplateGroup": { "ITEMS_one": "{{count}} item", @@ -249,7 +249,7 @@ }, "LayoutTemplatePicker": { "SORT_BY": { - "CARD_COUNT": "Sort by: Card Count", + "CARD_COUNT": "Sort by: Card count", "NAME": "Sort by: Name", "PLACEHOLDER": "Sort by..." } @@ -283,8 +283,8 @@ } }, "RecordingLabelFields": { - "INVALID_UPLOADS_one": "The file does not contain valid recording metadata:", - "INVALID_UPLOADS_other": "These files do not contain valid recording metadata:" + "INVALID_UPLOADS_one": "The file does not contain valid Recording metadata:", + "INVALID_UPLOADS_other": "These files do not contain valid Recording metadata:" }, "SETTINGS": { "AUTO_REFRESH": { @@ -293,8 +293,8 @@ "TITLE": "Auto-refresh" }, "AUTOMATED_ANALYSIS_CONFIG": { - "DESCRIPTION": "Set the recording configuration for automated analysis recordings. You may want smaller or larger values for max-age and max-size depending on how recent you want events to be recorded from the analysis.", - "TITLE": "Automated analysis recording configuration" + "DESCRIPTION": "Set the Recording configuration for automated analysis Recordings. You may want smaller or larger values for max-age and max-size depending on how recent you want events to be recorded from the analysis.", + "TITLE": "Automated analysis Recording configuration" }, "CATEGORIES": { "ADVANCED": "Advanced", diff --git a/src/app/Agent/AboutAgentCard.tsx b/src/app/Agent/AboutAgentCard.tsx index d0d568764..afa67237a 100644 --- a/src/app/Agent/AboutAgentCard.tsx +++ b/src/app/Agent/AboutAgentCard.tsx @@ -25,8 +25,8 @@ export const AboutAgentCard: React.FC = (_) => { The JMC Agent allows users to dynamically inject custom JFR events into running JVMs. In order to make use of the JMC Agent, the agent jar must be present in the same container as the target, and the target must be started - with the agent (-javaagent:/path/to/agent.jar). Once these pre-requisites are met, the user can upload probe - templates to Cryostat and insert them to the target, as well as view or remove currently active probes. + with the agent (-javaagent:/path/to/agent.jar). Once these pre-requisites are met, the user can upload Probe + Templates to Cryostat and insert them to the target, as well as view or remove currently active probes. ); diff --git a/src/app/Agent/AgentLiveProbes.tsx b/src/app/Agent/AgentLiveProbes.tsx index 92b3214e2..f74c6d63c 100644 --- a/src/app/Agent/AgentLiveProbes.tsx +++ b/src/app/Agent/AgentLiveProbes.tsx @@ -342,7 +342,7 @@ export const AgentLiveProbes: React.FC = (_) => { isDisabled={!filteredProbes.length || actionLoadings['REMOVE']} {...actionLoadingProps['REMOVE']} > - {actionLoadings['REMOVE'] ? 'Removing' : 'Remove'} All Probes + {actionLoadings['REMOVE'] ? 'Removing' : 'Remove'} all probes @@ -355,7 +355,7 @@ export const AgentLiveProbes: React.FC = (_) => { /> {probeRows.length ? ( - +
{tableColumns.map(({ title, sortable }, index) => ( @@ -371,7 +371,7 @@ export const AgentLiveProbes: React.FC = (_) => { - No Active Probes + No active probes )} diff --git a/src/app/Agent/AgentProbeTemplates.tsx b/src/app/Agent/AgentProbeTemplates.tsx index 9f23d4179..d09b4eb18 100644 --- a/src/app/Agent/AgentProbeTemplates.tsx +++ b/src/app/Agent/AgentProbeTemplates.tsx @@ -323,7 +323,7 @@ export const AgentProbeTemplates: React.FC = ({ agentD {templateRows.length ? ( - + {tableColumns.map(({ title, sortable }, index) => ( @@ -449,8 +449,8 @@ export const AgentProbeTemplateUploadModal: React.FC @@ -502,7 +502,7 @@ export const AgentTemplateAction: React.FC = ({ onInse return [ { key: 'insert-template', - title: 'Insert Probes...', + title: 'Insert probes...', onClick: () => onInsert && onInsert(template), isDisabled: !onInsert, }, diff --git a/src/app/AppLayout/AppLayout.tsx b/src/app/AppLayout/AppLayout.tsx index cfebdef47..cf7d5bbe3 100644 --- a/src/app/AppLayout/AppLayout.tsx +++ b/src/app/AppLayout/AppLayout.tsx @@ -336,7 +336,7 @@ export const AppLayout: React.FC = ({ children }) => { , - + {t('AppLayout.APP_LAUNCHER.GUIDED_TOUR')} , diff --git a/src/app/AppLayout/SslErrorModal.tsx b/src/app/AppLayout/SslErrorModal.tsx index d17ae9d8b..747515ad7 100644 --- a/src/app/AppLayout/SslErrorModal.tsx +++ b/src/app/AppLayout/SslErrorModal.tsx @@ -38,7 +38,7 @@ export const SslErrorModal: React.FC = ({ visible, onDismiss variant={ModalVariant.medium} showClose={true} onClose={onDismiss} - title="SSL Error" + title="SSL error" description="The connection failed because the SSL Certificate for the target is not trusted." > diff --git a/src/app/Archives/AllArchivedRecordingsTable.tsx b/src/app/Archives/AllArchivedRecordingsTable.tsx index 1c1d4867c..d07ed738a 100644 --- a/src/app/Archives/AllArchivedRecordingsTable.tsx +++ b/src/app/Archives/AllArchivedRecordingsTable.tsx @@ -304,7 +304,7 @@ export const AllArchivedRecordingsTable: React.FC diff --git a/src/app/Archives/AllTargetsArchivedRecordingsTable.tsx b/src/app/Archives/AllTargetsArchivedRecordingsTable.tsx index 69464a564..1eb9d579f 100644 --- a/src/app/Archives/AllTargetsArchivedRecordingsTable.tsx +++ b/src/app/Archives/AllTargetsArchivedRecordingsTable.tsx @@ -470,7 +470,7 @@ export const AllTargetsArchivedRecordingsTable: React.FC @@ -531,7 +531,7 @@ export const AllTargetsArchivedRecordingsTable: React.FC = ({ onClose, Select a JDK Flight Recorder file to re-upload. Files must be .jfr binary format and follow the naming - convention used by Cryostat when archiving recordings + convention used by Cryostat when archiving Recordings {' '} { if (errorMessage != '') { return ( @@ -402,7 +402,7 @@ export const CustomRecordingForm: React.FC = () => { return ( <> - JDK Flight Recordings are compact records of events which have occurred within the target JVM. Many event types + JDK Flight Recordings are compact records of events which have occurred within the target JVM. Many Event Types are built in to the JVM itself, while others are user defined. @@ -410,8 +410,8 @@ export const CustomRecordingForm: React.FC = () => { label="Name" isRequired fieldId="recording-name" - helperText="Enter a recording name. This will be unique within the target JVM." - helperTextInvalid="A recording name can contain only letters, numbers, and underscores." + helperText="Enter a Recording name. This will be unique within the target JVM." + helperTextInvalid="A Recording name can contain only letters, numbers, and underscores." validated={formData.nameValid} > { data-quickstart-id="crf-name" /> { validated={formData.durationValid} helperText={ formData.continuous - ? 'A continuous recording will never be automatically stopped.' + ? 'A continuous Recording will never be automatically stopped.' : formData.archiveOnStop - ? 'Time before the recording is automatically stopped and copied to archive.' - : 'Time before the recording is automatically stopped.' + ? 'Time before the Recording is automatically stopped and copied to archive.' + : 'Time before the Recording is automatically stopped.' } - helperTextInvalid="The recording duration must be a positive integer." + helperTextInvalid="The Recording duration must be a positive integer." data-quickstart-id="crf-duration" > @@ -487,7 +487,7 @@ export const CustomRecordingForm: React.FC = () => { isRequired fieldId="recording-template" validated={!formData.template?.name ? ValidatedOptions.default : ValidatedOptions.success} - helperText={'The Event Template to be applied in this recording'} + helperText={'The Event Template to be applied in this Recording'} helperTextInvalid="A Template must be selected" > { fieldId="labels" labelIcon={ Unique key-value pairs containing information about the recording.} + content={Unique key-value pairs containing information about the Recording.} appendTo={portalRoot} > @@ -544,7 +544,7 @@ export const CustomRecordingForm: React.FC = () => { A value of 0 for maximum size or age means unbounded. { @@ -586,7 +586,7 @@ export const CustomRecordingForm: React.FC = () => { - + = (_) = if (errorMessage != '') { return ( @@ -111,7 +111,7 @@ export const SnapshotRecordingForm: React.FC = (_) = A Snapshot Recording is one which contains all information about all events that have been captured in the - current session by other,  non-Snapshot recordings. Snapshots do not themselves define which + current session by other,  non-Snapshot Recordings. Snapshots do not themselves define which events are enabled, their thresholds, or any other options. A Snapshot is only ever in the STOPPED state from the moment it is created. diff --git a/src/app/Dashboard/AddCard.tsx b/src/app/Dashboard/AddCard.tsx index 99f53b1b9..cf073eba1 100644 --- a/src/app/Dashboard/AddCard.tsx +++ b/src/app/Dashboard/AddCard.tsx @@ -210,7 +210,7 @@ export const AddCard: React.FC = ({ variant }) => { <>
{content}
= ({ handleChange, control, se maxHeight={'16em'} > {errored - ? [] + ? [] : options.map((choice, idx) => { const display = control.extras && control.extras.displayMapper ? control.extras.displayMapper(choice) : choice; diff --git a/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx b/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx index e5b6999bc..fd715247a 100644 --- a/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx +++ b/src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx @@ -113,7 +113,7 @@ export const AutomatedAnalysisCardList: React.FC return ( - +
diff --git a/src/app/Dashboard/ErrorCard.tsx b/src/app/Dashboard/ErrorCard.tsx index e2b3a4799..0890b70ef 100644 --- a/src/app/Dashboard/ErrorCard.tsx +++ b/src/app/Dashboard/ErrorCard.tsx @@ -52,7 +52,7 @@ export const ErrorCard: DashboardCardFC = ({ const errorDescription = React.useMemo(() => { return ( - + {errors.map((err, idx) => { return ( diff --git a/src/app/Dashboard/LayoutTemplatePicker.tsx b/src/app/Dashboard/LayoutTemplatePicker.tsx index 0523480f4..88423c1cd 100644 --- a/src/app/Dashboard/LayoutTemplatePicker.tsx +++ b/src/app/Dashboard/LayoutTemplatePicker.tsx @@ -84,12 +84,12 @@ import { getCardDescriptorByName, hasCardDescriptorByName, LayoutTemplateContext, - recordToLayoutTemplate, + recordToLayoutTemplate,S } from './utils'; export enum LayoutTemplateSort { NAME = 'Name', - CARD_COUNT = 'Card Count', + CARD_COUNT = 'Card count', // TODO: add 'Version' after more version are released } @@ -461,7 +461,7 @@ export const LayoutTemplatePicker: React.FC = ({ onTe // return a.version.localeCompare(b.version); // } // return b.version.localeCompare(a.version); - case 'Card Count': + case 'Card count': if (sortDirection === 'asc') { return a.cards.length - b.cards.length; } diff --git a/src/app/Dashboard/cryostat-dashboard-templates.tsx b/src/app/Dashboard/cryostat-dashboard-templates.tsx index 2047ac9c5..fae26af9c 100644 --- a/src/app/Dashboard/cryostat-dashboard-templates.tsx +++ b/src/app/Dashboard/cryostat-dashboard-templates.tsx @@ -401,7 +401,7 @@ const JFRMonitoringLayout: LayoutTemplate = { span: 3, props: { theme: 'light', - chartKind: 'Recording Start time', + chartKind: 'Recording start time', duration: 120, period: 10, }, diff --git a/src/app/Events/EventTemplates.tsx b/src/app/Events/EventTemplates.tsx index b0909a6b6..272633eb1 100644 --- a/src/app/Events/EventTemplates.tsx +++ b/src/app/Events/EventTemplates.tsx @@ -337,7 +337,7 @@ export const EventTemplates: React.FC = (_) => { if (errorMessage != '') { return ( @@ -509,8 +509,8 @@ export const EventTemplatesUploadModal: React.FC variant={ModalVariant.large} showClose={true} onClose={handleClose} - title="Create Custom Event Template" - description="Create a customized event template. This is a specialized XML file with the extension .jfc, typically created using JDK Mission Control, which defines a set of events and their options to configure. Not all customized templates are applicable to all targets -- a template may specify a custom application event type, which is only available in targets running the associated application." + title="Create custom Event Template" + description="Create a customized Event Template. This is a specialized XML file with the extension .jfc, typically created using JDK Mission Control, which defines a set of events and their options to configure. Not all customized templates are applicable to all targets -- a template may specify a custom application event type, which is only available in targets running the associated application." > diff --git a/src/app/Events/EventTypes.tsx b/src/app/Events/EventTypes.tsx index dfee86849..ef68db7b6 100644 --- a/src/app/Events/EventTypes.tsx +++ b/src/app/Events/EventTypes.tsx @@ -255,7 +255,7 @@ export const EventTypes: React.FC = (_) => { if (errorMessage != '') { return ( @@ -292,7 +292,7 @@ export const EventTypes: React.FC = (_) => { {typeRowPairs.length ? ( // TODO replace table with data list so collapsed event options can be custom formatted - +
{t('NAME', { ns: 'common' })}
diff --git a/src/app/Events/Events.tsx b/src/app/Events/Events.tsx index 167a02a62..59869e85e 100644 --- a/src/app/Events/Events.tsx +++ b/src/app/Events/Events.tsx @@ -129,7 +129,7 @@ export const AgentTabs: React.FC = () => { isAriaDisabled={!agentDetected} tooltip={ agentDetected ? undefined : ( - + ) } > diff --git a/src/app/Joyride/CryostatJoyride.tsx b/src/app/Joyride/CryostatJoyride.tsx index d36ef651d..471b9f905 100644 --- a/src/app/Joyride/CryostatJoyride.tsx +++ b/src/app/Joyride/CryostatJoyride.tsx @@ -43,13 +43,13 @@ const CryostatJoyride: React.FC = ({ children }) => { content: (

- Cryostat is a cloud-based profiling application for managing JFR recordings in + Cryostat is a cloud-based profiling application for managing JFR Recordings in containerized Java environments.


There are many other features that Cryostat provides, such as the ability to download - recordings, generate reports, and more. + Recordings, generate reports, and more.

), @@ -100,7 +100,7 @@ const CryostatJoyride: React.FC = ({ children }) => {

The Topology view provides a visual representation of Cryostat and the deployment - model. Start, stop, and delete recordings on multiple targets at a time from this view. + model. Start, stop, and delete Recordings on multiple targets at a time from this view.

), @@ -112,7 +112,7 @@ const CryostatJoyride: React.FC = ({ children }) => { content: (

Create, delete, enable, and view Cryostat Automated Rules in this view. Automated Rules - allow you start recordings on target JVMs based on a set of conditions. + allow you start Recordings on target JVMs based on a set of conditions.

), target: '*[data-tour-id="automatedrules"]', @@ -122,8 +122,8 @@ const CryostatJoyride: React.FC = ({ children }) => { title: 'JFR Recordings', content: (

- The Recordings view provides a list of all active recordings that are currently being - recorded on the target JVM. Start, stop, download, delete recordings from this view. + The Recordings view provides a list of all active Recordings that are currently being + recorded on the target JVM. Start, stop, download, delete Recordings from this view.

), target: '*[data-tour-id="recordings"]', @@ -133,7 +133,7 @@ const CryostatJoyride: React.FC = ({ children }) => { title: 'Archives View', content: (

- The Archives view provides a list of all saved recordings that have been saved to + The Archives view provides a list of all saved Recordings that have been saved to Cryostat. Download, delete, and generate reports from this view.

), diff --git a/src/app/Modal/types.ts b/src/app/Modal/types.ts index 2572a8bd1..534b38468 100644 --- a/src/app/Modal/types.ts +++ b/src/app/Modal/types.ts @@ -38,17 +38,17 @@ export interface DeleteOrDisableWarning { export const DeleteActiveRecordings: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteActiveRecordings, - title: 'Permanently delete your JFR recording?', + title: 'Permanently delete your JFR Recording?', label: 'Delete Active Recording', - description: `If you click Delete, recording and report data will be lost.`, + description: `If you click Delete, Recording and report data will be lost.`, ariaLabel: 'Recording delete warning', }; export const DeleteArchivedRecordings: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteArchivedRecordings, - title: 'Permanently delete your Archived JFR recording?', + title: 'Permanently delete your Archived JFR Recording?', label: 'Delete Archived Recording', - description: `If you click Delete, recording and report data will be lost.`, + description: `If you click Delete, Recording and report data will be lost.`, ariaLabel: 'Recording delete warning', }; @@ -72,7 +72,7 @@ export const DeleteEventTemplates: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteEventTemplates, title: 'Permanently delete your Event Template?', label: 'Delete Event Template', - description: `If you click Delete, custom event template data will be lost.`, + description: `If you click Delete, custom Event Template data will be lost.`, ariaLabel: 'Event Template delete warning', }; @@ -86,10 +86,10 @@ export const DeleteProbeTemplates: DeleteOrDisableWarning = { export const DeleteActiveProbes: DeleteOrDisableWarning = { id: DeleteOrDisableWarningType.DeleteActiveProbes, - title: 'Permanently remove your active Probes from the target?', - label: 'Remove Active Probes', - description: `If you click Delete, active Probes will be removed from the target.`, - ariaLabel: 'Active Probes remove warning', + title: 'Permanently remove your active probes from the target?', + label: 'Remove active probes', + description: `If you click Delete, active probes will be removed from the target.`, + ariaLabel: 'Active probes remove warning', }; export const DeleteCredentials: DeleteOrDisableWarning = { diff --git a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx index 7e4976000..9cb14b4b9 100644 --- a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx @@ -31,10 +31,10 @@ const AutomatedRulesQuickStart: QuickStart = { durationMinutes: 5, icon: , description: `Learn about automated rules in **[APP]** and how to create one.`, - prerequisites: ['Start a recording'], + prerequisites: ['Start a Recording'], introduction: ` ## Automated Rules -Automated Rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently [APP] should copy the application recording buffer into [APP]'s own archived storage. +Automated Rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application Recording buffer, and how frequently [APP] should copy the application Recording buffer into [APP]'s own archived storage. ### What you'll learn @@ -87,23 +87,23 @@ To create a new rule, you must fill out the following required fields: }, }, { - title: 'View the generated recording', + title: 'View the generated Recording', description: ` -The rule that was created will have started a new recording on any matched target JVMs. +The rule that was created will have started a new Recording on any matched target JVMs. 1. In the [APP] console navigation bar, click [Recordings]{{highlight nav-recordings-tab}}. 2. Click the [Target Selector]{{highlight target-select}} dropdown menu and select a target JVM that was matched from the created automated rule, if not already selected. -There should now be a new recording in the list of active recordings on the selected target JVM. +There should now be a new Recording in the list of Active Recordings on the selected target JVM. -The recording should be named according to the rule-name format, such as \`auto_\`. +The Recording should be named according to the rule-name format, such as \`auto_\`. -[If you set any other attributes on the rule, you should see those attributes reflected in the recording.]{{admonition note}} +[If you set any other attributes on the rule, you should see those attributes reflected in the Recording.]{{admonition note}} `, review: { instructions: - '#### Verify that you see the new recording with the correct Automated Rule recording naming scheme in the list of recordings.', + '#### Verify that you see the new Recording with the correct Automated Rule Recording naming scheme in the list of Recordings.', failedTaskHelp: - 'If you do not see the new recording, go back to the Rule Creation form, and try verifying that your rule match expression correctly matches the intended target JVMs in this task.', + 'If you do not see the new Recording, go back to the Rule Creation form, and try verifying that your rule match expression correctly matches the intended target JVMs in this task.', }, }, ], diff --git a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx index 22199c639..8d328f9ee 100644 --- a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx @@ -85,10 +85,10 @@ The **Notifications & messages** tab allows you to configure the notifications a description: ` The **Dashboard** tab allows you to configure settings for the various Dashboard Cards that you can add to the Dashboard. -The **Automated analysis** Dashboard Card allows you to automatically start an analysis on the recording with a click of a button. You can configure the recording that is started by this card. +The **automated analysis** Dashboard Card allows you to automatically start an analysis on the Recording with a click of a button. You can configure the Recording that is started by this card. 1. From the list of settings tabs, click [Dashboard]{{highlight settings-dashboard-tab}}. -2. Configure the **Automated analysis recording configuration** settings. +2. Configure the **Automated analysis Recording configuration** settings. 3. Configure the **Dashboard metrics configuration** settings. [When using the **Automated analysis card**, make sure the **Event Template** is compatible with the target JVM.]{{admonition warning}} diff --git a/src/app/QuickStarts/quickstarts/start-a-recording.tsx b/src/app/QuickStarts/quickstarts/start-a-recording.tsx index 97d3e9040..0ad639475 100644 --- a/src/app/QuickStarts/quickstarts/start-a-recording.tsx +++ b/src/app/QuickStarts/quickstarts/start-a-recording.tsx @@ -18,7 +18,7 @@ import { FeatureLevel } from '@app/Shared/Services/service.types'; import { QuickStart } from '@patternfly/quickstarts'; import { CryostatIcon, conclusion } from '../quickstart-utils'; -const displayName = 'Start a recording'; +const displayName = 'Start a Recording'; const RecordingQuickStart: QuickStart = { metadata: { @@ -31,17 +31,17 @@ const RecordingQuickStart: QuickStart = { displayName: displayName, durationMinutes: 10, icon: , - description: `Learn how to start a recording with Java Flight Recorder (JFR) with **[APP]**.`, + description: `Learn how to start a Recording with Java Flight Recorder (JFR) with **[APP]**.`, prerequisites: [''], introduction: ` -## Start a recording -**Java Flight Recorder (JFR)** is a profiling tool that is built into the JVM. It allows you to record events that happen in the JVM and then analyze the recording to find performance issues. [APP] leverages JFR to provide a simple way to start, stop, and download recordings from a containerized target JVM. +## Start a Recording +**Java Flight Recorder (JFR)** is a profiling tool that is built into the JVM. It allows you to record events that happen in the JVM and then analyze the Recording to find performance issues. [APP] leverages JFR to provide a simple way to start, stop, and download Recordings from a containerized target JVM. ### What you'll learn -- How to start/stop a JFR recording on a target JVM -- How to download a recording from [APP] to your local machine -- How to view an automated analysis report of a recording with [APP]'s capabilities +- How to start/stop a JFR Recording on a target JVM +- How to download a Recording from [APP] to your local machine +- How to view an automated analysis report of a Recording with [APP]'s capabilities ### What you'll need @@ -75,89 +75,89 @@ Select a target JVM from the list of available targets that [APP] has discovered }, }, { - title: 'Start a recording', + title: 'Start a Recording', description: ` There are two tabs within the Recordings page: [Active Recordings]{{highlight active-recordings-tab}} and [Archived Recordings]{{highlight archived-recordings-tab}}. -**Active Recordings** are recordings that only exist only within the target JVM. **Archived recordings** are recordings that have been saved from the target JVM and copied to [APP]'s storage volume. +**Active Recordings** are Recordings that only exist only within the target JVM. **Archived Recordings** are Recordings that have been saved from the target JVM and copied to [APP]'s storage volume. -To start an active recording: +To start an active Recording: 1. Click [Create]{{highlight recordings-create-btn}} to open the **Custom Flight Recording Form**. [If you have a smaller viewport, the \`Create\` button may not be immediately visible. In this case, you can click on the kebab button (three vertical dots) to reveal additional options, including \`Create\`."]{{admonition note}} -2. Enter a name for the recording in the [Name]{{highlight crf-name}} field. -3. Select the [Duration]{{highlight crf-duration}} for the recording. You can select \`CONTINUOUS\` to record until the recording is stopped. -4. Select an [Event Template]{{highlight template-selector}} to use for the recording. +2. Enter a name for the Recording in the [Name]{{highlight crf-name}} field. +3. Select the [Duration]{{highlight crf-duration}} for the Recording. You can select \`CONTINUOUS\` to record until the Recording is stopped. +4. Select an [Event Template]{{highlight template-selector}} to use for the Recording. 5. Click [Create]{{highlight crf-create-btn}}. -After the creation of a recording, the recording will be displayed in the **Active Recordings** tab. You should be able to see the recording's name, start time, duration, state, and any attached labels. +After the creation of a Recording, the Recording will be displayed in the **Active Recordings** tab. You should be able to see the Recording's name, start time, duration, state, and any attached Labels. -[You may also attach metadata labels to the recordings under the [Metadata]{{highlight crf-metadata-opt}} options or configure your custom recording further under the [Advanced]{{highlight crf-advanced-opt}} options.]{{admonition tip}}`, +[You may also attach metadata Labels to the Recordings under the [Metadata]{{highlight crf-metadata-opt}} options or configure your custom Recording further under the [Advanced]{{highlight crf-advanced-opt}} options.]{{admonition tip}}`, review: { - instructions: '#### Verify that you see the recording within the table.', - failedTaskHelp: 'If you do not see the recording, try the above steps again.', + instructions: '#### Verify that you see the Recording within the table.', + failedTaskHelp: 'If you do not see the Recording, try the above steps again.', }, }, { - title: 'Stop a recording', + title: 'Stop a Recording', description: ` -Stopping a recording will cut off the recording at the time that the recording is stopped. +Stopping a Recording will cut off the Recording at the time that the Recording is stopped. -1. Select the [checkbox]{{highlight active-recordings-checkbox}} ☐ next to the recording. -2. Click [Stop]{{highlight recordings-stop-btn}} to stop the recording.`, +1. Select the [checkbox]{{highlight active-recordings-checkbox}} ☐ next to the Recording. +2. Click [Stop]{{highlight recordings-stop-btn}} to stop the Recording.`, review: { - instructions: '#### Verify that the STATE field of the recording has changed to STOPPED.', - failedTaskHelp: 'If you do not see the recording, try the **Start a recording** task again.', + instructions: '#### Verify that the STATE field of the Recording has changed to STOPPED.', + failedTaskHelp: 'If you do not see the Recording, try the **Start a Recording** task again.', }, }, { - title: 'Download a recording', + title: 'Download a Recording', description: ` -Downloading a recording will save the recording to your local machine as a JFR file. You can then use **JDK Mission Control (JMC)** to analyze the recording. -1. Open the [kebab menu]{{highlight recording-kebab}} next to the recording that you want to download. -2. Click \`Download Recording\` to prompt your browser to open a dialog to save the recording to your local machine. +Downloading a Recording will save the Recording to your local machine as a JFR file. You can then use **JDK Mission Control (JMC)** to analyze the Recording. +1. Open the [kebab menu]{{highlight recording-kebab}} next to the Recording that you want to download. +2. Click \`Download Recording\` to prompt your browser to open a dialog to save the Recording to your local machine. 3. Choose what to do with the file. `, review: { - instructions: '#### Verify that you have downloaded the recording to your local machine.', - failedTaskHelp: 'If you do not see the recording, try the **Start a recording** task again.', + instructions: '#### Verify that you have downloaded the Recording to your local machine.', + failedTaskHelp: 'If you do not see the Recording, try the **Start a Recording** task again.', }, }, { title: 'View an analysis report', description: ` -[APP] is able to generate an **Automated analysis Report** using a JFR recording. The **Java Mission Control** rules engine analyzes your recording, looks for common problems, and assigns a severity score from 0 (no problem) to 100 (potentially severe problem) to each problem. -1. Click the [kebab menu]{{highlight recording-kebab}} next to the recording that you want to view an analysis report for. -2. Click \`View Report ...\` to view an analysis report of the recording in a new tab. +[APP] is able to generate an **Automated analysis report** using a JFR Recording. The **Java Mission Control** rules engine analyzes your Recording, looks for common problems, and assigns a severity score from 0 (no problem) to 100 (potentially severe problem) to each problem. +1. Click the [kebab menu]{{highlight recording-kebab}} next to the Recording that you want to view an analysis report for. +2. Click \`View Report ...\` to view an analysis report of the Recording in a new tab. 3. *Optional:* Right click on the page and select \`Save Page As...\` to download the report HTML file to your local machine. `, review: { - instructions: '#### Verify that you can see an analysis report of the recording.', + instructions: '#### Verify that you can see an analysis report of the Recording.', failedTaskHelp: - 'The kebab `⁝` should be next to the recording row in the active recordings table. Clicking the kebab icon should show a menu with the `View Report ...` option.', + 'The kebab `⁝` should be next to the Recording row in the Active Recordings table. Clicking the kebab icon should show a menu with the `View Report ...` option.', }, }, { - title: 'Archive a recording', + title: 'Archive a Recording', description: ` -Archiving a recording will save the recording to [APP]'s archival storage, and will persist even after either the target JVM, or [APP], has stopped. These recordings will appear in the target JVM's **Archived Recordings** tab, as well as in the [Archives]{{highlight nav-archives-tab}} view on the [APP] console navigation bar. +Archiving a Recording will save the Recording to [APP]'s archival storage, and will persist even after either the target JVM, or [APP], has stopped. These Recordings will appear in the target JVM's **Archived Recordings** tab, as well as in the [Archives]{{highlight nav-archives-tab}} view on the [APP] console navigation bar. -1. Click [Archive]{{highlight recordings-archive-btn}} to archive the recording. -2. To view the archived recording in [APP]'s storage, go to the [Archived Recordings]{{highlight archived-recordings-tab}} tab. +1. Click [Archive]{{highlight recordings-archive-btn}} to archive the Recording. +2. To view the Archived Recording in [APP]'s storage, go to the [Archived Recordings]{{highlight archived-recordings-tab}} tab. -[You can download archived recordings and view an analysis report of the archived recording from the [Archived Recordings]{{highlight archived-recordings-tab}} tab, similar to active recordings.]{{admonition tip}}`, +[You can download Archived Recordings and view an analysis report of the Archived Recording from the [Archived Recordings]{{highlight archived-recordings-tab}} tab, similar to active recordings.]{{admonition tip}}`, review: { - instructions: '#### Verify that the recording has been archived in the **Archived Recordings** tab.', + instructions: '#### Verify that the Recording has been archived in the **Archived Recordings** tab.', failedTaskHelp: - 'The recording name should have been saved in the format `__.jfr`. If you still cannot find the recording, please try the above steps again.', + 'The Recording name should have been saved in the format `__.jfr`. If you still cannot find the Recording, please try the above steps again.', }, }, ], conclusion: conclusion( displayName, - 'Start a recording', + 'Start a Recording', `To learn more about [APP]'s extensive features and capabilities, please visit our website at ${build.documentationUrl}.`, ), type: { diff --git a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx index 30471005a..aa8aec7ed 100644 --- a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx +++ b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx @@ -29,15 +29,15 @@ const GroupStartRecordingQuickStart: QuickStart = { displayName: 'Start Recording on multiple target JVMs', durationMinutes: 5, icon: , - description: 'Learn how to start recordings on multiple targets at once.', + description: 'Learn how to start Recordings on multiple targets at once.', introduction: ` ## Topology View The **Cryostat Topology** provides a visual presentation of all targets discovered by **Cryostat**, using various mechanisms (e.g. **Kubernetes API**, **JDP**) that are represented by **Realms**. -With **Topology** view, you can perform actions (i.e. start recording) on an individual target or a group of targets, using either **Graph View** or **List View**. +With **Topology** view, you can perform actions (i.e. start Recording) on an individual target or a group of targets, using either **Graph View** or **List View**. ### What you'll learn -- How to start recording on a group of targets +- How to start Recording on a group of targets ### What you'll need @@ -74,33 +74,33 @@ In *List view*, to reveal nested groups, click on list rows.`, { title: 'Start Recording for a group of targets.', description: ` -To start a recording for targets under the selected group, select the \`Start Recording\` option. +To start a Recording for targets under the selected group, select the \`Start Recording\` option. -On each descendant target, **Cryostat** will create an active recording named \`cryostat_topology_action\` with the label +On each descendant target, **Cryostat** will create an active Recording named \`cryostat_topology_action\` with the label \`cryostat.io.topology-group=\` which represents the group the action is invoked on. -[In some cases (e.g. missing JMX Credentials), **Cryostat** will fail to start recording on some targets.]{{admonition warning}} +[In some cases (e.g. missing JMX Credentials), **Cryostat** will fail to start Recording on some targets.]{{admonition warning}} `, review: { - instructions: '#### Verify that you can start recording on a group of targets.', + instructions: '#### Verify that you can start Recording on a group of targets.', failedTaskHelp: `If you do not see the **Action** menu, follow the previous steps again.`, }, }, { - title: 'Check the started recordings.', + title: 'Check the started Recordings.', description: ` -To check the started recordings in the previous step: +To check the started Recordings in the previous step: 1. In the [APP] console navigation bar, click [Recordings]{{highlight nav-recordings-tab}} to go to **Recording** page. 2. Click the [Target Select]{{highlight target-select}} dropdown menu. 3. Select a target that belong to the selected group. -4. The recording will be displayed with name \`cryostat_topology_action\` and a label \`cryostat.io.topology-group=\` +4. The Recording will be displayed with name \`cryostat_topology_action\` and a label \`cryostat.io.topology-group=\` [In the **Topology Graph View**, targets (i.e. nodes) that have any \`RUNNING\` active recordings will have a decorator on their top-right corner to indicate so.]{{admonition tip}} `, review: { - instructions: '#### Verify that you can start recording on a group of targets.', - failedTaskHelp: `If you do not see the recording, follow the previous steps again.`, + instructions: '#### Verify that you can start Recording on a group of targets.', + failedTaskHelp: `If you do not see the Recording, follow the previous steps again.`, }, }, ], diff --git a/src/app/RecordingMetadata/BulkEditLabels.tsx b/src/app/RecordingMetadata/BulkEditLabels.tsx index dd326ebfe..09c4a68a7 100644 --- a/src/app/RecordingMetadata/BulkEditLabels.tsx +++ b/src/app/RecordingMetadata/BulkEditLabels.tsx @@ -305,8 +305,8 @@ export const BulkEditLabels: React.FC = ({ - Labels present on all selected recordings will appear here. Editing the labels will affect ALL - selected recordings. + Labels present on all selected Recordings will appear here. Editing the Labels will affect all + selected Recordings. } appendTo={portalRoot} diff --git a/src/app/RecordingMetadata/utils.ts b/src/app/RecordingMetadata/utils.ts index d66f8cf2b..2931cf4be 100644 --- a/src/app/RecordingMetadata/utils.ts +++ b/src/app/RecordingMetadata/utils.ts @@ -43,7 +43,7 @@ export const parseLabelsFromFile = (file: File): Observable => { }); return labels; } - throw new Error('No labels found in file'); + throw new Error('No Labels found in file'); }), ); }; diff --git a/src/app/Recordings/RecordingsTable.tsx b/src/app/Recordings/RecordingsTable.tsx index 792c6f248..3815394e6 100644 --- a/src/app/Recordings/RecordingsTable.tsx +++ b/src/app/Recordings/RecordingsTable.tsx @@ -91,7 +91,7 @@ export const RecordingsTable: React.FC = ({ view = ( <> diff --git a/src/app/Rules/CreateRule.tsx b/src/app/Rules/CreateRule.tsx index ecc94c10b..89f139824 100644 --- a/src/app/Rules/CreateRule.tsx +++ b/src/app/Rules/CreateRule.tsx @@ -345,7 +345,7 @@ export const CreateRuleForm: React.FC = (_props) => { Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be - kept in the application recording buffer, and how frequently Cryostat should copy the application recording + kept in the application Recording buffer, and how frequently Cryostat should copy the application Recording buffer into Cryostat's own archived storage. @@ -508,7 +508,7 @@ enabled in the future.`} @@ -541,7 +541,7 @@ enabled in the future.`} @@ -574,7 +574,7 @@ enabled in the future.`} @@ -607,7 +607,7 @@ enabled in the future.`} = (_) => { About Automated Rules - Automated Rules define a dynamic set of Target JVMs to connect to and start{' '} + Automated Rules define a dynamic set of target JVMs to connect to and start{' '} Active Recordings using a specific Event Template{' '} - when the Automated Rule is created and when any new matching Target JVMs appear. If your Target JVM + when the Automated Rule is created and when any new matching target JVMs appear. If your target JVM connections require JMX Credentials, you can configure these in Security. Automated Rules can be configured to periodically copy the contents of the Active Recording to{' '} Archives to ensure you always have up-to-date information about your JVMs. diff --git a/src/app/Rules/RulesUploadModal.tsx b/src/app/Rules/RulesUploadModal.tsx index 6ea301c83..a7916339d 100644 --- a/src/app/Rules/RulesUploadModal.tsx +++ b/src/app/Rules/RulesUploadModal.tsx @@ -148,8 +148,8 @@ export const RuleUploadModal: React.FC = ({ onClose, ...pr
Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how - much data should be kept in the application recording buffer, and how frequently Cryostat should copy the - application recording buffer into Cryostat"s own archived storage. + much data should be kept in the application Recording buffer, and how frequently Cryostat should copy the + application Recording buffer into Cryostat"s own archived storage.
} > diff --git a/src/app/Shared/Components/JmxAuthDescription.tsx b/src/app/Shared/Components/JmxAuthDescription.tsx index 31f487d12..9d25364a7 100644 --- a/src/app/Shared/Components/JmxAuthDescription.tsx +++ b/src/app/Shared/Components/JmxAuthDescription.tsx @@ -41,7 +41,7 @@ export const JmxAuthDescription: React.FC These authentication credentials are stored in encrypted storage managed by the Cryostat backend and used for - manually managing recordings and event templates on target JVMs, as well as for Automated Rules which run in the + manually managing Recordings and Event Templates on target JVMs, as well as for Automated Rules which run in the background and open unattended target connections. diff --git a/src/app/Shared/Components/SelectTemplateSelectorForm.tsx b/src/app/Shared/Components/SelectTemplateSelectorForm.tsx index ac69afee6..5973864ba 100644 --- a/src/app/Shared/Components/SelectTemplateSelectorForm.tsx +++ b/src/app/Shared/Components/SelectTemplateSelectorForm.tsx @@ -49,7 +49,7 @@ export const SelectTemplateSelectorForm: React.FC [ { - groupLabel: 'Target Templates', + groupLabel: 'Target templates', options: templates .filter((t) => t.type === 'TARGET') .map((t) => ({ diff --git a/src/app/Shared/Services/Api.service.tsx b/src/app/Shared/Services/Api.service.tsx index c6b317ffe..4eae2d8fd 100644 --- a/src/app/Shared/Services/Api.service.tsx +++ b/src/app/Shared/Services/Api.service.tsx @@ -366,7 +366,7 @@ export class ApiService { if (resp.status == 202) { this.notifications.warning( 'Snapshot Failed to Create', - 'The recording is not readable for reasons, such as, unavailability of active and non-snapshot source recordings from where the event data is read.', + 'The Recording is not readable for reasons, such as, unavailability of active and non-snapshot source Recordings from where the event data is read.', ); } }), @@ -668,7 +668,7 @@ export class ApiService { tap((resp) => { if (resp.status == 400) { this.notifications.warning( - 'Failed to insert Probes', + 'Failed to insert probes', 'The probes failed to be injected. Check that the agent is present in the same container as the target JVM and the target is running with -javaagent:/path/to/agent', ); } diff --git a/src/app/Shared/Services/Report.service.tsx b/src/app/Shared/Services/Report.service.tsx index 873fcbab2..c0ebcddb4 100644 --- a/src/app/Shared/Services/Report.service.tsx +++ b/src/app/Shared/Services/Report.service.tsx @@ -30,7 +30,7 @@ export class ReportService { reportJson(recording: Recording, connectUrl: string): Observable { if (!recording.reportUrl) { - return throwError(() => new Error('No recording report URL')); + return throwError(() => new Error('No Recording report URL')); } const headers = new Headers(); headers.append('Accept', 'application/json'); diff --git a/src/app/Shared/Services/api.types.ts b/src/app/Shared/Services/api.types.ts index 6df538975..97be1f5b7 100644 --- a/src/app/Shared/Services/api.types.ts +++ b/src/app/Shared/Services/api.types.ts @@ -454,10 +454,10 @@ export enum AutomatedAnalysisScore { } export const FAILED_REPORT_MESSAGE = - 'Failed to load the report from recording because the requested entity is too large.'; -export const NO_RECORDINGS_MESSAGE = 'No active or archived recordings available. Create a new recording for analysis.'; -export const RECORDING_FAILURE_MESSAGE = 'Failed to start recording for analysis.'; -export const TEMPLATE_UNSUPPORTED_MESSAGE = 'The template type used in this recording is not supported on this JVM.'; + 'Failed to load the report from Recording because the requested entity is too large.'; +export const NO_RECORDINGS_MESSAGE = 'No Active or Archived Recordings available. Create a new Recording for analysis.'; +export const RECORDING_FAILURE_MESSAGE = 'Failed to start Recording for analysis.'; +export const TEMPLATE_UNSUPPORTED_MESSAGE = 'The template type used in this Recording is not supported on this JVM.'; // ====================================== // Discovery/Target resources diff --git a/src/app/Shared/Services/api.utils.ts b/src/app/Shared/Services/api.utils.ts index a4cefcfed..f8ea825b3 100644 --- a/src/app/Shared/Services/api.utils.ts +++ b/src/app/Shared/Services/api.utils.ts @@ -343,7 +343,7 @@ export const messageKeys = new Map([ NotificationCategory.ProbesRemoved, { variant: AlertVariant.success, - title: 'Probes removed from Target', + title: 'Probes removed from target', body: (evt) => `Probes successfully removed from ${evt.message.target}`, } as NotificationMessageMapper, ], diff --git a/src/app/TargetView/TargetContextSelector.tsx b/src/app/TargetView/TargetContextSelector.tsx index b27ac69a6..86f52f0da 100644 --- a/src/app/TargetView/TargetContextSelector.tsx +++ b/src/app/TargetView/TargetContextSelector.tsx @@ -205,7 +205,7 @@ export const TargetContextSelector: React.FC = ({ cl const selectFooter = React.useMemo( () => ( - + ), [], @@ -221,7 +221,7 @@ export const TargetContextSelector: React.FC = ({ cl className={className} isPlain variant={SelectVariant.single} - aria-label="Select Target" + aria-label="Select target" maxHeight="30em" isFlipEnabled={true} menuAppendTo={'parent'} diff --git a/src/app/TargetView/TargetSelect.tsx b/src/app/TargetView/TargetSelect.tsx index df7f8a8f9..3bc68dc2f 100644 --- a/src/app/TargetView/TargetSelect.tsx +++ b/src/app/TargetView/TargetSelect.tsx @@ -190,7 +190,7 @@ export const TargetSelect: React.FC = ({ onSelect, simple, .. menuAppendTo="parent" maxHeight="20em" isOpen={isDropdownOpen} - aria-label="Select Target" + aria-label="Select target" > {selectOptions} diff --git a/src/app/Topology/Actions/utils.tsx b/src/app/Topology/Actions/utils.tsx index 9e9c414f0..220529ba7 100644 --- a/src/app/Topology/Actions/utils.tsx +++ b/src/app/Topology/Actions/utils.tsx @@ -110,7 +110,7 @@ export const nodeActions: NodeAction[] = [ const targetNode: TargetNode = element.getData(); services.api.deleteTarget(targetNode.target).subscribe(() => undefined); }, - title: 'Delete Target', + title: 'Delete target', allowed: (element) => { const targetNode: TargetNode = element.getData(); const realm = targetNode.target.annotations.cryostat.find((label) => label.key === 'REALM')?.value; @@ -321,16 +321,16 @@ export const notifyGroupActionErrors = ( // Location of failed target node const searchIndex = Number(err.path[err.path.indexOf('descendantTargets') + 1]); if (searchIndex == undefined) { - notifications.danger(`Could not ${actionVerb} for a Target in ${groupDisplay}`, err.message); + notifications.danger(`Could not ${actionVerb} for a target in ${groupDisplay}`, err.message); } // Get the name of failed target node const name: string | undefined = data.environmentNodes[0]?.descendantTargets[searchIndex]?.name; if (name) { - notifications.danger(`Could not ${actionVerb} for Target ${name} in ${groupDisplay}`, err.message); + notifications.danger(`Could not ${actionVerb} for target ${name} in ${groupDisplay}`, err.message); } else { - notifications.danger(`Could not ${actionVerb} for a Target in ${groupDisplay}`, err.message); + notifications.danger(`Could not ${actionVerb} for a target in ${groupDisplay}`, err.message); } }); } diff --git a/src/app/Topology/GraphView/NodeDecorator.tsx b/src/app/Topology/GraphView/NodeDecorator.tsx index c88632529..326f7b9e1 100644 --- a/src/app/Topology/GraphView/NodeDecorator.tsx +++ b/src/app/Topology/GraphView/NodeDecorator.tsx @@ -59,7 +59,7 @@ export const ActiveRecordingDecorator: React.FC = ({ element, qu if (loading) { return { icon: , - tooltip: 'Retrieving active recordings.', + tooltip: 'Retrieving Active Recordings.', }; } return runningRecs.length && !error diff --git a/src/app/routes.tsx b/src/app/routes.tsx index 933b161a8..85ed2b4b4 100644 --- a/src/app/routes.tsx +++ b/src/app/routes.tsx @@ -126,7 +126,7 @@ const routes: IAppRoute[] = [ label: 'Recordings', path: '/recordings', title: 'Recordings', - description: 'Create, view and archive JFR recordings on single target JVMs.', + description: 'Create, view and archive JFR Recordings on single target JVMs.', navGroup: CONSOLE, children: [ { @@ -144,7 +144,7 @@ const routes: IAppRoute[] = [ path: '/archives', title: 'Archives', description: - 'View archived recordings across all target JVMs, as well as upload recordings directly to the archive.', + 'View Archived Recordings across all target JVMs, as well as upload Recordings directly to the archive.', navGroup: CONSOLE, }, { @@ -153,7 +153,7 @@ const routes: IAppRoute[] = [ label: 'Events', path: '/events', title: 'Events', - description: 'View available JFR event templates and types for target JVMs, as well as upload custom templates.', + description: 'View available JFR Event Templates and types for target JVMs, as well as upload custom templates.', navGroup: CONSOLE, }, { diff --git a/src/itest/RecordingWorkflow.test.ts b/src/itest/RecordingWorkflow.test.ts index ea5f9edb0..9f8c3ff9d 100644 --- a/src/itest/RecordingWorkflow.test.ts +++ b/src/itest/RecordingWorkflow.test.ts @@ -43,7 +43,7 @@ describe('Recording workflow steps', function () { assert.equal('recordings', route); }); - it('creates a new recording', async function () { + it('creates a new Recording', async function () { assert.equal((await recordings.getRecordings()).length, 0); await recordings.createRecording('helloWorld'); const active = await recordings.getRecordings(); @@ -53,7 +53,7 @@ describe('Recording workflow steps', function () { assert.equal(state, RecordingState.RUNNING); }); - it('stops a recording', async function () { + it('stops a Recording', async function () { const active = await recordings.getRecordings(); assert.equal(active.length, 1); @@ -63,7 +63,7 @@ describe('Recording workflow steps', function () { assert.equal(state, RecordingState.STOPPED); }); - it('archives a new recording', async function () { + it('archives a new Recording', async function () { const active = await recordings.getRecordings(); assert.equal(active.length, 1); @@ -74,7 +74,7 @@ describe('Recording workflow steps', function () { assert.ok(notif.description.includes('helloWorld')); }); - it('deletes a recording', async function () { + it('deletes a Recording', async function () { const active = await recordings.getRecordings(); assert.equal(active.length, 1); diff --git a/src/mirage/index.ts b/src/mirage/index.ts index 61f75db4f..523fc8b1e 100644 --- a/src/mirage/index.ts +++ b/src/mirage/index.ts @@ -330,14 +330,14 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'VMOperation Peak Duration', topic: 'vm_operations', description: - 'Summary:\nNo excessively long VM operations were found in this recording (the longest was 23.774 ms).', + 'Summary:\nNo excessively long VM operations were found in this Recording (the longest was 23.774 ms).', }, PasswordsInSystemProperties: { score: 75.0, name: 'Passwords in System Properties', topic: 'system_properties', description: - 'Summary:\nThe system properties in the recording may contain passwords.\n\nExplanation:\nThe following suspicious system properties were found in this recording: javax.net.ssl.keyStorePassword,javax.net.ssl.trustStorePassword,com.sun.management.jmxremote.password.file. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your system properties, but want to be able to share recordings without also sharing the passwords, please disable the \u0027\u0027Initial System Property\u0027\u0027 event.', + 'Summary:\nThe system properties in the Recording may contain passwords.\n\nExplanation:\nThe following suspicious system properties were found in this Recording: javax.net.ssl.keyStorePassword,javax.net.ssl.trustStorePassword,com.sun.management.jmxremote.password.file. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your system properties, but want to be able to share Recordings without also sharing the passwords, please disable the \u0027\u0027Initial System Property\u0027\u0027 event.', }, Options: { score: 0.0, @@ -350,7 +350,7 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'Passwords in Environment Variables', topic: 'environment_variables', description: - 'Summary:\nThe environment variables in the recording may contain passwords.\n\nExplanation:\nThe following suspicious environment variables were found in this recording: CRYOSTAT_JDBC_PASSWORD, CRYOSTAT_JMX_CREDENTIALS_DB_PASSWORD. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your environment variables, but want to be able to share recordings without also sharing the passwords, please disable the \u0027\u0027Initial Environment Variable\u0027\u0027 event.', + 'Summary:\nThe environment variables in the Recording may contain passwords.\n\nExplanation:\nThe following suspicious environment variables were found in this Recording: CRYOSTAT_JDBC_PASSWORD, CRYOSTAT_JMX_CREDENTIALS_DB_PASSWORD. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your environment variables, but want to be able to share Recordings without also sharing the passwords, please disable the \u0027\u0027Initial Environment Variable\u0027\u0027 event.', }, MethodProfiling: { score: 0.6705776661956153, @@ -370,13 +370,13 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'Stackdepth Setting', topic: 'jvm_information', description: - 'Summary:\nSome stack traces were truncated in this recording.\n\nExplanation:\nThe Flight Recorder is configured with a maximum captured stack depth of 64. 3.11 % of all traces were larger than this option, and were therefore truncated. If more detailed traces are required, increase the \u0027\u0027-XX:FlightRecorderOptions\u003dstackdepth\u003d\u003cvalue\u003e\u0027\u0027 value.\nEvents of the following types have truncated stack traces: org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@21e159e2,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@174930bc,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@4f5d6223', + 'Summary:\nSome stack traces were truncated in this Recording.\n\nExplanation:\nThe Flight Recorder is configured with a maximum captured stack depth of 64. 3.11 % of all traces were larger than this option, and were therefore truncated. If more detailed traces are required, increase the \u0027\u0027-XX:FlightRecorderOptions\u003dstackdepth\u003d\u003cvalue\u003e\u0027\u0027 value.\nEvents of the following types have truncated stack traces: org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@21e159e2,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@174930bc,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@4f5d6223', }, PasswordsInArguments: { score: 0.0, name: 'Passwords in Java Arguments', topic: 'jvm_information', - description: 'Summary:\nThe recording does not seem to contain passwords in the application arguments.', + description: 'Summary:\nThe Recording does not seem to contain passwords in the application arguments.', }, }, ); @@ -395,7 +395,7 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'Demo Template', provider: 'Demo', type: 'TARGET', - description: 'This is not a real event template, but it is here!', + description: 'This is not a real Event Template, but it is here!', }, ]); this.get('api/v2/probes', () => []); diff --git a/src/test/Agent/AgentLiveProbes.test.tsx b/src/test/Agent/AgentLiveProbes.test.tsx index cf05f6757..f1cd24b9b 100644 --- a/src/test/Agent/AgentLiveProbes.test.tsx +++ b/src/test/Agent/AgentLiveProbes.test.tsx @@ -130,7 +130,7 @@ describe('', () => { it('should disable remove button if there is no probe', async () => { render({ routerConfigs: { routes: [{ path: '/events', element: }] } }); - const removeButton = screen.getByText('Remove All Probes'); + const removeButton = screen.getByText('Remove all probes'); expect(removeButton).toBeInTheDocument(); expect(removeButton).toBeVisible(); expect(removeButton).toBeDisabled(); @@ -162,11 +162,11 @@ describe('', () => { }); }); - it('should remove all probes when Remove All Probe is clicked', async () => { + it('should remove all probes when remove all probe is clicked', async () => { const deleteRequestSpy = jest.spyOn(defaultServices.api, 'removeProbes').mockReturnValue(of(true)); const { user } = render({ routerConfigs: { routes: [{ path: '/events', element: }] } }); - const removeButton = screen.getByText('Remove All Probes'); + const removeButton = screen.getByText('Remove all probes'); expect(removeButton).toBeInTheDocument(); expect(removeButton).toBeVisible(); @@ -179,7 +179,7 @@ describe('', () => { const deleteRequestSpy = jest.spyOn(defaultServices.api, 'removeProbes').mockReturnValue(of(true)); const { user } = render({ routerConfigs: { routes: [{ path: '/events', element: }] } }); - const removeButton = screen.getByText('Remove All Probes'); + const removeButton = screen.getByText('Remove all probes'); expect(removeButton).toBeInTheDocument(); expect(removeButton).toBeVisible(); @@ -213,7 +213,7 @@ describe('', () => { expect(screen.queryByText('some_name')).not.toBeInTheDocument(); - const hintText = screen.getByText('No Active Probes'); + const hintText = screen.getByText('No active probes'); expect(hintText).toBeInTheDocument(); expect(hintText).toBeVisible(); }); diff --git a/src/test/Agent/AgentProbeTemplates.test.tsx b/src/test/Agent/AgentProbeTemplates.test.tsx index 5fe771ce6..024795dec 100644 --- a/src/test/Agent/AgentProbeTemplates.test.tsx +++ b/src/test/Agent/AgentProbeTemplates.test.tsx @@ -93,7 +93,7 @@ jest describe('', () => { afterEach(cleanup); - it('should add a probe template after receiving a notification', async () => { + it('should add a Probe Template after receiving a notification', async () => { render({ routerConfigs: { routes: [{ path: '/events', element: }] } }); const addTemplateName = screen.getByText('anotherProbeTemplate'); @@ -101,7 +101,7 @@ describe('', () => { expect(addTemplateName).toBeVisible(); }); - it('should remove a probe template after receiving a notification', async () => { + it('should remove a Probe Template after receiving a notification', async () => { render({ routerConfigs: { routes: [{ path: '/events', element: }] } }); expect(screen.queryByText('someProbeTemplate')).not.toBeInTheDocument(); @@ -134,12 +134,12 @@ describe('', () => { expect(modal).toBeInTheDocument(); expect(modal).toBeVisible(); - const modalTitle = within(modal).getByText('Create Custom Probe Template'); + const modalTitle = within(modal).getByText('Create custom Probe Template'); expect(modalTitle).toBeInTheDocument(); expect(modalTitle).toBeVisible(); }); - it('should upload a probe template when form is filled and Submit is clicked', async () => { + it('should upload a Probe Template when form is filled and Submit is clicked', async () => { const { user } = render({ routerConfigs: { routes: [{ path: '/events', element: }] }, }); @@ -154,7 +154,7 @@ describe('', () => { expect(modal).toBeInTheDocument(); expect(modal).toBeVisible(); - const modalTitle = within(modal).getByText('Create Custom Probe Template'); + const modalTitle = within(modal).getByText('Create custom Probe Template'); expect(modalTitle).toBeInTheDocument(); expect(modalTitle).toBeVisible(); @@ -191,7 +191,7 @@ describe('', () => { expect(closeButton).toBeVisible(); }); - it('should delete a probe template when Delete is clicked', async () => { + it('should delete a Probe Template when Delete is clicked', async () => { const deleteRequestSpy = jest.spyOn(defaultServices.api, 'deleteCustomProbeTemplate').mockReturnValue(of(true)); const { user } = render({ routerConfigs: { routes: [{ path: '/events', element: }] }, @@ -209,7 +209,7 @@ describe('', () => { expect(deleteRequestSpy).toBeCalledWith('someProbeTemplate'); }); - it('should show warning modal and delete a probe template when confirmed', async () => { + it('should show warning modal and delete a Probe Template when confirmed', async () => { const deleteRequestSpy = jest.spyOn(defaultServices.api, 'deleteCustomProbeTemplate').mockReturnValue(of(true)); const { user } = render({ routerConfigs: { routes: [{ path: '/events', element: }] }, @@ -249,7 +249,7 @@ describe('', () => { await user.click(screen.getByLabelText('Actions')); - const insertButton = await screen.findByText('Insert Probes...'); + const insertButton = await screen.findByText('Insert probes...'); expect(insertButton).toBeInTheDocument(); expect(insertButton).toBeVisible(); expect(insertButton.getAttribute('aria-disabled')).toBe('false'); @@ -267,7 +267,7 @@ describe('', () => { await user.click(screen.getByLabelText('Actions')); - const insertButton = await screen.findByText('Insert Probes...'); + const insertButton = await screen.findByText('Insert probes...'); expect(insertButton).toBeInTheDocument(); expect(insertButton).toBeVisible(); expect(insertButton.getAttribute('aria-disabled')).toBe('true'); diff --git a/src/test/Agent/__snapshots__/AgentLiveProbes.test.tsx.snap b/src/test/Agent/__snapshots__/AgentLiveProbes.test.tsx.snap index 0f1db1073..c5fccf0a6 100644 --- a/src/test/Agent/__snapshots__/AgentLiveProbes.test.tsx.snap +++ b/src/test/Agent/__snapshots__/AgentLiveProbes.test.tsx.snap @@ -27,7 +27,7 @@ exports[` renders correctly 1`] = `
- The JMC Agent allows users to dynamically inject custom JFR events into running JVMs. In order to make use of the JMC Agent, the agent jar must be present in the same container as the target, and the target must be started with the agent (-javaagent:/path/to/agent.jar). Once these pre-requisites are met, the user can upload probe templates to Cryostat and insert them to the target, as well as view or remove currently active probes. + The JMC Agent allows users to dynamically inject custom JFR events into running JVMs. In order to make use of the JMC Agent, the agent jar must be present in the same container as the target, and the target must be started with the agent (-javaagent:/path/to/agent.jar). Once these pre-requisites are met, the user can upload Probe Templates to Cryostat and insert them to the target, as well as view or remove currently active probes.
@@ -91,7 +91,7 @@ exports[` renders correctly 1`] = ` type="button" > Remove - All Probes + all probes @@ -115,7 +115,7 @@ exports[` renders correctly 1`] = ` { }); jest.mock('@app/Shared/Services/Target.service', () => ({ - ...jest.requireActual('@app/Shared/Services/Target.service'), // Require actual implementation of utility functions for Target + ...jest.requireActual('@app/Shared/Services/Target.service'), // Require actual implementation of utility functions for target })); jest @@ -170,7 +170,7 @@ describe('', () => { expect(tree?.toJSON()).toMatchSnapshot(); }); - it('shows no recordings when empty', async () => { + it('shows no Recordings when empty', async () => { render({ routerConfigs: { routes: [{ path: '/archives', element: }] } }); expect(screen.getByText('No Archived Recordings')).toBeInTheDocument(); @@ -244,7 +244,7 @@ describe('', () => { expect(screen.queryByText('Archived Recordings Table')).not.toBeInTheDocument(); }); - it('increments the count when an archived recording is saved', async () => { + it('increments the count when an Archived Recording is saved', async () => { render({ routerConfigs: { routes: [{ path: '/archives', element: }] } }); const tableBody = screen.getAllByRole('rowgroup')[1]; @@ -258,7 +258,7 @@ describe('', () => { }); }); - it('decrements the count when an archived recording is deleted', async () => { + it('decrements the count when an Archived Recording is deleted', async () => { render({ routerConfigs: { routes: [{ path: '/archives', element: }] } }); const tableBody = screen.getAllByRole('rowgroup')[1]; diff --git a/src/test/Archives/AllTargetsArchivedRecordingsTable.test.tsx b/src/test/Archives/AllTargetsArchivedRecordingsTable.test.tsx index 2ea05ac6f..bbddf6d75 100644 --- a/src/test/Archives/AllTargetsArchivedRecordingsTable.test.tsx +++ b/src/test/Archives/AllTargetsArchivedRecordingsTable.test.tsx @@ -280,7 +280,7 @@ describe('', () => { expect(screen.queryByText(`${mockCount3}`)).not.toBeInTheDocument(); }); - it('hides targets with zero recordings', async () => { + it('hides targets with zero Recordings', async () => { const { user } = render({ routerConfigs: { routes: [{ path: '/archives', element: }] }, }); @@ -379,7 +379,7 @@ describe('', () => { expect(screen.queryByText(`${mockCount1}`)).not.toBeInTheDocument(); }); - it('increments the count when an archived recording is saved', async () => { + it('increments the count when an Archived Recording is saved', async () => { render({ routerConfigs: { routes: [{ path: '/archives', element: }] } }); const tableBody = screen.getAllByRole('rowgroup')[1]; @@ -390,7 +390,7 @@ describe('', () => { expect(within(firstTarget).getByText(`${mockCount1 + 1}`)).toBeTruthy(); }); - it('decrements the count when an archived recording is deleted', async () => { + it('decrements the count when an Archived Recording is deleted', async () => { const { user } = render({ routerConfigs: { routes: [{ path: '/archives', element: }] }, }); diff --git a/src/test/Archives/__snapshots__/AllTargetsArchivedRecordingsTable.test.tsx.snap b/src/test/Archives/__snapshots__/AllTargetsArchivedRecordingsTable.test.tsx.snap index 572984e87..6ca47fa55 100644 --- a/src/test/Archives/__snapshots__/AllTargetsArchivedRecordingsTable.test.tsx.snap +++ b/src/test/Archives/__snapshots__/AllTargetsArchivedRecordingsTable.test.tsx.snap @@ -96,7 +96,7 @@ Array [ className="pf-c-check__label" htmlFor="all-targets-hide-check" > - Hide targets with zero recordings + Hide targets with zero Recordings diff --git a/src/test/CreateRecording/CustomRecordingForm.test.tsx b/src/test/CreateRecording/CustomRecordingForm.test.tsx index 9392a3094..84effb93c 100644 --- a/src/test/CreateRecording/CustomRecordingForm.test.tsx +++ b/src/test/CreateRecording/CustomRecordingForm.test.tsx @@ -88,7 +88,7 @@ describe('', () => { expect(tree?.toJSON()).toMatchSnapshot(); }); - it('should create recording when form is filled and create is clicked', async () => { + it('should create Recording when form is filled and create is clicked', async () => { const onSubmitSpy = jest.spyOn(defaultServices.api, 'createRecording').mockReturnValue(of(mockResponse)); const { user } = render({ routerConfigs: { routes: [{ path: '/recordings/create', element: }] }, @@ -153,7 +153,7 @@ describe('', () => { expect(helperText).toBeVisible(); }); - it('should show error view if failing to retrieve templates or recording options', async () => { + it('should show error view if failing to retrieve templates or Recording options', async () => { const subj = new Subject(); const mockTargetSvc = { target: () => of(mockTarget as Target), @@ -178,7 +178,7 @@ describe('', () => { await doAct(async () => subj.next()); - const failTitle = screen.getByText('Error displaying recording creation form'); + const failTitle = screen.getByText('Error displaying Recording creation form'); expect(failTitle).toBeInTheDocument(); expect(failTitle).toBeVisible(); diff --git a/src/test/CreateRecording/SnapshotRecordingForm.test.tsx b/src/test/CreateRecording/SnapshotRecordingForm.test.tsx index 1c8b6cf4f..dd05867fd 100644 --- a/src/test/CreateRecording/SnapshotRecordingForm.test.tsx +++ b/src/test/CreateRecording/SnapshotRecordingForm.test.tsx @@ -65,7 +65,7 @@ describe('', () => { expect(tree?.toJSON()).toMatchSnapshot(); }); - it('should create recording when create is clicked', async () => { + it('should create Recording when create is clicked', async () => { const onCreateSpy = jest.spyOn(defaultServices.api, 'createSnapshot').mockReturnValue(of(true)); const { user } = render({ routerConfigs: { @@ -89,7 +89,7 @@ describe('', () => { expect(mockNavigate).toHaveBeenCalledWith('..', { relative: 'path' }); }); - it('should show error view if failing to retrieve templates or recording options', async () => { + it('should show error view if failing to retrieve templates or Recording options', async () => { const authSubj = new Subject(); const mockTargetSvc = { ...defaultServices.target, @@ -114,7 +114,7 @@ describe('', () => { await doAct(async () => authSubj.next()); - const failTitle = screen.getByText('Error displaying recording creation form'); + const failTitle = screen.getByText('Error displaying Recording creation form'); expect(failTitle).toBeInTheDocument(); expect(failTitle).toBeVisible(); diff --git a/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap b/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap index 0671aeb41..71dbafcea 100644 --- a/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap +++ b/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap @@ -9,7 +9,7 @@ Array [ data-ouia-safe={true} data-pf-content={true} > - JDK Flight Recordings are compact records of events which have occurred within the target JVM. Many event types are built in to the JVM itself, while others are user defined. + JDK Flight Recordings are compact records of events which have occurred within the target JVM. Many Event Types are built in to the JVM itself, while others are user defined. , - Restart if recording already exists + Restart if Recording already exists
- Enter a recording name. This will be unique within the target JVM. + Enter a Recording name. This will be unique within the target JVM.
@@ -256,7 +256,7 @@ Array [ className="pf-c-form__helper-text pf-m-success" id="recording-duration-helper" > - Time before the recording is automatically stopped and copied to archive. + Time before the Recording is automatically stopped and copied to archive. @@ -314,7 +314,7 @@ Array [ - The Event Template to be applied in this recording + The Event Template to be applied in this Recording @@ -581,7 +581,7 @@ Array [ className="pf-c-form__helper-text" id="To disk-helper" > - Write contents of buffer onto disk. If disabled, the buffer acts as circular buffer only keeping the most recent recording information + Write contents of buffer onto disk. If disabled, the buffer acts as circular buffer only keeping the most recent Recording information @@ -676,7 +676,7 @@ Array [ className="pf-c-form__helper-text" id="maxSize-helper" > - The maximum size of recording data saved to disk + The maximum size of Recording data saved to disk @@ -771,7 +771,7 @@ Array [ className="pf-c-form__helper-text" id="maxAge-helper" > - The maximum age of recording data stored to disk + The maximum age of Recording data stored to disk diff --git a/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap b/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap index b442a73bd..aa3ed3c79 100644 --- a/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap +++ b/src/test/CreateRecording/__snapshots__/SnapshotRecordingForm.test.tsx.snap @@ -16,7 +16,7 @@ exports[` renders correctly 1`] = ` other,  non-Snapshot - recordings. Snapshots do not themselves define which events are enabled, their thresholds, or any other options. A Snapshot is only ever in the STOPPED state from the moment it is created. + Recordings. Snapshots do not themselves define which events are enabled, their thresholds, or any other options. A Snapshot is only ever in the STOPPED state from the moment it is created.

', () => { expect(screen.queryByLabelText(testT('AutomatedAnalysisCard.TOOLBAR.LABEL'))).not.toBeInTheDocument(); // Toolbar }); - it('renders empty recordings error view and creates recording when clicked', async () => { + it('renders empty Recordings error view and creates Recording when clicked', async () => { jest.spyOn(defaultServices.api, 'graphql').mockReturnValueOnce(of(mockEmptyActiveRecordingsResponse)); jest.spyOn(defaultServices.reports, 'getCachedAnalysisReport').mockReturnValueOnce(mockEmptyCachedReport); jest.spyOn(defaultServices.api, 'graphql').mockReturnValueOnce(of(mockEmptyArchivedRecordingsResponse)); @@ -291,7 +291,7 @@ describe('', () => { ); }); - it('renders active recording analysis', async () => { + it('renders Active Recording analysis', async () => { jest.spyOn(defaultServices.api, 'graphql').mockReturnValueOnce(of(mockActiveRecordingsResponse)); jest.spyOn(defaultServices.reports, 'reportJson').mockReturnValueOnce(of(mockEvaluations)); @@ -345,7 +345,7 @@ describe('', () => { }); }); - it('renders archived recording analysis', async () => { + it('renders Archived Recording analysis', async () => { const mockCurrentDate = new Date('14 Sep 2022 00:00:00 UTC'); jest.useFakeTimers('modern').setSystemTime(mockCurrentDate); jest.spyOn(defaultServices.api, 'graphql').mockReturnValueOnce(of(mockEmptyActiveRecordingsResponse)); @@ -405,7 +405,7 @@ describe('', () => { }); }); - it('renders cached recording analysis', async () => { + it('renders cached Recording analysis', async () => { const mockCurrentDate = new Date('15 Sep 2022 00:00:00 UTC'); // 2 days after the cached recording jest.useFakeTimers('modern').setSystemTime(mockCurrentDate); jest.spyOn(defaultServices.api, 'graphql').mockReturnValueOnce(of(mockEmptyActiveRecordingsResponse)); diff --git a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx index 7a452bc80..f37d056bd 100644 --- a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx +++ b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.test.tsx @@ -64,7 +64,7 @@ describe('', () => { expect(screen.getByText(/drawer content/i)).toBeInTheDocument(); const createRecording = screen.queryByRole('button', { - name: /create recording/i, + name: /create Recording/i, }); const recordingActions = screen.queryByRole('button', { name: /open settings/i, @@ -101,7 +101,7 @@ describe('', () => { expect(screen.getByText(/automatedanalysisconfigform/i)).toBeInTheDocument(); }); - it('creates a recording when Create Recording is clicked', async () => { + it('creates a Recording when Create Recording is clicked', async () => { const onCreateFunction = jest.fn(); const requestSpy = jest.spyOn(defaultServices.api, 'createRecording'); const { user } = render({ @@ -123,7 +123,7 @@ describe('', () => { }); const createRecording = screen.getByRole('button', { - name: /create recording/i, + name: /create Recording/i, }); expect(screen.queryByText(/automatedanalysisconfigform/i)).not.toBeInTheDocument(); diff --git a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx index 03465ed6b..fdab0de14 100644 --- a/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx +++ b/src/test/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.test.tsx @@ -96,7 +96,7 @@ describe('', () => { }, }); - expect(screen.getByText(/profiling recording configuration/i)).toBeInTheDocument(); // Form title + expect(screen.getByText(/profiling Recording configuration/i)).toBeInTheDocument(); // Form title await user.click( screen.getByRole('button', { @@ -107,11 +107,11 @@ describe('', () => { const templateSelect = screen.getByLabelText('Template *'); // Template select expect(templateSelect).toBeInTheDocument(); expect(templateSelect).toBeVisible(); - expect(screen.getByText(/The Event Template to be applied to automated analysis recordings./i)).toBeInTheDocument(); + expect(screen.getByText(/The Event Template to be applied to automated analysis Recordings./i)).toBeInTheDocument(); - expect(screen.getByText(/the maximum size of recording data saved to disk./i)).toBeInTheDocument(); + expect(screen.getByText(/the maximum size of Recording data saved to disk./i)).toBeInTheDocument(); - expect(screen.getByText(/the maximum age of recording data stored to disk./i)).toBeInTheDocument(); + expect(screen.getByText(/the maximum age of Recording data stored to disk./i)).toBeInTheDocument(); }); it('renders editing settings view correctly', async () => { @@ -121,18 +121,18 @@ describe('', () => { }, }); - expect(screen.queryByText(/profiling recording configuration/i)).not.toBeInTheDocument(); // Form title + expect(screen.queryByText(/profiling Recording configuration/i)).not.toBeInTheDocument(); // Form title await user.click(screen.getByLabelText('Edit')); // Edit button const templateSelect = screen.getByLabelText('Template *'); // Template select expect(templateSelect).toBeInTheDocument(); expect(templateSelect).toBeVisible(); - expect(screen.getByText(/The Event Template to be applied to automated analysis recordings./i)).toBeInTheDocument(); + expect(screen.getByText(/The Event Template to be applied to automated analysis Recordings./i)).toBeInTheDocument(); - expect(screen.getByText(/the maximum size of recording data saved to disk./i)).toBeInTheDocument(); + expect(screen.getByText(/the maximum size of Recording data saved to disk./i)).toBeInTheDocument(); - expect(screen.getByText(/the maximum age of recording data stored to disk./i)).toBeInTheDocument(); + expect(screen.getByText(/the maximum age of Recording data stored to disk./i)).toBeInTheDocument(); }); it('saves configuration', async () => { diff --git a/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap b/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap index 9a08e0ea2..353610bef 100644 --- a/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap +++ b/src/test/Dashboard/AutomatedAnalysis/__snapshots__/AutomatedAnalysisCardList.test.tsx.snap @@ -8,7 +8,7 @@ exports[` renders correctly 1`] = ` className="automated-analysis-datalist-innerscroll pf-c-scroll-inner-wrapper" >
', () => { }); expect(screen.getByText('CPU Load (last 120s, every 10s)')).toBeInTheDocument(); - expect(screen.getByText('No source recording')).toBeInTheDocument(); + expect(screen.getByText('No source Recording')).toBeInTheDocument(); expect( - screen.getByText((s) => s.includes('Metrics cards display data taken from running flight recordings')), + screen.getByText((s) => s.includes('Metrics cards display data taken from running flight Recordings')), ).toBeInTheDocument(); expect(screen.getByRole('button', { name: /create/i })).toBeInTheDocument(); }); - it('navigates to recording creation with prefilled state when empty state button clicked', async () => { + it('navigates to Recording creation with prefilled state when empty state button clicked', async () => { jest.spyOn(mockJfrController, 'attach').mockReturnValue(of(ControllerState.NO_DATA)); const { user } = render({ diff --git a/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap b/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap index 7d3abde69..9f46b52ea 100644 --- a/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap +++ b/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap @@ -205,12 +205,12 @@ exports[` renders empty state correctly 1`] = ` data-ouia-component-type="PF4/Title" data-ouia-safe={true} > - No source recording + No source Recording
- Metrics cards display data taken from running flight recordings with the label + Metrics cards display data taken from running flight Recordings with the label @@ -220,7 +220,7 @@ exports[` renders empty state correctly 1`] = ` origin=dashboard_metrics - . No such recordings are currently available. + . No such Recordings are currently available.
', () => { expect(tree?.toJSON()).toMatchSnapshot(); }); - it('should display read-only labels from selected recordings', async () => { + it('should display read-only Labels from selected Recordings', async () => { render({ routerConfigs: { routes: [ @@ -187,7 +187,7 @@ describe('', () => { expect(editButton).not.toBeDisabled(); }); - it('should not display labels for unchecked recordings', async () => { + it('should not display Labels for unchecked Recordings', async () => { render({ routerConfigs: { routes: [ @@ -207,7 +207,7 @@ describe('', () => { expect(placeHolder).toBeVisible(); }); - it('should display editable labels form when in edit mode', async () => { + it('should display editable Labels form when in edit mode', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -250,7 +250,7 @@ describe('', () => { expect(cancelButton).toBeVisible(); }); - it('should update the target recording labels after receiving a notification', async () => { + it('should update the target Recording labels after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -271,7 +271,7 @@ describe('', () => { expect(oldLabel).toBeVisible(); }); - it('should update the archived recording labels after receiving a notification', async () => { + it('should update the Archived Recording Labels after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -292,7 +292,7 @@ describe('', () => { expect(oldLabel).toBeVisible(); }); - it('should return to read-only view when edited labels are cancelled', async () => { + it('should return to read-only view when edited Labels are cancelled', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -342,7 +342,7 @@ describe('', () => { expect(addLabelButton).not.toBeInTheDocument(); }); - it('should save target recording labels when Save is clicked', async () => { + it('should save target Recording Labels when Save is clicked', async () => { const saveRequestSpy = jest .spyOn(defaultServices.api, 'postTargetRecordingMetadata') .mockReturnValue(of([mockActiveRecording])); @@ -392,7 +392,7 @@ describe('', () => { expect(saveRequestSpy).toHaveBeenCalledTimes(1); }); - it('should save archived recording labels when Save is clicked', async () => { + it('should save Archived Recording Labels when Save is clicked', async () => { const saveRequestSpy = jest .spyOn(defaultServices.api, 'postRecordingMetadata') .mockReturnValue(of([mockArchivedRecording])); diff --git a/src/test/RecordingMetadata/LabelCell.test.tsx b/src/test/RecordingMetadata/LabelCell.test.tsx index 67fb6f9fa..24e3f4679 100644 --- a/src/test/RecordingMetadata/LabelCell.test.tsx +++ b/src/test/RecordingMetadata/LabelCell.test.tsx @@ -72,7 +72,7 @@ describe('', () => { expect(tree?.toJSON()).toMatchSnapshot(); }); - it('should display read-only labels', async () => { + it('should display read-only Labels', async () => { render({ routerConfigs: { routes: [ @@ -97,7 +97,7 @@ describe('', () => { } }); - it('should display clickable labels', async () => { + it('should display clickable Labels', async () => { render({ routerConfigs: { routes: [ diff --git a/src/test/RecordingMetadata/RecordingLabelFields.test.tsx b/src/test/RecordingMetadata/RecordingLabelFields.test.tsx index 13a48d7e3..3fbed03da 100644 --- a/src/test/RecordingMetadata/RecordingLabelFields.test.tsx +++ b/src/test/RecordingMetadata/RecordingLabelFields.test.tsx @@ -82,7 +82,7 @@ describe('', () => { expect(tree).toMatchSnapshot(); }); - it('displays all labels in form fields', async () => { + it('displays all Labels in form fields', async () => { render({ routerConfigs: { routes: [ @@ -160,7 +160,7 @@ describe('', () => { expect(mockProps.labels[0].value).toBe('someEditedValue'); }); - it('validates labels on initial render', async () => { + it('validates Labels on initial render', async () => { render({ routerConfigs: { routes: [ diff --git a/src/test/Recordings/ActiveRecordingsTable.test.tsx b/src/test/Recordings/ActiveRecordingsTable.test.tsx index 9afc45bea..f3f481ad0 100644 --- a/src/test/Recordings/ActiveRecordingsTable.test.tsx +++ b/src/test/Recordings/ActiveRecordingsTable.test.tsx @@ -186,7 +186,7 @@ describe('', () => { afterEach(cleanup); - it('renders the recording table correctly', async () => { + it('renders the Recording table correctly', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -255,7 +255,7 @@ describe('', () => { expect(actionIcon).toBeVisible(); }); - it('adds a recording after receiving a notification', async () => { + it('adds a Recording after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -272,7 +272,7 @@ describe('', () => { expect(screen.getByText('anotherRecording')).toBeInTheDocument(); }); - it('updates the recording labels after receiving a notification', async () => { + it('updates the Recording labels after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -289,7 +289,7 @@ describe('', () => { expect(screen.queryByText('someLabel: someValue')).not.toBeInTheDocument(); }); - it('stops a recording after receiving a notification', async () => { + it('stops a Recording after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -306,7 +306,7 @@ describe('', () => { expect(screen.queryByText('RUNNING')).not.toBeInTheDocument(); }); - it('removes a recording after receiving a notification', async () => { + it('removes a Recording after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -360,7 +360,7 @@ describe('', () => { // expect(history.entries.map((entry) => entry.pathname)).toStrictEqual(['/recordings', '/recordings/create']); }); - it('archives the selected recording when Archive is clicked', async () => { + it('archives the selected Recording when Archive is clicked', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -384,7 +384,7 @@ describe('', () => { expect(archiveRequestSpy).toBeCalledWith('someRecording'); }); - it('stops the selected recording when Stop is clicked', async () => { + it('stops the selected Recording when Stop is clicked', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -428,7 +428,7 @@ describe('', () => { expect(screen.getByText('Edit Recording Labels')).toBeInTheDocument(); }); - it('shows a popup when Delete is clicked and then deletes the recording after clicking confirmation Delete', async () => { + it('shows a popup when Delete is clicked and then deletes the Recording after clicking confirmation Delete', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -462,7 +462,7 @@ describe('', () => { expect(dialogWarningSpy).toBeCalledWith(DeleteOrDisableWarningType.DeleteActiveRecordings, false); }); - it('deletes the recording when Delete is clicked w/o popup warning', async () => { + it('deletes the Recording when Delete is clicked w/o popup warning', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -487,7 +487,7 @@ describe('', () => { expect(deleteRequestSpy).toBeCalledWith('someRecording'); }); - it('downloads a recording when Download Recording is clicked', async () => { + it('downloads a Recording when Download Recording is clicked', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -511,7 +511,7 @@ describe('', () => { expect(downloadRequestSpy).toBeCalledWith(mockRecording); }); - it('uploads a recording to Grafana when View in Grafana is clicked', async () => { + it('uploads a Recording to Grafana when View in Grafana is clicked', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -535,7 +535,7 @@ describe('', () => { expect(grafanaUploadSpy).toBeCalledWith('someRecording'); }); - it('should show error view if failing to retrieve recordings', async () => { + it('should show error view if failing to retrieve Recordings', async () => { const subj = new Subject(); const mockTargetSvc = { target: () => of(mockTarget as Target), @@ -561,7 +561,7 @@ describe('', () => { await act(async () => subj.next()); - const failTitle = screen.getByText('Error retrieving recordings'); + const failTitle = screen.getByText('Error retrieving Recordings'); expect(failTitle).toBeInTheDocument(); expect(failTitle).toBeVisible(); diff --git a/src/test/Recordings/ArchivedRecordingsTable.test.tsx b/src/test/Recordings/ArchivedRecordingsTable.test.tsx index 056a441c2..4c220a9ea 100644 --- a/src/test/Recordings/ArchivedRecordingsTable.test.tsx +++ b/src/test/Recordings/ArchivedRecordingsTable.test.tsx @@ -238,7 +238,7 @@ describe('', () => { resize(DEFAULT_DIMENSIONS[0], DEFAULT_DIMENSIONS[1]); }); - it('renders the recording table correctly', async () => { + it('renders the Recording table correctly', async () => { render({ routerConfigs: { routes: [ @@ -305,7 +305,7 @@ describe('', () => { expect(totalSize).toBeVisible(); }); - it('adds a recording after receiving a notification', async () => { + it('adds a Recording after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -321,7 +321,7 @@ describe('', () => { expect(screen.getByText('anotherRecording')).toBeInTheDocument(); }); - it('updates the recording labels after receiving a notification', async () => { + it('updates the Recording labels after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -337,7 +337,7 @@ describe('', () => { expect(screen.queryByText('someLabel: someValue')).not.toBeInTheDocument(); }); - it('removes a recording after receiving a notification', async () => { + it('removes a Recording after receiving a notification', async () => { render({ routerConfigs: { routes: [ @@ -403,7 +403,7 @@ describe('', () => { expect(screen.getByText('Edit Recording Labels')).toBeInTheDocument(); }); - it('shows a popup when Delete is clicked and then deletes the recording after clicking confirmation Delete', async () => { + it('shows a popup when Delete is clicked and then deletes the Recording after clicking confirmation Delete', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -443,7 +443,7 @@ describe('', () => { expect(dialogWarningSpy).toBeCalledWith(DeleteOrDisableWarningType.DeleteArchivedRecordings, false); }); - it('deletes the recording when Delete is clicked w/o popup warning', async () => { + it('deletes the Recording when Delete is clicked w/o popup warning', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -475,7 +475,7 @@ describe('', () => { expect(deleteRequestSpy).toBeCalledWith(mockTarget.connectUrl, 'someRecording'); }); - it('downloads a recording when Download Recording is clicked', async () => { + it('downloads a Recording when Download Recording is clicked', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -499,7 +499,7 @@ describe('', () => { expect(downloadRequestSpy).toBeCalledWith(mockRecording); }); - it('uploads a recording to Grafana when View in Grafana is clicked', async () => { + it('uploads a Recording to Grafana when View in Grafana is clicked', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -556,7 +556,7 @@ describe('', () => { expect(uploadModal).toBeVisible(); }); - it('uploads an archived recording without labels when Submit is clicked', async () => { + it('uploads an Archived Recording without labels when Submit is clicked', async () => { const uploadSpy = jest.spyOn(defaultServices.api, 'uploadRecording').mockReturnValue(of(mockFileName)); const { user } = render({ @@ -622,7 +622,7 @@ describe('', () => { expect(closeButton).toBeVisible(); }); - it('uploads an archived recording with labels from editors when Submit is clicked', async () => { + it('uploads an Archived Recording with labels from editors when Submit is clicked', async () => { const uploadSpy = jest.spyOn(defaultServices.api, 'uploadRecording').mockReturnValue(of(mockFileName)); const { user } = render({ @@ -716,7 +716,7 @@ describe('', () => { expect(closeButton).toBeVisible(); }); - it('uploads an archived recording with labels from uploads when Submit is clicked', async () => { + it('uploads an Archived Recording with labels from uploads when Submit is clicked', async () => { const uploadSpy = jest.spyOn(defaultServices.api, 'uploadRecording').mockReturnValue(of(mockFileName)); const { user } = render({ @@ -883,7 +883,7 @@ describe('', () => { expect(invalidFileText).toBeVisible(); }); - it('should show error view if failing to retrieve recordings', async () => { + it('should show error view if failing to retrieve Recordings', async () => { jest.spyOn(defaultServices.api, 'graphql').mockImplementationOnce((_query) => { throw new Error('Something wrong'); }); @@ -900,7 +900,7 @@ describe('', () => { preloadedState: preloadedState, }); - const failTitle = screen.getByText('Error retrieving recordings'); + const failTitle = screen.getByText('Error retrieving Recordings'); expect(failTitle).toBeInTheDocument(); expect(failTitle).toBeVisible(); diff --git a/src/test/Recordings/Filters/LabelFilter.test.tsx b/src/test/Recordings/Filters/LabelFilter.test.tsx index 117a0960f..98f6f18bb 100644 --- a/src/test/Recordings/Filters/LabelFilter.test.tsx +++ b/src/test/Recordings/Filters/LabelFilter.test.tsx @@ -240,7 +240,7 @@ describe('', () => { expect(selectMenu).not.toBeVisible(); }); - it('should not display selected labels', async () => { + it('should not display selected Labels', async () => { const { user } = render({ routerConfigs: { routes: [ diff --git a/src/test/Recordings/RecordingFilters.test.tsx b/src/test/Recordings/RecordingFilters.test.tsx index 2d4370602..b87448036 100644 --- a/src/test/Recordings/RecordingFilters.test.tsx +++ b/src/test/Recordings/RecordingFilters.test.tsx @@ -144,7 +144,7 @@ describe('', () => { afterAll(jest.useRealTimers); - it('should display currently selected category for active recordings', async () => { + it('should display currently selected category for Active Recordings', async () => { render({ routerConfigs: { routes: [ @@ -178,7 +178,7 @@ describe('', () => { expect(selectedItem).toBeVisible(); }); - it('should display currently selected category for archived recordings', async () => { + it('should display currently selected category for Archived Recordings', async () => { render({ routerConfigs: { routes: [ @@ -212,7 +212,7 @@ describe('', () => { expect(selectedItem).toBeVisible(); }); - it('should display category menu for active recordings when clicked', async () => { + it('should display category menu for Active Recordings when clicked', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -259,7 +259,7 @@ describe('', () => { }); }); - it('should display category menu for archived recordings when clicked', async () => { + it('should display category menu for Archived Recordings when clicked', async () => { const { user } = render({ routerConfigs: { routes: [ diff --git a/src/test/Recordings/RecordingLabelsPanel.test.tsx b/src/test/Recordings/RecordingLabelsPanel.test.tsx index 3478435aa..c40cfe3d0 100644 --- a/src/test/Recordings/RecordingLabelsPanel.test.tsx +++ b/src/test/Recordings/RecordingLabelsPanel.test.tsx @@ -79,7 +79,7 @@ describe('', () => { expect(tree?.toJSON()).toMatchSnapshot(); }); - it('displays the bulk labels editor within the resizeable drawer panel', async () => { + it('displays the bulk Labels editor within the resizeable drawer panel', async () => { render({ routerConfigs: { routes: [ diff --git a/src/test/Rules/__snapshots__/Rules.test.tsx.snap b/src/test/Rules/__snapshots__/Rules.test.tsx.snap index 1d2c8488e..09ee3566c 100644 --- a/src/test/Rules/__snapshots__/Rules.test.tsx.snap +++ b/src/test/Rules/__snapshots__/Rules.test.tsx.snap @@ -50,7 +50,7 @@ exports[` renders correctly 1`] = `
- Automated Rules define a dynamic set of Target JVMs to connect to and start + Automated Rules define a dynamic set of target JVMs to connect to and start renders correctly 1`] = ` Event Template - when the Automated Rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in + when the Automated Rule is created and when any new matching target JVMs appear. If your target JVM connections require JMX Credentials, you can configure these in ({ - AutomatedAnalysisConfigForm: (_: any) => <>Automated analysis Configuration Form, + AutomatedAnalysisConfigForm: (_: any) => <>Automated analysis configuration form, })); jest.mock('@app/TargetView/TargetSelect', () => ({ diff --git a/src/test/Settings/Settings.test.tsx b/src/test/Settings/Settings.test.tsx index ae808aebd..91ca2996b 100644 --- a/src/test/Settings/Settings.test.tsx +++ b/src/test/Settings/Settings.test.tsx @@ -38,7 +38,7 @@ jest.mock('@app/Settings/Config/AutomatedAnalysis', () => ({ titleKey: 'SETTINGS.AUTOMATED_ANALYSIS_CONFIG.TITLE', descConstruct: 'SETTINGS.AUTOMATED_ANALYSIS_CONFIG.DESCRIPTION', category: 'SETTINGS.CATEGORIES.DASHBOARD', - content: () => Automated analysis Config Component, + content: () => Automated analysis config component, authenticated: true, } as UserSetting, })); @@ -170,7 +170,7 @@ describe('', () => { expect(dashboardTab.getAttribute('aria-selected')).toBe('true'); - const dashboardSettings = screen.queryByText('Automated analysis Config Component'); + const dashboardSettings = screen.queryByText('Automated analysis config component'); expect(dashboardSettings).not.toBeInTheDocument(); }); @@ -231,7 +231,7 @@ describe('', () => { expect(dashboardTab.getAttribute('aria-selected')).toBe('true'); - const dashboardSettings = screen.getByText('Automated analysis Config Component'); + const dashboardSettings = screen.getByText('Automated analysis config component'); expect(dashboardSettings).toBeInTheDocument(); expect(dashboardSettings).toBeVisible(); }); diff --git a/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap b/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap index 8629b4192..d0676281d 100644 --- a/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap +++ b/src/test/Settings/__snapshots__/AutomatedAnalysisConfig.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` renders correctly 1`] = `"Automated analysis Configuration Form"`; +exports[` renders correctly 1`] = `"Automated analysis configuration form"`; diff --git a/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap b/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap index cc3dd71b7..ceaf3a691 100644 --- a/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap +++ b/src/test/Settings/__snapshots__/DeletionDialogControl.test.tsx.snap @@ -372,14 +372,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="DeleteActiveProbes-on" > - Remove Active Probes + Remove active probes
diff --git a/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap b/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap index ef0599300..d03ee4c9a 100644 --- a/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap +++ b/src/test/Settings/__snapshots__/NotificationControl.test.tsx.snap @@ -844,14 +844,14 @@ exports[` renders correctly 1`] = ` className="pf-c-switch__label pf-m-on" id="ProbesRemoved-on" > - Probes removed from Target + Probes removed from target From 75529bee6246428794f1983aec020cc821b633ad Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 29 May 2024 21:37:19 -0400 Subject: [PATCH 08/13] resolve Match Expression --- .../quickstarts/automated-rules-quickstart.tsx | 10 +++++----- src/app/Rules/CreateRule.tsx | 16 ++++++++-------- src/app/Rules/Rules.tsx | 2 +- .../Credentials/CreateCredentialModal.tsx | 12 ++++++------ .../Credentials/CredentialTestTable.tsx | 2 +- .../Credentials/StoredCredentials.tsx | 4 ++-- .../MatchExpressionVisualizer.tsx | 2 +- src/app/Shared/Services/service.utils.ts | 2 +- .../Topology/Toolbar/FindByMatchExpression.tsx | 2 +- src/app/routes.tsx | 2 +- src/test/Rules/CreateRule.test.tsx | 16 ++++++++-------- 11 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx index 9cb14b4b9..e21745fce 100644 --- a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx @@ -39,7 +39,7 @@ Automated Rules are configurations that instruct [APP] to create JDK Flight Reco ### What you'll learn - How to create an automated rule in [APP] -- How to use match expressions to match one or more target JVMs +- How to use Match Expressions to match one or more target JVMs ### What you'll need @@ -65,13 +65,13 @@ Automated Rules are configurations that instruct [APP] to create JDK Flight Reco description: ` To create a new rule, use the Automated Rule creation form to fill in the required fields. -The [Match expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the match expression: \`true\`{{copy}}. You can also match targets more specifically with a match expression like \`target.annotations.cryostat['PORT'] == 9091\`{{copy}}, which will match targets that are connected to [APP] on port 9091. +The [Match Expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the Match Expression: \`true\`{{copy}}. You can also match targets more specifically with a Match Expression like \`target.annotations.cryostat['PORT'] == 9091\`{{copy}}, which will match targets that are connected to [APP] on port 9091. To create a new rule, you must fill out the following required fields: 1. Enter a name for the rule in the [Name]{{highlight rule-name}} field. -2. Enter an expression in the [Match expression]{{highlight rule-matchexpr}} field. To see an example match expression, click the [match hint]{{highlight rule-matchexpr-help}}. -[Use the [Match expression visualizer]{{highlight match-expr-card}} to test your match expression against the target JVMs currently discovered by [APP]. Any matched targets will appear unfaded in the Graph view and will be listed in the List view.]{{admonition tip}} +2. Enter an expression in the [Match Expression]{{highlight rule-matchexpr}} field. To see an example Match Expression, click the [match hint]{{highlight rule-matchexpr-help}}. +[Use the [Match Expression visualizer]{{highlight match-expr-card}} to test your Match Expression against the target JVMs currently discovered by [APP]. Any matched targets will appear unfaded in the Graph view and will be listed in the List view.]{{admonition tip}} 3. Select an [Event Template]{{highlight rule-evt-template}}. @@ -103,7 +103,7 @@ The Recording should be named according to the rule-name format, such as \`auto_ instructions: '#### Verify that you see the new Recording with the correct Automated Rule Recording naming scheme in the list of Recordings.', failedTaskHelp: - 'If you do not see the new Recording, go back to the Rule Creation form, and try verifying that your rule match expression correctly matches the intended target JVMs in this task.', + 'If you do not see the new Recording, go back to the Rule Creation form, and try verifying that your rule Match Expression correctly matches the intended target JVMs in this task.', }, }, ], diff --git a/src/app/Rules/CreateRule.tsx b/src/app/Rules/CreateRule.tsx index 89f139824..36d95ece3 100644 --- a/src/app/Rules/CreateRule.tsx +++ b/src/app/Rules/CreateRule.tsx @@ -74,7 +74,7 @@ export const CreateRuleForm: React.FC = (_props) => { nameValid: ValidatedOptions.default, enabled: true, description: '', - matchExpression: '', // Use this for displaying match expression input + matchExpression: '', // Use this for displaying Match Expression input matchExpressionValid: ValidatedOptions.default, maxAge: 0, maxAgeUnit: 1, @@ -386,11 +386,11 @@ export const CreateRuleForm: React.FC = (_props) => { /> Try an expression like: @@ -401,7 +401,7 @@ export const CreateRuleForm: React.FC = (_props) => { >
{title} diff --git a/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx b/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx index 34ad312ef..4b8945801 100644 --- a/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx +++ b/src/app/Shared/Components/MatchExpression/MatchExpressionVisualizer.tsx @@ -353,7 +353,7 @@ const ListView: React.FC<{ alertOptions?: AlertOptions }> = ({ alertOptions, ... {`${ matchedExpr === '' ? 'Enter another' : 'Clear' - } Match expression and try again.`} + } Match Expression and try again.`} diff --git a/src/app/Shared/Services/service.utils.ts b/src/app/Shared/Services/service.utils.ts index a7b1c3b44..40fa88ce1 100644 --- a/src/app/Shared/Services/service.utils.ts +++ b/src/app/Shared/Services/service.utils.ts @@ -21,7 +21,7 @@ import { MatchExpressionService } from './MatchExpression.service'; import { AutomatedAnalysisRecordingConfig, ChartControllerConfig } from './service.types'; // ====================================== -// Match expression +// Match Expression // ====================================== export const SearchExprServiceContext = React.createContext(new MatchExpressionService()); diff --git a/src/app/Topology/Toolbar/FindByMatchExpression.tsx b/src/app/Topology/Toolbar/FindByMatchExpression.tsx index 80cf6900b..3307ef17e 100644 --- a/src/app/Topology/Toolbar/FindByMatchExpression.tsx +++ b/src/app/Topology/Toolbar/FindByMatchExpression.tsx @@ -28,7 +28,7 @@ export const FindByMatchExpression: React.FC = ({ is return ( { setExpression(input); diff --git a/src/app/routes.tsx b/src/app/routes.tsx index 85ed2b4b4..e6291131d 100644 --- a/src/app/routes.tsx +++ b/src/app/routes.tsx @@ -109,7 +109,7 @@ const routes: IAppRoute[] = [ path: '/rules', title: 'Automated Rules', description: - 'Create Recordings on multiple target JVMs at once using Automated Rules consisting of a name, match expression, template, archival period, and more.', + 'Create Recordings on multiple target JVMs at once using Automated Rules consisting of a name, Match Expression, template, archival period, and more.', navGroup: CONSOLE, children: [ { diff --git a/src/test/Rules/CreateRule.test.tsx b/src/test/Rules/CreateRule.test.tsx index ffb1befa1..f3eaeb633 100644 --- a/src/test/Rules/CreateRule.test.tsx +++ b/src/test/Rules/CreateRule.test.tsx @@ -23,7 +23,7 @@ import { of, throwError } from 'rxjs'; import { escapeKeyboardInput, render } from '../utils'; jest.mock('@app/Shared/Components/MatchExpression/MatchExpressionVisualizer', () => ({ - MatchExpressionVisualizer: () => <>Match expression visualizer, + MatchExpressionVisualizer: () => <>Match Expression visualizer, })); const mockConnectUrl = 'service:jmx:rmi://someUrl'; @@ -112,7 +112,7 @@ describe('', () => { expect(nameHelperText).toBeVisible(); }); - it('should show error helper text when match expression input is invalid', async () => { + it('should show error helper text when Match Expression input is invalid', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -127,7 +127,7 @@ describe('', () => { ], }, }); - const matchExpressionInput = screen.getByLabelText('Match expression *'); + const matchExpressionInput = screen.getByLabelText('Match Expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); @@ -138,7 +138,7 @@ describe('', () => { expect(exphelperText).toBeVisible(); }); - it('should show warning text when match expression matches no target', async () => { + it('should show warning text when Match Expression matches no target', async () => { const { user } = render({ routerConfigs: { routes: [ @@ -153,13 +153,13 @@ describe('', () => { ], }, }); - const matchExpressionInput = screen.getByLabelText('Match expression *'); + const matchExpressionInput = screen.getByLabelText('Match Expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); await user.type(matchExpressionInput, 'false'); - const exphelperText = await screen.findByText('Warning: Match expression matches no targets.'); + const exphelperText = await screen.findByText('Warning: Match Expression matches no targets.'); expect(exphelperText).toBeInTheDocument(); expect(exphelperText).toBeVisible(); }); @@ -179,7 +179,7 @@ describe('', () => { ], }, }); - const matchExpressionInput = screen.getByLabelText('Match expression *'); + const matchExpressionInput = screen.getByLabelText('Match Expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); @@ -230,7 +230,7 @@ describe('', () => { expect(descriptionInput).toBeInTheDocument(); expect(descriptionInput).toBeVisible(); - const matchExpressionInput = screen.getByLabelText('Match expression *'); + const matchExpressionInput = screen.getByLabelText('Match Expression *'); expect(matchExpressionInput).toBeInTheDocument(); expect(matchExpressionInput).toBeVisible(); From 0bfe46b657a6e9f8a4e5115fe4920c0468b448b5 Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 29 May 2024 21:47:11 -0400 Subject: [PATCH 09/13] resolve test failures --- src/app/Dashboard/LayoutTemplatePicker.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/Dashboard/LayoutTemplatePicker.tsx b/src/app/Dashboard/LayoutTemplatePicker.tsx index 88423c1cd..c149a7d9a 100644 --- a/src/app/Dashboard/LayoutTemplatePicker.tsx +++ b/src/app/Dashboard/LayoutTemplatePicker.tsx @@ -84,7 +84,7 @@ import { getCardDescriptorByName, hasCardDescriptorByName, LayoutTemplateContext, - recordToLayoutTemplate,S + recordToLayoutTemplate, } from './utils'; export enum LayoutTemplateSort { From 8a76474627aebeb557940e9d8e2be95f0161889a Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 29 May 2024 21:54:09 -0400 Subject: [PATCH 10/13] resolve Stored Credentials --- src/app/SecurityPanel/Credentials/CreateCredentialModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/SecurityPanel/Credentials/CreateCredentialModal.tsx b/src/app/SecurityPanel/Credentials/CreateCredentialModal.tsx index 188aeac56..8b8a94c9d 100644 --- a/src/app/SecurityPanel/Credentials/CreateCredentialModal.tsx +++ b/src/app/SecurityPanel/Credentials/CreateCredentialModal.tsx @@ -81,7 +81,7 @@ export const CreateCredentialModal: React.FC = ({ className="add-credential-modal" onClose={onDismiss} title="Store Credentials" - description="Create stored credentials for target JVMs. Cryostat will use these credentials to connect to Cryostat agents or target JVMs over JMX (if required)." + description="Create Stored Credentials for target JVMs. Cryostat will use these credentials to connect to Cryostat agents or target JVMs over JMX (if required)." > From 50d945db6aa599e6e2bd6f2d724dfb4002f141ee Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Fri, 31 May 2024 13:53:56 -0400 Subject: [PATCH 11/13] resolve issues --- locales/en/public.json | 8 ++++---- src/app/AppLayout/AuthModal.tsx | 2 +- src/app/AppLayout/SslErrorModal.tsx | 4 ++-- src/app/CreateRecording/CustomRecordingForm.tsx | 4 ++-- src/app/Dashboard/LayoutTemplateUploadModal.tsx | 2 +- src/app/Events/EventTypes.tsx | 6 +++--- src/app/Events/Events.tsx | 4 ++-- src/app/Joyride/CryostatJoyride.tsx | 10 +++++----- .../quickstarts/automated-rules-quickstart.tsx | 12 ++++++------ .../quickstarts/dashboard-quickstart.tsx | 4 ++-- .../quickstarts/settings-quickstart.tsx | 6 +++--- .../quickstarts/start-a-recording.tsx | 16 ++++++++-------- .../topology/custom-target-quickstart.tsx | 6 +++--- .../topology/group-start-recordings.tsx | 4 ++-- src/app/Rules/CreateRule.tsx | 2 +- src/app/Rules/Rules.tsx | 6 +++--- src/app/Rules/RulesUploadModal.tsx | 2 +- src/app/SecurityPanel/ImportCertificate.tsx | 4 ++-- src/app/Shared/Components/JmxSslDescription.tsx | 2 +- src/app/Shared/Services/Api.service.tsx | 2 +- src/app/Topology/Actions/CreateTarget.tsx | 4 ++-- .../Actions/quicksearches/custom-target.tsx | 2 +- src/app/Topology/Entity/EntityAnnotations.tsx | 2 +- src/app/Topology/Shared/utils.tsx | 6 +++--- src/app/build.json | 2 +- src/app/routes.tsx | 2 +- src/mirage/index.ts | 12 ++++++------ .../CustomRecordingForm.test.tsx.snap | 4 ++-- .../Charts/jfr/JFRMetricsChartCard.test.tsx | 2 +- .../JFRMetricsChartCard.test.tsx.snap | 2 +- src/test/Events/EventTypes.test.tsx | 6 +++--- .../__snapshots__/EventTypes.test.tsx.snap | 2 +- src/test/Rules/__snapshots__/Rules.test.tsx.snap | 2 +- 33 files changed, 77 insertions(+), 77 deletions(-) diff --git a/locales/en/public.json b/locales/en/public.json index fe20ce071..d03e4adc4 100644 --- a/locales/en/public.json +++ b/locales/en/public.json @@ -108,13 +108,13 @@ } }, "JFR_METRICS_CARD_DESCRIPTION": "Display common performance metrics from recent JFR data.", - "JFR_METRICS_CARD_DESCRIPTION_FULL": "Display a single performance metric from a list of supported JFR Event Types. Data is displayed from the present moment back to a specified duration. Note: these metrics are only available for a single target at a time. Second Cryostat-Web instances, for the same user or others, will not behave as expected when using this card type.", + "JFR_METRICS_CARD_DESCRIPTION_FULL": "Display a single performance metric from a list of supported JFR event types. Data is displayed from the present moment back to a specified duration. Note: these metrics are only available for a single target at a time. Second Cryostat-Web instances, for the same user or others, will not behave as expected when using this card type.", "JFR_METRICS_CARD_TITLE": "JFR Metrics Chart", "MBEAN_METRICS_CARD_DESCRIPTION": "Display common performance metrics from current MBean data.", "MBEAN_METRICS_CARD_DESCRIPTION_FULL": "Display a single performance metric from a list of supported MBeans.", "MBEAN_METRICS_CARD_TITLE": "MBean Metrics Chart", "NO_RECORDING": { - "DESCRIPTION": "Metrics cards display data taken from running flight Recordings with the label . No such Recordings are currently available.", + "DESCRIPTION": "Metrics cards display data taken from running Flight Recordings with the label . No such Recordings are currently available.", "TITLE": "No source Recording" }, "PROP_CONTROLS": { @@ -239,8 +239,8 @@ "EVENT_TEMPLATES": "Error retrieving Event Templates" }, "JvmDetailsCard": { - "CARD_DESCRIPTION": "Display details about the selected target JVM.", - "CARD_DESCRIPTION_FULL": "View information such as the connection URL, Labels, and annotations belonging to the selected target JVM.", + "CARD_DESCRIPTION": "Display details about the selected Target JVM.", + "CARD_DESCRIPTION_FULL": "View information such as the connection URL, Labels, and Annotations belonging to the selected Target JVM.", "CARD_TITLE": "Target JVM details" }, "LayoutTemplateGroup": { diff --git a/src/app/AppLayout/AuthModal.tsx b/src/app/AppLayout/AuthModal.tsx index a7790ac18..6b32f05d4 100644 --- a/src/app/AppLayout/AuthModal.tsx +++ b/src/app/AppLayout/AuthModal.tsx @@ -67,7 +67,7 @@ export const AuthModal: React.FC = ({ onDismiss, onSave: onProps title="Authentication Required" description={ - This target JVM requires authentication. The credentials you provide here will be passed from Cryostat to the + This Target JVM requires authentication. The credentials you provide here will be passed from Cryostat to the target when establishing JMX connections. Enter credentials specific to this target, or go to{' '} Security diff --git a/src/app/AppLayout/SslErrorModal.tsx b/src/app/AppLayout/SslErrorModal.tsx index 747515ad7..7af75a21c 100644 --- a/src/app/AppLayout/SslErrorModal.tsx +++ b/src/app/AppLayout/SslErrorModal.tsx @@ -38,8 +38,8 @@ export const SslErrorModal: React.FC = ({ visible, onDismiss variant={ModalVariant.medium} showClose={true} onClose={onDismiss} - title="SSL error" - description="The connection failed because the SSL Certificate for the target is not trusted." + title="SSL/TLS error" + description="The connection failed because the SSL/TLS Certificate for the target is not trusted." > To view the trusted application certificates, go to   diff --git a/src/app/CreateRecording/CustomRecordingForm.tsx b/src/app/CreateRecording/CustomRecordingForm.tsx index 4d6d1e04f..f09faec1e 100644 --- a/src/app/CreateRecording/CustomRecordingForm.tsx +++ b/src/app/CreateRecording/CustomRecordingForm.tsx @@ -402,7 +402,7 @@ export const CustomRecordingForm: React.FC = () => { return ( <> - JDK Flight Recordings are compact records of events which have occurred within the target JVM. Many Event Types + JDK Flight Recordings are compact records of events which have occurred within the Target JVM. Many event types are built in to the JVM itself, while others are user defined. @@ -410,7 +410,7 @@ export const CustomRecordingForm: React.FC = () => { label="Name" isRequired fieldId="recording-name" - helperText="Enter a Recording name. This will be unique within the target JVM." + helperText="Enter a Recording name. This will be unique within the Target JVM." helperTextInvalid="A Recording name can contain only letters, numbers, and underscores." validated={formData.nameValid} > diff --git a/src/app/Dashboard/LayoutTemplateUploadModal.tsx b/src/app/Dashboard/LayoutTemplateUploadModal.tsx index af247ad8e..1a43a2714 100644 --- a/src/app/Dashboard/LayoutTemplateUploadModal.tsx +++ b/src/app/Dashboard/LayoutTemplateUploadModal.tsx @@ -162,7 +162,7 @@ export const LayoutTemplateUploadModal: React.FC onSingleSuccess( fileUpload.file.name, - Warning: To see this template in the template picker, make sure the Cryostat Feature level is set + Warning: To see this template in the template picker, make sure the Cryostat feature level is set to BETA. , ); diff --git a/src/app/Events/EventTypes.tsx b/src/app/Events/EventTypes.tsx index ef68db7b6..643c1c06a 100644 --- a/src/app/Events/EventTypes.tsx +++ b/src/app/Events/EventTypes.tsx @@ -255,7 +255,7 @@ export const EventTypes: React.FC = (_) => { if (errorMessage != '') { return ( @@ -292,7 +292,7 @@ export const EventTypes: React.FC = (_) => { {typeRowPairs.length ? ( // TODO replace table with data list so collapsed event options can be custom formatted - +
@@ -309,7 +309,7 @@ export const EventTypes: React.FC = (_) => { - No Event Types + No event types )} diff --git a/src/app/Events/Events.tsx b/src/app/Events/Events.tsx index 59869e85e..becafb564 100644 --- a/src/app/Events/Events.tsx +++ b/src/app/Events/Events.tsx @@ -75,7 +75,7 @@ export const EventTabs: React.FC = () => { - + @@ -129,7 +129,7 @@ export const AgentTabs: React.FC = () => { isAriaDisabled={!agentDetected} tooltip={ agentDetected ? undefined : ( - + ) } > diff --git a/src/app/Joyride/CryostatJoyride.tsx b/src/app/Joyride/CryostatJoyride.tsx index 471b9f905..542cc48e5 100644 --- a/src/app/Joyride/CryostatJoyride.tsx +++ b/src/app/Joyride/CryostatJoyride.tsx @@ -84,7 +84,7 @@ const CryostatJoyride: React.FC = ({ children }) => { content: (

- The Dashboard provides a high-level overview of Cryostat and the target JVM with the + The Dashboard provides a high-level overview of Cryostat and the Target JVM with the use of Dashboard Cards.


@@ -123,7 +123,7 @@ const CryostatJoyride: React.FC = ({ children }) => { content: (

The Recordings view provides a list of all active Recordings that are currently being - recorded on the target JVM. Start, stop, download, delete Recordings from this view. + recorded on the Target JVM. Start, stop, download, delete Recordings from this view.

), target: '*[data-tour-id="recordings"]', @@ -145,8 +145,8 @@ const CryostatJoyride: React.FC = ({ children }) => { content: (

The Events page lists the Event Templates that can be used for creating - Flight Recordings. It also details the JFR Event Types that can be recorded within each - target JVM. + Flight Recordings. It also details the JFR event types that can be recorded within each + Target JVM.

), target: '*[data-tour-id="events"]', @@ -157,7 +157,7 @@ const CryostatJoyride: React.FC = ({ children }) => { content: (

The Security tab allows you to add Credentials and{' '} - SSL Certificates for Cryostat to use when connecting to remote targets. + SSL/TLS Certificates for Cryostat to use when connecting to remote targets.

), target: '*[data-tour-id="security"]', diff --git a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx index e21745fce..013ff889d 100644 --- a/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx @@ -34,7 +34,7 @@ const AutomatedRulesQuickStart: QuickStart = { prerequisites: ['Start a Recording'], introduction: ` ## Automated Rules -Automated Rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application Recording buffer, and how frequently [APP] should copy the application Recording buffer into [APP]'s own archived storage. +Automated Rules are configurations that instruct [APP] to create JDK Flight Recordings on matching Target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application Recording buffer, and how frequently [APP] should copy the application Recording buffer into [APP]'s own archived storage. ### What you'll learn @@ -43,8 +43,8 @@ Automated Rules are configurations that instruct [APP] to create JDK Flight Reco ### What you'll need -- A running instance of [APP] which has discovered at least one target JVM -- JMX auth credentials for the target JVM (if required) +- A running instance of [APP] which has discovered at least one Target JVM +- JMX auth credentials for the Target JVM (if required) `, tasks: [ @@ -65,7 +65,7 @@ Automated Rules are configurations that instruct [APP] to create JDK Flight Reco description: ` To create a new rule, use the Automated Rule creation form to fill in the required fields. -The [Match Expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the Match Expression: \`true\`{{copy}}. You can also match targets more specifically with a Match Expression like \`target.annotations.cryostat['PORT'] == 9091\`{{copy}}, which will match targets that are connected to [APP] on port 9091. +The [Match Expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each Target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the Match Expression: \`true\`{{copy}}. You can also match targets more specifically with a Match Expression like \`target.annotations.cryostat['PORT'] == 9091\`{{copy}}, which will match targets that are connected to [APP] on port 9091. To create a new rule, you must fill out the following required fields: @@ -91,9 +91,9 @@ To create a new rule, you must fill out the following required fields: description: ` The rule that was created will have started a new Recording on any matched target JVMs. 1. In the [APP] console navigation bar, click [Recordings]{{highlight nav-recordings-tab}}. -2. Click the [Target Selector]{{highlight target-select}} dropdown menu and select a target JVM that was matched from the created automated rule, if not already selected. +2. Click the [Target Selector]{{highlight target-select}} dropdown menu and select a Target JVM that was matched from the created automated rule, if not already selected. -There should now be a new Recording in the list of Active Recordings on the selected target JVM. +There should now be a new Recording in the list of Active Recordings on the selected Target JVM. The Recording should be named according to the rule-name format, such as \`auto_\`. diff --git a/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx b/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx index 9a735db41..d50f6b77e 100644 --- a/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx @@ -53,7 +53,7 @@ Dashboard Cards are displayed in **Dashboard Layouts**, which can be customized title: 'Go to the Dashboard page', description: ` 1. In the [APP] console navigation bar, click [Dashboard]{{highlight nav-dashboard-tab}}. -2. From the [Target Selector]{{highlight target-select}}, select a target JVM. +2. From the [Target Selector]{{highlight target-select}}, select a Target JVM. `, review: { instructions: '#### Verify that you see the Dashboard page.', @@ -90,7 +90,7 @@ The following Dashboard Cards are available: - **JFR Metrics Chart (BETA)** - **MBean Metrics Chart** -Each card displays a different set of information about the currently selected target JVM, such as the heap usage, thread statistics, JVM vendor, and more. +Each card displays a different set of information about the currently selected Target JVM, such as the heap usage, thread statistics, JVM vendor, and more. [Learn more about each Dashboard Card in the [Cryostat documentation](${build.dashboardGuideUrl}).]{{admonition tip}} diff --git a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx index 8d328f9ee..e616fc416 100644 --- a/src/app/QuickStarts/quickstarts/settings-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/settings-quickstart.tsx @@ -91,7 +91,7 @@ The **automated analysis** Dashboard Card allows you to automatically start an a 2. Configure the **Automated analysis Recording configuration** settings. 3. Configure the **Dashboard metrics configuration** settings. -[When using the **Automated analysis card**, make sure the **Event Template** is compatible with the target JVM.]{{admonition warning}} +[When using the **automated analysis card**, make sure the **Event Template** is compatible with the Target JVM.]{{admonition warning}} [Setting both an infinite maximum size and age may result in an **Out Of Memory** error during report generation.]{{admonition caution}} `, }, @@ -104,9 +104,9 @@ The **automated analysis** Dashboard Card allows you to automatically start an a 2. Configure the **Credentials Storage** settings. Credentials are necessary to authenticate with the target JVMs that [APP] communicates with, if JMX auth is enabled or if a [APP] agent authenticated connection is required. If you prefer not to store these credentials in the [APP] backend, you can opt to store them in local session storage instead. -3. Configure the **Feature level** settings. +3. Configure the **feature level** settings. - The **Feature level** setting enables you to enable or disable beta features. + The **feature level** setting enables you to enable or disable beta features. `, }, diff --git a/src/app/QuickStarts/quickstarts/start-a-recording.tsx b/src/app/QuickStarts/quickstarts/start-a-recording.tsx index 0ad639475..f16225189 100644 --- a/src/app/QuickStarts/quickstarts/start-a-recording.tsx +++ b/src/app/QuickStarts/quickstarts/start-a-recording.tsx @@ -35,18 +35,18 @@ const RecordingQuickStart: QuickStart = { prerequisites: [''], introduction: ` ## Start a Recording -**Java Flight Recorder (JFR)** is a profiling tool that is built into the JVM. It allows you to record events that happen in the JVM and then analyze the Recording to find performance issues. [APP] leverages JFR to provide a simple way to start, stop, and download Recordings from a containerized target JVM. +**Java Flight Recorder (JFR)** is a profiling tool that is built into the JVM. It allows you to record events that happen in the JVM and then analyze the Recording to find performance issues. [APP] leverages JFR to provide a simple way to start, stop, and download Recordings from a containerized Target JVM. ### What you'll learn -- How to start/stop a JFR Recording on a target JVM +- How to start/stop a JFR Recording on a Target JVM - How to download a Recording from [APP] to your local machine - How to view an automated analysis report of a Recording with [APP]'s capabilities ### What you'll need -- A running instance of [APP] which has discovered at least one target JVM -- JMX auth credentials for the target JVM (if required) +- A running instance of [APP] which has discovered at least one Target JVM +- JMX auth credentials for the Target JVM (if required) `, tasks: [ @@ -60,9 +60,9 @@ const RecordingQuickStart: QuickStart = { }, }, { - title: 'Select a target JVM', + title: 'Select a Target JVM', description: ` -Select a target JVM from the list of available targets that [APP] has discovered. +Select a Target JVM from the list of available targets that [APP] has discovered. 1. Click the [Target Select]{{highlight target-select}} dropdown menu. 2. Select a target from the list of available targets. @@ -81,7 +81,7 @@ There are two tabs within the Recordings page: [Active Recordings]{{highlight active-recordings-tab}} and [Archived Recordings]{{highlight archived-recordings-tab}}. -**Active Recordings** are Recordings that only exist only within the target JVM. **Archived Recordings** are Recordings that have been saved from the target JVM and copied to [APP]'s storage volume. +**Active Recordings** are Recordings that only exist only within the Target JVM. **Archived Recordings** are Recordings that have been saved from the Target JVM and copied to [APP]'s storage volume. To start an active Recording: @@ -142,7 +142,7 @@ Downloading a Recording will save the Recording to your local machine as a JFR f { title: 'Archive a Recording', description: ` -Archiving a Recording will save the Recording to [APP]'s archival storage, and will persist even after either the target JVM, or [APP], has stopped. These Recordings will appear in the target JVM's **Archived Recordings** tab, as well as in the [Archives]{{highlight nav-archives-tab}} view on the [APP] console navigation bar. +Archiving a Recording will save the Recording to [APP]'s archival storage, and will persist even after either the Target JVM, or [APP], has stopped. These Recordings will appear in the Target JVM's **Archived Recordings** tab, as well as in the [Archives]{{highlight nav-archives-tab}} view on the [APP] console navigation bar. 1. Click [Archive]{{highlight recordings-archive-btn}} to archive the Recording. 2. To view the Archived Recording in [APP]'s storage, go to the [Archived Recordings]{{highlight archived-recordings-tab}} tab. diff --git a/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx b/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx index ef6206d2b..043812bfe 100644 --- a/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx @@ -40,7 +40,7 @@ However, in some cases (e.g. for **Kubernetes API**, JMX port is not 9091< ### What you'll need - A Java application that Cryostat cannot automatically discover -- The connection URL and JMX credentials, if required, for that application +- The connection URL and JMX Credentials, if required, for that application `, tasks: [ { @@ -75,13 +75,13 @@ However, in some cases (e.g. for **Kubernetes API**, JMX port is not 9091< description: ` 1. Enter the JMX **Connection URL** for the target into the [Connection URL]{{highlight ct-connecturl-input}} field. 2. Optionally assign an **Alias** to the target by using the [Alias]{{highlight ct-alias-input}} field. -3. If the target has **JMX authentication** enabled, click the [JMX credential option]{{highlight ct-credential-expand}} to expand the form. +3. If the target has **JMX authentication** enabled, click the [JMX Credential option]{{highlight ct-credential-expand}} to expand the form. 4. Use the [Username]{{highlight ct-username-input}} and [Password]{{highlight ct-password-input}} fields to enter the username and password. `, review: { instructions: '#### Verify that you have filled out the form.', failedTaskHelp: - 'Click the [JMX credential option]{{highlight ct-credential-expand}} to expand the form to reveal the username and password fields.', + 'Click the [JMX Credential option]{{highlight ct-credential-expand}} to expand the form to reveal the username and password fields.', }, }, { diff --git a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx index aa8aec7ed..78ca22ef0 100644 --- a/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx +++ b/src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx @@ -41,8 +41,8 @@ With **Topology** view, you can perform actions (i.e. start Recording) on an ind ### What you'll need -- A running instance of Cryostat which has discovered at least one target JVM -- JMX auth credentials for the target JVM (if required) +- A running instance of Cryostat which has discovered at least one Target JVM +- JMX auth credentials for the Target JVM (if required) `, tasks: [ { diff --git a/src/app/Rules/CreateRule.tsx b/src/app/Rules/CreateRule.tsx index 36d95ece3..13d826ec9 100644 --- a/src/app/Rules/CreateRule.tsx +++ b/src/app/Rules/CreateRule.tsx @@ -343,7 +343,7 @@ export const CreateRuleForm: React.FC = (_props) => { return ( - Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM + Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching Target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be kept in the application Recording buffer, and how frequently Cryostat should copy the application Recording buffer into Cryostat's own archived storage. diff --git a/src/app/Rules/Rules.tsx b/src/app/Rules/Rules.tsx index 051a40384..5395b8c7b 100644 --- a/src/app/Rules/Rules.tsx +++ b/src/app/Rules/Rules.tsx @@ -87,7 +87,7 @@ const tableColumns: TableColumn[] = [ title: 'Archival period', keyPaths: ['archivalPeriodSeconds'], tooltip: - 'Period in seconds. Cryostat will connect to matching targets at this interval and copy the relevant Recording data into its archives. Values less than 1 prevent data from being repeatedly copied into archives - Recordings will be started and remain only in target JVM memory.', + 'Period in seconds. Cryostat will connect to matching targets at this interval and copy the relevant Recording data into its archives. Values less than 1 prevent data from being repeatedly copied into archives - Recordings will be started and remain only in Target JVM memory.', }, { title: 'Initial delay', @@ -99,7 +99,7 @@ const tableColumns: TableColumn[] = [ title: 'Preserved archives', keyPaths: ['preservedArchives'], tooltip: - 'The number of Recording copies to be maintained in the Cryostat archives. Cryostat will continue retrieving further archived copies and trimming the oldest copies from the archive to maintain this limit. Values less than 1 prevent data from being copied into archives - Recordings will be started and remain only in target JVM memory.', + 'The number of Recording copies to be maintained in the Cryostat archives. Cryostat will continue retrieving further archived copies and trimming the oldest copies from the archive to maintain this limit. Values less than 1 prevent data from being copied into archives - Recordings will be started and remain only in Target JVM memory.', }, { title: 'Maximum age', @@ -412,7 +412,7 @@ export const RulesTable: React.FC = (_) => { Automated Rules define a dynamic set of target JVMs to connect to and start{' '} Active Recordings using a specific Event Template{' '} - when the Automated Rule is created and when any new matching target JVMs appear. If your target JVM + when the Automated Rule is created and when any new matching target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in Security. Automated Rules can be configured to periodically copy the contents of the Active Recording to{' '} Archives to ensure you always have up-to-date information about your JVMs. diff --git a/src/app/Rules/RulesUploadModal.tsx b/src/app/Rules/RulesUploadModal.tsx index a7916339d..0f67473bf 100644 --- a/src/app/Rules/RulesUploadModal.tsx +++ b/src/app/Rules/RulesUploadModal.tsx @@ -147,7 +147,7 @@ export const RuleUploadModal: React.FC = ({ onClose, ...pr bodyContent={
Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching - target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how + Target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be kept in the application Recording buffer, and how frequently Cryostat should copy the application Recording buffer into Cryostat"s own archived storage.
diff --git a/src/app/SecurityPanel/ImportCertificate.tsx b/src/app/SecurityPanel/ImportCertificate.tsx index 3fe1b692f..371419a65 100644 --- a/src/app/SecurityPanel/ImportCertificate.tsx +++ b/src/app/SecurityPanel/ImportCertificate.tsx @@ -88,8 +88,8 @@ export const ListCertificates: SecurityCard = { key: 'ssl', title: ( - Imported SSL Certificates - }> + Imported SSL/TLS Certificates + }> diff --git a/src/app/Shared/Components/JmxSslDescription.tsx b/src/app/Shared/Components/JmxSslDescription.tsx index 8fb138ae9..3de9d0b17 100644 --- a/src/app/Shared/Components/JmxSslDescription.tsx +++ b/src/app/Shared/Components/JmxSslDescription.tsx @@ -22,7 +22,7 @@ export const JmxSslDescription: React.FC {children} - JVM applications can be configured to present an SSL certificate for incoming JMX connections. Clients, such as + JVM applications can be configured to present an SSL/TLS certificate for incoming JMX connections. Clients, such as Cryostat, should be configured to trust these certificates so that the origin and authenticity of the connection data can be verified. diff --git a/src/app/Shared/Services/Api.service.tsx b/src/app/Shared/Services/Api.service.tsx index 4eae2d8fd..d216b9745 100644 --- a/src/app/Shared/Services/Api.service.tsx +++ b/src/app/Shared/Services/Api.service.tsx @@ -669,7 +669,7 @@ export class ApiService { if (resp.status == 400) { this.notifications.warning( 'Failed to insert probes', - 'The probes failed to be injected. Check that the agent is present in the same container as the target JVM and the target is running with -javaagent:/path/to/agent', + 'The probes failed to be injected. Check that the agent is present in the same container as the Target JVM and the target is running with -javaagent:/path/to/agent', ); } }), diff --git a/src/app/Topology/Actions/CreateTarget.tsx b/src/app/Topology/Actions/CreateTarget.tsx index e83abbcba..f6fd27d9d 100644 --- a/src/app/Topology/Actions/CreateTarget.tsx +++ b/src/app/Topology/Actions/CreateTarget.tsx @@ -279,7 +279,7 @@ export const CreateTarget: React.FC = ({ prefilled }) => { = ({ prefilled }) => { onClick={() => toggleCredentialForm('jmx-credential-option')} type={'button'} > - JMX credential options + JMX Credential options
Creates credentials that Cryostat uses to connect to target JVMs over JMX. diff --git a/src/app/Topology/Actions/quicksearches/custom-target.tsx b/src/app/Topology/Actions/quicksearches/custom-target.tsx index 9d9f629c7..95d583ce3 100644 --- a/src/app/Topology/Actions/quicksearches/custom-target.tsx +++ b/src/app/Topology/Actions/quicksearches/custom-target.tsx @@ -28,7 +28,7 @@ const _CustomTargetSearchItem: QuickSearchItem = { }, ], descriptionShort: 'Define a Custom Target definition.', - descriptionFull: 'Provide a JMX Service URL along with necessary credentials to point to a target JVM.', + descriptionFull: 'Provide a JMX Service URL along with necessary credentials to point to a Target JVM.', featureLevel: FeatureLevel.PRODUCTION, createAction: ({ navigate }) => { navigate('/topology/create-custom-target'); diff --git a/src/app/Topology/Entity/EntityAnnotations.tsx b/src/app/Topology/Entity/EntityAnnotations.tsx index 416804732..06f715342 100644 --- a/src/app/Topology/Entity/EntityAnnotations.tsx +++ b/src/app/Topology/Entity/EntityAnnotations.tsx @@ -47,6 +47,6 @@ export const EntityAnnotations: React.FC<{ annotations?: Annotations; maxDisplay ))}
) : ( - + ); }; diff --git a/src/app/Topology/Shared/utils.tsx b/src/app/Topology/Shared/utils.tsx index 4817eef20..c95befeac 100644 --- a/src/app/Topology/Shared/utils.tsx +++ b/src/app/Topology/Shared/utils.tsx @@ -75,13 +75,13 @@ export const getStatusTargetNode = (node: TargetNode | EnvironmentNode): [NodeSt If{' '} - }> - SSL is enabled + }> + SSL/TLS is enabled {' '} for JMX,{' '} - check if the SSL certificate is loaded. + check if the SSL/TLS certificate is loaded. . , diff --git a/src/app/build.json b/src/app/build.json index 46e0cecaf..72a32e1fd 100644 --- a/src/app/build.json +++ b/src/app/build.json @@ -10,7 +10,7 @@ "discussionUrl": "https://github.com/cryostatio/cryostat3/discussions", "knownIssuesUrl": "https://github.com/cryostatio/cryostat3/issues", "fileIssueUrl": "https://github.com/cryostatio/cryostat3/issues/new?labels=user+report,bug&body=Affects+__REPLACE_VERSION__", - "mailingListName": "Google groups", + "mailingListName": "Google Groups", "mailingListUrl": "https://groups.google.com/g/cryostat-development", "licenseUrl": "https://github.com/cryostatio/cryostat3/blob/main/LICENSE.txt", "version": "3.0.0-dev" diff --git a/src/app/routes.tsx b/src/app/routes.tsx index e6291131d..0c5b5bfd8 100644 --- a/src/app/routes.tsx +++ b/src/app/routes.tsx @@ -162,7 +162,7 @@ const routes: IAppRoute[] = [ label: 'Security', path: '/security', title: 'Security', - description: 'Upload SSL certificates for Cryostat to trust when communicating with target applications.', + description: 'Upload SSL/TLS certificates for Cryostat to trust when communicating with target applications.', navGroup: CONSOLE, }, { diff --git a/src/mirage/index.ts b/src/mirage/index.ts index 523fc8b1e..61f75db4f 100644 --- a/src/mirage/index.ts +++ b/src/mirage/index.ts @@ -330,14 +330,14 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'VMOperation Peak Duration', topic: 'vm_operations', description: - 'Summary:\nNo excessively long VM operations were found in this Recording (the longest was 23.774 ms).', + 'Summary:\nNo excessively long VM operations were found in this recording (the longest was 23.774 ms).', }, PasswordsInSystemProperties: { score: 75.0, name: 'Passwords in System Properties', topic: 'system_properties', description: - 'Summary:\nThe system properties in the Recording may contain passwords.\n\nExplanation:\nThe following suspicious system properties were found in this Recording: javax.net.ssl.keyStorePassword,javax.net.ssl.trustStorePassword,com.sun.management.jmxremote.password.file. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your system properties, but want to be able to share Recordings without also sharing the passwords, please disable the \u0027\u0027Initial System Property\u0027\u0027 event.', + 'Summary:\nThe system properties in the recording may contain passwords.\n\nExplanation:\nThe following suspicious system properties were found in this recording: javax.net.ssl.keyStorePassword,javax.net.ssl.trustStorePassword,com.sun.management.jmxremote.password.file. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your system properties, but want to be able to share recordings without also sharing the passwords, please disable the \u0027\u0027Initial System Property\u0027\u0027 event.', }, Options: { score: 0.0, @@ -350,7 +350,7 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'Passwords in Environment Variables', topic: 'environment_variables', description: - 'Summary:\nThe environment variables in the Recording may contain passwords.\n\nExplanation:\nThe following suspicious environment variables were found in this Recording: CRYOSTAT_JDBC_PASSWORD, CRYOSTAT_JMX_CREDENTIALS_DB_PASSWORD. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your environment variables, but want to be able to share Recordings without also sharing the passwords, please disable the \u0027\u0027Initial Environment Variable\u0027\u0027 event.', + 'Summary:\nThe environment variables in the recording may contain passwords.\n\nExplanation:\nThe following suspicious environment variables were found in this recording: CRYOSTAT_JDBC_PASSWORD, CRYOSTAT_JMX_CREDENTIALS_DB_PASSWORD. The following regular expression was used to exclude strings from this rule: \u0027\u0027(passworld|passwise)\u0027\u0027.\n\nSolution:\nIf you wish to keep having passwords in your environment variables, but want to be able to share recordings without also sharing the passwords, please disable the \u0027\u0027Initial Environment Variable\u0027\u0027 event.', }, MethodProfiling: { score: 0.6705776661956153, @@ -370,13 +370,13 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'Stackdepth Setting', topic: 'jvm_information', description: - 'Summary:\nSome stack traces were truncated in this Recording.\n\nExplanation:\nThe Flight Recorder is configured with a maximum captured stack depth of 64. 3.11 % of all traces were larger than this option, and were therefore truncated. If more detailed traces are required, increase the \u0027\u0027-XX:FlightRecorderOptions\u003dstackdepth\u003d\u003cvalue\u003e\u0027\u0027 value.\nEvents of the following types have truncated stack traces: org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@21e159e2,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@174930bc,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@4f5d6223', + 'Summary:\nSome stack traces were truncated in this recording.\n\nExplanation:\nThe Flight Recorder is configured with a maximum captured stack depth of 64. 3.11 % of all traces were larger than this option, and were therefore truncated. If more detailed traces are required, increase the \u0027\u0027-XX:FlightRecorderOptions\u003dstackdepth\u003d\u003cvalue\u003e\u0027\u0027 value.\nEvents of the following types have truncated stack traces: org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@21e159e2,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@174930bc,org.openjdk.jmc.flightrecorder.rules.jdk.general.StackDepthSettingRule$StackDepthTruncationData@4f5d6223', }, PasswordsInArguments: { score: 0.0, name: 'Passwords in Java Arguments', topic: 'jvm_information', - description: 'Summary:\nThe Recording does not seem to contain passwords in the application arguments.', + description: 'Summary:\nThe recording does not seem to contain passwords in the application arguments.', }, }, ); @@ -395,7 +395,7 @@ export const startMirage = ({ environment = 'development' } = {}) => { name: 'Demo Template', provider: 'Demo', type: 'TARGET', - description: 'This is not a real Event Template, but it is here!', + description: 'This is not a real event template, but it is here!', }, ]); this.get('api/v2/probes', () => []); diff --git a/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap b/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap index 71dbafcea..7d04bf46a 100644 --- a/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap +++ b/src/test/CreateRecording/__snapshots__/CustomRecordingForm.test.tsx.snap @@ -9,7 +9,7 @@ Array [ data-ouia-safe={true} data-pf-content={true} > - JDK Flight Recordings are compact records of events which have occurred within the target JVM. Many Event Types are built in to the JVM itself, while others are user defined. + JDK Flight Recordings are compact records of events which have occurred within the Target JVM. Many event types are built in to the JVM itself, while others are user defined. , - Enter a Recording name. This will be unique within the target JVM. + Enter a Recording name. This will be unique within the Target JVM.
diff --git a/src/test/Dashboard/Charts/jfr/JFRMetricsChartCard.test.tsx b/src/test/Dashboard/Charts/jfr/JFRMetricsChartCard.test.tsx index 52e379627..ace73bada 100644 --- a/src/test/Dashboard/Charts/jfr/JFRMetricsChartCard.test.tsx +++ b/src/test/Dashboard/Charts/jfr/JFRMetricsChartCard.test.tsx @@ -139,7 +139,7 @@ describe('', () => { expect(screen.getByText('CPU Load (last 120s, every 10s)')).toBeInTheDocument(); expect(screen.getByText('No source Recording')).toBeInTheDocument(); expect( - screen.getByText((s) => s.includes('Metrics cards display data taken from running flight Recordings')), + screen.getByText((s) => s.includes('Metrics cards display data taken from running Flight Recordings')), ).toBeInTheDocument(); expect(screen.getByRole('button', { name: /create/i })).toBeInTheDocument(); }); diff --git a/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap b/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap index 9f46b52ea..64a5c9474 100644 --- a/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap +++ b/src/test/Dashboard/Charts/jfr/__snapshots__/JFRMetricsChartCard.test.tsx.snap @@ -210,7 +210,7 @@ exports[` renders empty state correctly 1`] = `
- Metrics cards display data taken from running flight Recordings with the label + Metrics cards display data taken from running Flight Recordings with the label diff --git a/src/test/Events/EventTypes.test.tsx b/src/test/Events/EventTypes.test.tsx index 3d965fd4c..1396fa490 100644 --- a/src/test/Events/EventTypes.test.tsx +++ b/src/test/Events/EventTypes.test.tsx @@ -61,7 +61,7 @@ describe('', () => { expect(tree?.toJSON()).toMatchSnapshot(); }); - it('should show error view if failing to retrieve Event Types', async () => { + it('should show error view if failing to retrieve event types', async () => { const subj = new Subject(); const mockTargetSvc = { target: () => of(mockTarget as Target), @@ -86,7 +86,7 @@ describe('', () => { await doAct(async () => subj.next()); - const failTitle = screen.getByText('Error retrieving Event Types'); + const failTitle = screen.getByText('Error retrieving event types'); expect(failTitle).toBeInTheDocument(); expect(failTitle).toBeVisible(); @@ -119,7 +119,7 @@ describe('', () => { expect(screen.queryByText('Some Event')).not.toBeInTheDocument(); - const hintText = screen.getByText('No Event Types'); + const hintText = screen.getByText('No event types'); expect(hintText).toBeInTheDocument(); expect(hintText).toBeVisible(); }); diff --git a/src/test/Events/__snapshots__/EventTypes.test.tsx.snap b/src/test/Events/__snapshots__/EventTypes.test.tsx.snap index 679854687..b20602a8f 100644 --- a/src/test/Events/__snapshots__/EventTypes.test.tsx.snap +++ b/src/test/Events/__snapshots__/EventTypes.test.tsx.snap @@ -324,7 +324,7 @@ Array [
, renders correctly 1`] = ` Event Template - when the Automated Rule is created and when any new matching target JVMs appear. If your target JVM connections require JMX Credentials, you can configure these in + when the Automated Rule is created and when any new matching target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in Date: Fri, 31 May 2024 13:57:00 -0400 Subject: [PATCH 12/13] yarn formatter --- src/app/Shared/Components/JmxSslDescription.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/Shared/Components/JmxSslDescription.tsx b/src/app/Shared/Components/JmxSslDescription.tsx index 3de9d0b17..fd0adfdc1 100644 --- a/src/app/Shared/Components/JmxSslDescription.tsx +++ b/src/app/Shared/Components/JmxSslDescription.tsx @@ -22,9 +22,9 @@ export const JmxSslDescription: React.FC {children} - JVM applications can be configured to present an SSL/TLS certificate for incoming JMX connections. Clients, such as - Cryostat, should be configured to trust these certificates so that the origin and authenticity of the connection - data can be verified. + JVM applications can be configured to present an SSL/TLS certificate for incoming JMX connections. Clients, such + as Cryostat, should be configured to trust these certificates so that the origin and authenticity of the + connection data can be verified. Check the deployment configuration of your JVM application for system properties such as: From b1fd93f4e7cdbf5e4dbd827b17bc414add60c3fa Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Mon, 3 Jun 2024 10:39:10 -0400 Subject: [PATCH 13/13] format generic-quickstart.tsx --- src/app/QuickStarts/quickstarts/generic-quickstart.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/QuickStarts/quickstarts/generic-quickstart.tsx b/src/app/QuickStarts/quickstarts/generic-quickstart.tsx index 14d5b6ce5..8a0185b6f 100644 --- a/src/app/QuickStarts/quickstarts/generic-quickstart.tsx +++ b/src/app/QuickStarts/quickstarts/generic-quickstart.tsx @@ -21,7 +21,7 @@ import { PficonTemplateIcon } from '@patternfly/react-icons'; import { conclusion } from '../quickstart-utils'; // Quick start name (currently cannot use [APP], there is a bug with how the title gets rendered in the quick start panel) -const displayName = 'Getting started with Quick starts in Cryostat'; +const displayName = 'Getting started with quick starts in Cryostat'; // Additional info: https://docs.openshift.com/container-platform/4.9/web_console/creating-quick-start-tutorials.html const GenericQuickStart: QuickStart = {