mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Cloud Posture] I18n guidelines findings (#135188)
This commit is contained in:
parent
1aba5428b3
commit
2fd780b549
21 changed files with 235 additions and 501 deletions
|
@ -22,10 +22,10 @@ import {
|
|||
EuiIcon,
|
||||
} from '@elastic/eui';
|
||||
import { assertNever } from '@kbn/std';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import cisLogoIcon from '../../../assets/icons/cis_logo.svg';
|
||||
import type { CspFinding } from '../types';
|
||||
import { CspEvaluationBadge } from '../../../components/csp_evaluation_badge';
|
||||
import * as TEXT from '../translations';
|
||||
import { ResourceTab } from './resource_tab';
|
||||
import { JsonTab } from './json_tab';
|
||||
import { OverviewTab } from './overview_tab';
|
||||
|
@ -33,10 +33,30 @@ import { RuleTab } from './rule_tab';
|
|||
import k8sLogoIcon from '../../../assets/icons/k8s_logo.svg';
|
||||
|
||||
const tabs = [
|
||||
{ title: TEXT.OVERVIEW, id: 'overview' },
|
||||
{ title: TEXT.RULE, id: 'rule' },
|
||||
{ title: TEXT.RESOURCE, id: 'resource' },
|
||||
{ title: TEXT.JSON, id: 'json' },
|
||||
{
|
||||
id: 'overview',
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTabTitle', {
|
||||
defaultMessage: 'Overview',
|
||||
}),
|
||||
},
|
||||
{
|
||||
id: 'rule',
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTabTitle', {
|
||||
defaultMessage: 'Rule',
|
||||
}),
|
||||
},
|
||||
{
|
||||
id: 'resource',
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.resourceTabTitle', {
|
||||
defaultMessage: 'Resource',
|
||||
}),
|
||||
},
|
||||
{
|
||||
id: 'json',
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.jsonTabTitle', {
|
||||
defaultMessage: 'JSON',
|
||||
}),
|
||||
},
|
||||
] as const;
|
||||
|
||||
type FindingsTab = typeof tabs[number];
|
||||
|
|
|
@ -9,7 +9,7 @@ import { EuiAccordion, EuiDescriptionList, EuiPanel, EuiSpacer, EuiText } from '
|
|||
import React, { useMemo } from 'react';
|
||||
import moment from 'moment';
|
||||
import type { EuiDescriptionListProps, EuiAccordionProps } from '@elastic/eui';
|
||||
import * as TEXT from '../translations';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { CspFinding } from '../types';
|
||||
import { CisKubernetesIcons, Markdown, CodeBlock } from './findings_flyout';
|
||||
|
||||
|
@ -18,23 +18,33 @@ type Accordion = Pick<EuiAccordionProps, 'title' | 'id' | 'initialIsOpen'> &
|
|||
|
||||
const getDetailsList = (data: CspFinding) => [
|
||||
{
|
||||
title: TEXT.RULE_NAME,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.ruleNameTitle', {
|
||||
defaultMessage: 'Rule Name',
|
||||
}),
|
||||
description: data.rule.name,
|
||||
},
|
||||
{
|
||||
title: TEXT.EVALUATED_AT,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.evaluatedAtTitle', {
|
||||
defaultMessage: 'Evaluated at',
|
||||
}),
|
||||
description: moment(data['@timestamp']).format('MMMM D, YYYY @ HH:mm:ss.SSS'),
|
||||
},
|
||||
{
|
||||
title: TEXT.RESOURCE_NAME,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.resourceNameTitle', {
|
||||
defaultMessage: 'Resource Name',
|
||||
}),
|
||||
description: data.resource.name,
|
||||
},
|
||||
{
|
||||
title: TEXT.FRAMEWORK_SOURCES,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.frameworkSourcesTitle', {
|
||||
defaultMessage: 'Framework Sources',
|
||||
}),
|
||||
description: <CisKubernetesIcons />,
|
||||
},
|
||||
{
|
||||
title: TEXT.CIS_SECTION,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.cisSectionTitle', {
|
||||
defaultMessage: 'CIS Section',
|
||||
}),
|
||||
description: data.rule.section,
|
||||
},
|
||||
];
|
||||
|
@ -47,7 +57,9 @@ export const getRemediationList = (rule: CspFinding['rule']) => [
|
|||
...(rule.impact
|
||||
? [
|
||||
{
|
||||
title: TEXT.IMPACT,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.impactTitle', {
|
||||
defaultMessage: 'Impact',
|
||||
}),
|
||||
description: <Markdown>{rule.impact}</Markdown>,
|
||||
},
|
||||
]
|
||||
|
@ -55,13 +67,17 @@ export const getRemediationList = (rule: CspFinding['rule']) => [
|
|||
...(rule.default_value
|
||||
? [
|
||||
{
|
||||
title: TEXT.DEFAULT_VALUE,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.defaultValueTitle', {
|
||||
defaultMessage: 'Default Value',
|
||||
}),
|
||||
description: <Markdown>{rule.default_value}</Markdown>,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
{
|
||||
title: TEXT.RATIONALE,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.rationaleTitle', {
|
||||
defaultMessage: 'Rationale',
|
||||
}),
|
||||
description: <Markdown>{rule.rationale}</Markdown>,
|
||||
},
|
||||
];
|
||||
|
@ -69,11 +85,15 @@ export const getRemediationList = (rule: CspFinding['rule']) => [
|
|||
const getEvidenceList = ({ result }: CspFinding) =>
|
||||
[
|
||||
result.expected && {
|
||||
title: TEXT.EXPECTED,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.expectedTitle', {
|
||||
defaultMessage: 'Expected',
|
||||
}),
|
||||
description: <CodeBlock>{JSON.stringify(result.expected, null, 2)}</CodeBlock>,
|
||||
},
|
||||
{
|
||||
title: TEXT.ACTUAL,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.actualTitle', {
|
||||
defaultMessage: 'Actual',
|
||||
}),
|
||||
description: <CodeBlock>{JSON.stringify(result.evidence, null, 2)}</CodeBlock>,
|
||||
},
|
||||
].filter(Boolean) as EuiDescriptionListProps['listItems'];
|
||||
|
@ -83,19 +103,26 @@ export const OverviewTab = ({ data }: { data: CspFinding }) => {
|
|||
() => [
|
||||
{
|
||||
initialIsOpen: true,
|
||||
title: TEXT.DETAILS,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.detailsTitle', {
|
||||
defaultMessage: 'Details',
|
||||
}),
|
||||
id: 'detailsAccordion',
|
||||
listItems: getDetailsList(data),
|
||||
},
|
||||
{
|
||||
initialIsOpen: true,
|
||||
title: TEXT.REMEDIATION,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.remediationTitle', {
|
||||
defaultMessage: 'Remediation',
|
||||
}),
|
||||
id: 'remediationAccordion',
|
||||
listItems: getRemediationList(data.rule),
|
||||
},
|
||||
{
|
||||
initialIsOpen: false,
|
||||
title: TEXT.EVIDENCE,
|
||||
title: i18n.translate(
|
||||
'xpack.csp.findings.findingsFlyout.overviewTab.evidenceSourcesTitle',
|
||||
{ defaultMessage: 'Evidence' }
|
||||
),
|
||||
id: 'evidenceAccordion',
|
||||
listItems: getEvidenceList(data),
|
||||
},
|
||||
|
|
|
@ -17,8 +17,8 @@ import {
|
|||
} from '@elastic/eui';
|
||||
import React, { useMemo } from 'react';
|
||||
import { getFlattenedObject } from '@kbn/std';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { CspFinding } from '../types';
|
||||
import * as TEXT from '../translations';
|
||||
|
||||
const getDescriptionDisplay = (value: unknown) => {
|
||||
if (value === undefined) return 'undefined';
|
||||
|
@ -55,12 +55,17 @@ export const ResourceTab = ({ data }: { data: CspFinding }) => {
|
|||
const accordions = useMemo(
|
||||
() => [
|
||||
{
|
||||
title: TEXT.RESOURCE,
|
||||
title: i18n.translate(
|
||||
'xpack.csp.findings.findingsFlyout.resourceTab.resourceAccordionTitle',
|
||||
{ defaultMessage: 'Resource' }
|
||||
),
|
||||
id: 'resourceAccordion',
|
||||
listItems: prepareDescriptionList(data.resource),
|
||||
},
|
||||
{
|
||||
title: TEXT.HOST,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.resourceTab.hostAccordionTitle', {
|
||||
defaultMessage: 'Host',
|
||||
}),
|
||||
id: 'hostAccordion',
|
||||
listItems: prepareDescriptionList(data.host),
|
||||
},
|
||||
|
|
|
@ -6,44 +6,60 @@
|
|||
*/
|
||||
|
||||
import { EuiDescriptionList } from '@elastic/eui';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import React from 'react';
|
||||
import * as TEXT from '../translations';
|
||||
import { CspFinding } from '../types';
|
||||
import { CisKubernetesIcons, Markdown } from './findings_flyout';
|
||||
|
||||
export const getRuleList = (rule: CspFinding['rule']) => [
|
||||
{
|
||||
title: TEXT.NAME,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.nameTitle', {
|
||||
defaultMessage: 'Name',
|
||||
}),
|
||||
description: rule.name,
|
||||
},
|
||||
{
|
||||
title: TEXT.DESCRIPTION,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.descriptionTitle', {
|
||||
defaultMessage: 'Description',
|
||||
}),
|
||||
description: <Markdown>{rule.description}</Markdown>,
|
||||
},
|
||||
{
|
||||
title: TEXT.FRAMEWORK_SOURCES,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.frameworkSourcesTitle', {
|
||||
defaultMessage: 'Framework Sources',
|
||||
}),
|
||||
description: <CisKubernetesIcons />,
|
||||
},
|
||||
{
|
||||
title: TEXT.CIS_SECTION,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.cisSectionTitle', {
|
||||
defaultMessage: 'CIS Section',
|
||||
}),
|
||||
description: rule.section,
|
||||
},
|
||||
{
|
||||
title: TEXT.PROFILE_APPLICABILITY,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.profileApplicabilityTitle', {
|
||||
defaultMessage: 'Profile Applicability',
|
||||
}),
|
||||
description: <Markdown>{rule.profile_applicability}</Markdown>,
|
||||
},
|
||||
{
|
||||
title: TEXT.BENCHMARK,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.benchmarkTitle', {
|
||||
defaultMessage: 'Benchmark',
|
||||
}),
|
||||
description: rule.benchmark.name,
|
||||
},
|
||||
{
|
||||
title: TEXT.AUDIT,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.auditTitle', {
|
||||
defaultMessage: 'Audit',
|
||||
}),
|
||||
description: <Markdown>{rule.audit}</Markdown>,
|
||||
},
|
||||
...(rule.references
|
||||
? [
|
||||
{
|
||||
title: TEXT.REFERENCES,
|
||||
title: i18n.translate('xpack.csp.findings.findingsFlyout.ruleTab.referencesTitle', {
|
||||
defaultMessage: 'References',
|
||||
}),
|
||||
description: <Markdown>{rule.references}</Markdown>,
|
||||
},
|
||||
]
|
||||
|
|
|
@ -125,7 +125,12 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => {
|
|||
const LatestFindingsPageTitle = () => (
|
||||
<PageTitle>
|
||||
<PageTitleText
|
||||
title={<FormattedMessage id="xpack.csp.findings.findingsTitle" defaultMessage="Findings" />}
|
||||
title={
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.latestFindings.latestFindingsPageTitle"
|
||||
defaultMessage="Findings"
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</PageTitle>
|
||||
);
|
||||
|
|
|
@ -83,7 +83,9 @@ describe('<FindingsTable />', () => {
|
|||
</TestProvider>
|
||||
);
|
||||
|
||||
expect(screen.getByTestId(TEST_SUBJECTS.FINDINGS_TABLE_ZERO_STATE)).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByTestId(TEST_SUBJECTS.LATEST_FINDINGS_TABLE_NO_FINDINGS_EMPTY_STATE)
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('renders the table with provided items', () => {
|
||||
|
|
|
@ -14,8 +14,8 @@ import {
|
|||
type CriteriaWithPagination,
|
||||
type EuiTableActionsColumnType,
|
||||
} from '@elastic/eui';
|
||||
import { FormattedMessage } from '@kbn/i18n-react';
|
||||
import * as TEST_SUBJECTS from '../test_subjects';
|
||||
import * as TEXT from '../translations';
|
||||
import type { CspFinding } from '../types';
|
||||
import { FindingsRuleFlyout } from '../findings_flyout/findings_flyout';
|
||||
import { getExpandColumn, getFindingsColumns } from '../layout/findings_layout';
|
||||
|
@ -53,8 +53,15 @@ const FindingsTableComponent = ({
|
|||
return (
|
||||
<EuiEmptyPrompt
|
||||
iconType="logoKibana"
|
||||
title={<h2>{TEXT.NO_FINDINGS}</h2>}
|
||||
data-test-subj={TEST_SUBJECTS.FINDINGS_TABLE_ZERO_STATE}
|
||||
data-test-subj={TEST_SUBJECTS.LATEST_FINDINGS_TABLE_NO_FINDINGS_EMPTY_STATE}
|
||||
title={
|
||||
<h2>
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.latestFindings.noFindingsTitle"
|
||||
defaultMessage="There are no Findings"
|
||||
/>
|
||||
</h2>
|
||||
}
|
||||
/>
|
||||
);
|
||||
|
||||
|
|
|
@ -12,9 +12,9 @@ import type { IKibanaSearchRequest, IKibanaSearchResponse } from '@kbn/data-plug
|
|||
import type { CoreStart } from '@kbn/core/public';
|
||||
import type { Criteria, Pagination } from '@elastic/eui';
|
||||
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { FindingsEsPitContext } from '../es_pit/findings_es_pit_context';
|
||||
import { extractErrorMessage } from '../../../../common/utils/helpers';
|
||||
import * as TEXT from '../translations';
|
||||
import type { CspFinding } from '../types';
|
||||
import { useKibana } from '../../../common/hooks/use_kibana';
|
||||
import type { FindingsBaseEsQuery } from '../types';
|
||||
|
@ -56,12 +56,17 @@ const FIELDS_WITHOUT_KEYWORD_MAPPING = new Set([
|
|||
const getSortKey = (key: string): string =>
|
||||
FIELDS_WITHOUT_KEYWORD_MAPPING.has(key) ? key : `${key}.keyword`;
|
||||
|
||||
const SEARCH_FAILED_TEXT = i18n.translate(
|
||||
'xpack.csp.findings.findingsErrorToast.searchFailedTitle',
|
||||
{ defaultMessage: 'Search failed' }
|
||||
);
|
||||
|
||||
export const showErrorToast = (
|
||||
toasts: CoreStart['notifications']['toasts'],
|
||||
error: unknown
|
||||
): void => {
|
||||
if (error instanceof Error) toasts.addError(error, { title: TEXT.SEARCH_FAILED });
|
||||
else toasts.addDanger(extractErrorMessage(error, TEXT.SEARCH_FAILED));
|
||||
if (error instanceof Error) toasts.addError(error, { title: SEARCH_FAILED_TEXT });
|
||||
else toasts.addDanger(extractErrorMessage(error, SEARCH_FAILED_TEXT));
|
||||
};
|
||||
|
||||
export const getFindingsQuery = ({
|
||||
|
|
|
@ -90,14 +90,13 @@ const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => {
|
|||
<PageTitleText
|
||||
title={
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.findingsByResourceTitle"
|
||||
id="xpack.csp.findings.findingsByResource.findingsByResourcePageTitle"
|
||||
defaultMessage="Findings"
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</PageTitle>
|
||||
{error && <ErrorCallout error={error} />}
|
||||
|
||||
{!error && (
|
||||
<>
|
||||
<FindingsGroupBySelector type="resource" />
|
||||
|
|
|
@ -8,7 +8,6 @@ import React from 'react';
|
|||
import { render, screen, within } from '@testing-library/react';
|
||||
import * as TEST_SUBJECTS from '../test_subjects';
|
||||
import { FindingsByResourceTable, formatNumber, getResourceId } from './findings_by_resource_table';
|
||||
import * as TEXT from '../translations';
|
||||
import type { PropsOf } from '@elastic/eui';
|
||||
import Chance from 'chance';
|
||||
import numeral from '@elastic/numeral';
|
||||
|
@ -55,7 +54,9 @@ describe('<FindingsByResourceTable />', () => {
|
|||
</TestProvider>
|
||||
);
|
||||
|
||||
expect(screen.getByText(TEXT.NO_FINDINGS)).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByTestId(TEST_SUBJECTS.FINDINGS_BY_RESOURCE_TABLE_NO_FINDINGS_EMPTY_STATE)
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('renders the table with provided items', () => {
|
||||
|
|
|
@ -20,7 +20,6 @@ import numeral from '@elastic/numeral';
|
|||
import { Link, generatePath } from 'react-router-dom';
|
||||
import { ColumnNameWithTooltip } from '../../../components/column_name_with_tooltip';
|
||||
import * as TEST_SUBJECTS from '../test_subjects';
|
||||
import * as TEXT from '../translations';
|
||||
import type { FindingsByResourcePage } from './use_findings_by_resource';
|
||||
import { findingsNavigation } from '../../../common/navigation/constants';
|
||||
|
||||
|
@ -48,7 +47,20 @@ const FindingsByResourceTableComponent = ({
|
|||
});
|
||||
|
||||
if (!loading && !items.length)
|
||||
return <EuiEmptyPrompt iconType="logoKibana" title={<h2>{TEXT.NO_FINDINGS}</h2>} />;
|
||||
return (
|
||||
<EuiEmptyPrompt
|
||||
data-test-subj={TEST_SUBJECTS.FINDINGS_BY_RESOURCE_TABLE_NO_FINDINGS_EMPTY_STATE}
|
||||
iconType="logoKibana"
|
||||
title={
|
||||
<h2>
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.findingsByResource.noFindingsTitle"
|
||||
defaultMessage="There are no Findings"
|
||||
/>
|
||||
</h2>
|
||||
}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<EuiBasicTable
|
||||
|
@ -67,12 +79,13 @@ const columns: Array<EuiTableFieldDataColumnType<FindingsByResourcePage>> = [
|
|||
field: 'resource_id',
|
||||
name: (
|
||||
<ColumnNameWithTooltip
|
||||
columnName={TEXT.RESOURCE_ID}
|
||||
columnName={i18n.translate(
|
||||
'xpack.csp.findings.findingsByResourceTable.findingsByResourceTableColumn.resourceIdColumnLabel',
|
||||
{ defaultMessage: 'Resource ID' }
|
||||
)}
|
||||
tooltipContent={i18n.translate(
|
||||
'xpack.csp.findings.resourceTable.resourceTableColumn.resourceIdColumnTooltipLabel',
|
||||
{
|
||||
defaultMessage: 'Custom Elastic Resource ID',
|
||||
}
|
||||
'xpack.csp.findings.findingsByResourceTable.findingsByResourceTableColumn.resourceIdColumnTooltipLabel',
|
||||
{ defaultMessage: 'Custom Elastic Resource ID' }
|
||||
)}
|
||||
/>
|
||||
),
|
||||
|
@ -87,7 +100,7 @@ const columns: Array<EuiTableFieldDataColumnType<FindingsByResourcePage>> = [
|
|||
truncateText: true,
|
||||
name: (
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.groupByResourceTable.resourceTypeColumnLabel"
|
||||
id="xpack.csp.findings.findingsByResourceTable.resourceTypeColumnLabel"
|
||||
defaultMessage="Resource Type"
|
||||
/>
|
||||
),
|
||||
|
@ -97,7 +110,7 @@ const columns: Array<EuiTableFieldDataColumnType<FindingsByResourcePage>> = [
|
|||
truncateText: true,
|
||||
name: (
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.groupByResourceTable.resourceNameColumnLabel"
|
||||
id="xpack.csp.findings.findingsByResourceTable.resourceNameColumnLabel"
|
||||
defaultMessage="Resource Name"
|
||||
/>
|
||||
),
|
||||
|
@ -107,7 +120,7 @@ const columns: Array<EuiTableFieldDataColumnType<FindingsByResourcePage>> = [
|
|||
truncateText: true,
|
||||
name: (
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.groupByResourceTable.cisSectionsColumnLabel"
|
||||
id="xpack.csp.findings.findingsByResourceTable.cisSectionsColumnLabel"
|
||||
defaultMessage="CIS Sections"
|
||||
/>
|
||||
),
|
||||
|
@ -117,12 +130,13 @@ const columns: Array<EuiTableFieldDataColumnType<FindingsByResourcePage>> = [
|
|||
field: 'cluster_id',
|
||||
name: (
|
||||
<ColumnNameWithTooltip
|
||||
columnName={TEXT.CLUSTER_ID}
|
||||
columnName={i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.clusterIdColumnLabel',
|
||||
{ defaultMessage: 'Cluster ID' }
|
||||
)}
|
||||
tooltipContent={i18n.translate(
|
||||
'xpack.csp.findings.resourceTable.resourceTableColumn.clusterIdColumnTooltipLabel',
|
||||
{
|
||||
defaultMessage: 'Kube-System Namespace ID',
|
||||
}
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.clusterIdColumnTooltipLabel',
|
||||
{ defaultMessage: 'Kube-System Namespace ID' }
|
||||
)}
|
||||
/>
|
||||
),
|
||||
|
@ -134,19 +148,22 @@ const columns: Array<EuiTableFieldDataColumnType<FindingsByResourcePage>> = [
|
|||
truncateText: true,
|
||||
name: (
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.groupByResourceTable.failedFindingsColumnLabel"
|
||||
id="xpack.csp.findings.findingsByResourceTable.failedFindingsColumnLabel"
|
||||
defaultMessage="Failed Findings"
|
||||
/>
|
||||
),
|
||||
render: (failedFindings: FindingsByResourcePage['failed_findings']) => (
|
||||
<EuiToolTip
|
||||
content={i18n.translate('xpack.csp.findings.groupByResourceTable.failedFindingsToolTip', {
|
||||
defaultMessage: '{failed} out of {total}',
|
||||
values: {
|
||||
failed: failedFindings.count,
|
||||
total: failedFindings.total_findings,
|
||||
},
|
||||
})}
|
||||
content={i18n.translate(
|
||||
'xpack.csp.findings.findingsByResourceTable.failedFindingsToolTip',
|
||||
{
|
||||
defaultMessage: '{failed} out of {total}',
|
||||
values: {
|
||||
failed: failedFindings.count,
|
||||
total: failedFindings.total_findings,
|
||||
},
|
||||
}
|
||||
)}
|
||||
>
|
||||
<>
|
||||
<EuiTextColor color={failedFindings.count === 0 ? '' : 'danger'}>
|
||||
|
|
|
@ -96,7 +96,7 @@ export const ResourceFindings = ({ dataView }: FindingsBaseProps) => {
|
|||
title={
|
||||
<div style={{ padding: euiTheme.size.s }}>
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.resourceFindingsTitle"
|
||||
id="xpack.csp.findings.resourceFindings.resourceFindingsPageTitle"
|
||||
defaultMessage="{resourceId} - Findings"
|
||||
values={{ resourceId: params.resourceId }}
|
||||
/>
|
||||
|
|
|
@ -13,7 +13,7 @@ import {
|
|||
EuiBasicTableColumn,
|
||||
EuiTableActionsColumnType,
|
||||
} from '@elastic/eui';
|
||||
import * as TEXT from '../../translations';
|
||||
import { FormattedMessage } from '@kbn/i18n-react';
|
||||
import { getExpandColumn, getFindingsColumns } from '../../layout/findings_layout';
|
||||
import type { CspFinding } from '../../types';
|
||||
import { FindingsRuleFlyout } from '../../findings_flyout/findings_flyout';
|
||||
|
@ -36,7 +36,19 @@ const ResourceFindingsTableComponent = ({ items, loading, pagination, setTableOp
|
|||
[]
|
||||
);
|
||||
if (!loading && !items.length)
|
||||
return <EuiEmptyPrompt iconType="logoKibana" title={<h2>{TEXT.NO_FINDINGS}</h2>} />;
|
||||
return (
|
||||
<EuiEmptyPrompt
|
||||
iconType="logoKibana"
|
||||
title={
|
||||
<h2>
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.resourceFindings.noFindingsTitle"
|
||||
defaultMessage="There are no Findings"
|
||||
/>
|
||||
</h2>
|
||||
}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
|
@ -15,7 +15,7 @@ import {
|
|||
} from '@elastic/eui';
|
||||
import React from 'react';
|
||||
import { FormattedMessage } from '@kbn/i18n-react';
|
||||
import { PAGE_SEARCH_ERROR_MESSAGE } from '../translations';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { useKibana } from '../../../common/hooks/use_kibana';
|
||||
|
||||
export const ErrorCallout = ({ error }: { error: Error }) => {
|
||||
|
@ -27,11 +27,17 @@ export const ErrorCallout = ({ error }: { error: Error }) => {
|
|||
<EuiFlexGroup justifyContent="center" alignItems="center">
|
||||
<EuiFlexItem grow={false}>
|
||||
<EuiPanel paddingSize="l" grow>
|
||||
<EuiCallOut title={PAGE_SEARCH_ERROR_MESSAGE} color="danger" iconType="alert">
|
||||
<EuiCallOut
|
||||
title={i18n.translate('xpack.csp.findings.errorCallout.pageSearchErrorTitle', {
|
||||
defaultMessage: 'We encountered an error retrieving search results',
|
||||
})}
|
||||
color="danger"
|
||||
iconType="alert"
|
||||
>
|
||||
<EuiSpacer />
|
||||
<EuiButton size="s" color="danger" onClick={() => search.showError(error)}>
|
||||
<FormattedMessage
|
||||
id="xpack.csp.findings.showErrorButtonLabel"
|
||||
id="xpack.csp.findings.errorCallout.showErrorButtonLabel"
|
||||
defaultMessage="Show error message"
|
||||
/>
|
||||
</EuiButton>
|
||||
|
|
|
@ -19,7 +19,6 @@ import moment from 'moment';
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import { ColumnNameWithTooltip } from '../../../components/column_name_with_tooltip';
|
||||
import { CspEvaluationBadge } from '../../../components/csp_evaluation_badge';
|
||||
import * as TEXT from '../translations';
|
||||
import { CspFinding } from '../types';
|
||||
|
||||
export const PageWrapper: React.FC = ({ children }) => {
|
||||
|
@ -70,12 +69,13 @@ export const getFindingsColumns = (): Array<EuiBasicTableColumn<CspFinding>> =>
|
|||
field: 'resource.id',
|
||||
name: (
|
||||
<ColumnNameWithTooltip
|
||||
columnName={TEXT.RESOURCE_ID}
|
||||
columnName={i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.resourceIdColumnLabel',
|
||||
{ defaultMessage: 'Resource ID' }
|
||||
)}
|
||||
tooltipContent={i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.resourceIdColumnTooltipLabel',
|
||||
{
|
||||
defaultMessage: 'Custom Elastic Resource ID',
|
||||
}
|
||||
{ defaultMessage: 'Custom Elastic Resource ID' }
|
||||
)}
|
||||
/>
|
||||
),
|
||||
|
@ -90,7 +90,9 @@ export const getFindingsColumns = (): Array<EuiBasicTableColumn<CspFinding>> =>
|
|||
},
|
||||
{
|
||||
field: 'result.evaluation',
|
||||
name: TEXT.RESULT,
|
||||
name: i18n.translate('xpack.csp.findings.findingsTable.findingsTableColumn.resultColumnLabel', {
|
||||
defaultMessage: 'Result',
|
||||
}),
|
||||
width: '100px',
|
||||
sortable: true,
|
||||
render: (type: PropsOf<typeof CspEvaluationBadge>['type']) => (
|
||||
|
@ -99,23 +101,34 @@ export const getFindingsColumns = (): Array<EuiBasicTableColumn<CspFinding>> =>
|
|||
},
|
||||
{
|
||||
field: 'resource.sub_type',
|
||||
name: TEXT.RESOURCE_TYPE,
|
||||
name: i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.resourceTypeColumnLabel',
|
||||
{ defaultMessage: 'Resource Type' }
|
||||
),
|
||||
sortable: true,
|
||||
width: '150px',
|
||||
},
|
||||
{
|
||||
field: 'resource.name',
|
||||
name: TEXT.RESOURCE_NAME,
|
||||
name: i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.resourceNameColumnLabel',
|
||||
{ defaultMessage: 'Resource Name' }
|
||||
),
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
field: 'rule.name',
|
||||
name: TEXT.RULE,
|
||||
name: i18n.translate('xpack.csp.findings.findingsTable.findingsTableColumn.ruleColumnLabel', {
|
||||
defaultMessage: 'Rule',
|
||||
}),
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
field: 'rule.section',
|
||||
name: TEXT.CIS_SECTION,
|
||||
name: i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.ruleSectionColumnLabel',
|
||||
{ defaultMessage: 'CIS Section' }
|
||||
),
|
||||
sortable: true,
|
||||
truncateText: true,
|
||||
},
|
||||
|
@ -123,12 +136,13 @@ export const getFindingsColumns = (): Array<EuiBasicTableColumn<CspFinding>> =>
|
|||
field: 'cluster_id',
|
||||
name: (
|
||||
<ColumnNameWithTooltip
|
||||
columnName={TEXT.CLUSTER_ID}
|
||||
columnName={i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.clusterIdColumnLabel',
|
||||
{ defaultMessage: 'Cluster ID' }
|
||||
)}
|
||||
tooltipContent={i18n.translate(
|
||||
'xpack.csp.findings.resourceTable.resourceTableColumn.clusterIdColumnTooltipLabel',
|
||||
{
|
||||
defaultMessage: 'Kube-System Namespace ID',
|
||||
}
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.clusterIdColumnTooltipLabel',
|
||||
{ defaultMessage: 'Kube-System Namespace ID' }
|
||||
)}
|
||||
/>
|
||||
),
|
||||
|
@ -138,7 +152,10 @@ export const getFindingsColumns = (): Array<EuiBasicTableColumn<CspFinding>> =>
|
|||
{
|
||||
field: '@timestamp',
|
||||
width: '150px',
|
||||
name: TEXT.LAST_CHECKED,
|
||||
name: i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.lastCheckedColumnLabel',
|
||||
{ defaultMessage: 'Last Checked' }
|
||||
),
|
||||
truncateText: true,
|
||||
sortable: true,
|
||||
render: (timestamp: number) => (
|
||||
|
|
|
@ -9,11 +9,11 @@ import { css } from '@emotion/react';
|
|||
import { EuiThemeComputed, useEuiTheme } from '@elastic/eui';
|
||||
import { useKibana } from '@kbn/kibana-react-plugin/public';
|
||||
import type { DataView } from '@kbn/data-plugin/common';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import * as TEST_SUBJECTS from '../test_subjects';
|
||||
import type { FindingsBaseURLQuery } from '../types';
|
||||
import type { CspClientPluginStartDeps } from '../../../types';
|
||||
import { PLUGIN_NAME } from '../../../../common';
|
||||
import { FINDINGS_SEARCH_PLACEHOLDER } from '../translations';
|
||||
|
||||
type SearchBarQueryProps = Pick<FindingsBaseURLQuery, 'query' | 'filters'>;
|
||||
|
||||
|
@ -49,7 +49,9 @@ export const FindingsSearchBar = ({
|
|||
onQuerySubmit={setQuery}
|
||||
// @ts-expect-error onFiltersUpdated is a valid prop on SearchBar
|
||||
onFiltersUpdated={(value: Filter[]) => setQuery({ filters: value })}
|
||||
placeholder={FINDINGS_SEARCH_PLACEHOLDER}
|
||||
placeholder={i18n.translate('xpack.csp.findings.searchBar.searchPlaceholder', {
|
||||
defaultMessage: 'Search findings (eg. rule.section.keyword : "API Server" )',
|
||||
})}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -7,7 +7,10 @@
|
|||
|
||||
export const FINDINGS_SEARCH_BAR = 'findings_search_bar';
|
||||
export const FINDINGS_TABLE = 'findings_table';
|
||||
export const FINDINGS_BY_RESOURCE_TABLE_NO_FINDINGS_EMPTY_STATE =
|
||||
'findings-by-resource-table-no-findings-empty-state';
|
||||
export const FINDINGS_CONTAINER = 'findings_container';
|
||||
export const FINDINGS_TABLE_ZERO_STATE = 'findings_table_zero_state';
|
||||
export const LATEST_FINDINGS_TABLE_NO_FINDINGS_EMPTY_STATE =
|
||||
'latest-findings-table-no-findings-empty-state';
|
||||
export const getFindingsByResourceTableRowTestId = (id: string) =>
|
||||
`findings_resource_table_row_${id}`;
|
||||
|
|
|
@ -1,275 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
export const NAME = i18n.translate('xpack.csp.findings.nameLabel', {
|
||||
defaultMessage: 'Name',
|
||||
});
|
||||
|
||||
export const IMPACT = i18n.translate('xpack.csp.findings.impactLabel', {
|
||||
defaultMessage: 'Impact',
|
||||
});
|
||||
|
||||
export const DEFAULT_VALUE = i18n.translate('xpack.csp.findings.defaultValueLabel', {
|
||||
defaultMessage: 'Default Value',
|
||||
});
|
||||
|
||||
export const RATIONALE = i18n.translate('xpack.csp.findings.rationaleLabel', {
|
||||
defaultMessage: 'Rationale',
|
||||
});
|
||||
|
||||
export const SEARCH_FAILED = i18n.translate('xpack.csp.findings.searchFailedLabel', {
|
||||
defaultMessage: 'Search failed',
|
||||
});
|
||||
|
||||
export const TAGS = i18n.translate('xpack.csp.findings.tagsLabel', {
|
||||
defaultMessage: 'Tags',
|
||||
});
|
||||
|
||||
export const RULE_NAME = i18n.translate('xpack.csp.findings.ruleNameLabel', {
|
||||
defaultMessage: 'Rule Name',
|
||||
});
|
||||
|
||||
export const OS = i18n.translate('xpack.csp.findings.osLabel', {
|
||||
defaultMessage: 'OS',
|
||||
});
|
||||
|
||||
export const RESOURCE = i18n.translate('xpack.csp.findings.resourceLabel', {
|
||||
defaultMessage: 'Resource',
|
||||
});
|
||||
|
||||
export const RESOURCE_NAME = i18n.translate('xpack.csp.findings.resourceNameLabel', {
|
||||
defaultMessage: 'Resource Name',
|
||||
});
|
||||
|
||||
export const GENERAL = i18n.translate('xpack.csp.findings.findingsFlyout.generalTabLabel', {
|
||||
defaultMessage: 'General',
|
||||
});
|
||||
|
||||
export const OVERVIEW = i18n.translate('xpack.csp.findings.findingsFlyout.overviewTabLabel', {
|
||||
defaultMessage: 'Overview',
|
||||
});
|
||||
|
||||
export const JSON = i18n.translate('xpack.csp.findings.findingsFlyout.jsonTabLabel', {
|
||||
defaultMessage: 'JSON',
|
||||
});
|
||||
|
||||
export const RESOURCE_ID = i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.resourceIdColumnLabel',
|
||||
{
|
||||
defaultMessage: 'Resource ID',
|
||||
}
|
||||
);
|
||||
|
||||
export const RESULT = i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.resultColumnLabel',
|
||||
{
|
||||
defaultMessage: 'Result',
|
||||
}
|
||||
);
|
||||
|
||||
export const RESOURCE_TYPE = i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.resourceTypeColumnLabel',
|
||||
{
|
||||
defaultMessage: 'Resource Type',
|
||||
}
|
||||
);
|
||||
|
||||
export const CLUSTER_ID = i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.clusterIdColumnLabel',
|
||||
{
|
||||
defaultMessage: 'Cluster ID',
|
||||
}
|
||||
);
|
||||
|
||||
export const CIS_SECTION = i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.ruleSectionColumnLabel',
|
||||
{
|
||||
defaultMessage: 'CIS Section',
|
||||
}
|
||||
);
|
||||
|
||||
export const LAST_CHECKED = i18n.translate(
|
||||
'xpack.csp.findings.findingsTable.findingsTableColumn.lastCheckedColumnLabel',
|
||||
{
|
||||
defaultMessage: 'Last Checked',
|
||||
}
|
||||
);
|
||||
|
||||
export const FILENAME = i18n.translate('xpack.csp.findings.filenameLabel', {
|
||||
defaultMessage: 'Filename',
|
||||
});
|
||||
|
||||
export const MODE = i18n.translate('xpack.csp.findings.modeLabel', {
|
||||
defaultMessage: 'Mode',
|
||||
});
|
||||
|
||||
export const TYPE = i18n.translate('xpack.csp.findings.typeLabel', {
|
||||
defaultMessage: 'Type',
|
||||
});
|
||||
|
||||
export const PATH = i18n.translate('xpack.csp.findings.pathLabel', {
|
||||
defaultMessage: 'Path',
|
||||
});
|
||||
|
||||
export const UID = i18n.translate('xpack.csp.findings.uidLabel', {
|
||||
defaultMessage: 'UID',
|
||||
});
|
||||
|
||||
export const GID = i18n.translate('xpack.csp.findings.gidLabel', {
|
||||
defaultMessage: 'GID',
|
||||
});
|
||||
|
||||
export const RULE = i18n.translate('xpack.csp.findings.ruleLabel', {
|
||||
defaultMessage: 'Rule',
|
||||
});
|
||||
|
||||
export const DESCRIPTION = i18n.translate('xpack.csp.findings.descriptionLabel', {
|
||||
defaultMessage: 'Description',
|
||||
});
|
||||
|
||||
export const REMEDIATION = i18n.translate('xpack.csp.findings.remediationLabel', {
|
||||
defaultMessage: 'Remediation',
|
||||
});
|
||||
|
||||
export const BENCHMARK = i18n.translate('xpack.csp.findings.benchmarkLabel', {
|
||||
defaultMessage: 'Benchmark',
|
||||
});
|
||||
|
||||
export const SEVERITY = i18n.translate('xpack.csp.findings.severityLabel', {
|
||||
defaultMessage: 'Severity',
|
||||
});
|
||||
|
||||
export const INDEX = i18n.translate('xpack.csp.findings.indexLabel', {
|
||||
defaultMessage: 'Index',
|
||||
});
|
||||
|
||||
export const RULE_EVALUATED_AT = i18n.translate('xpack.csp.findings.ruleEvaluatedAt', {
|
||||
defaultMessage: 'Rule evaluated at',
|
||||
});
|
||||
|
||||
export const EVALUATED_AT = i18n.translate('xpack.csp.findings.evaluatedAt', {
|
||||
defaultMessage: 'Evaluated at',
|
||||
});
|
||||
|
||||
export const FRAMEWORK_SOURCES = i18n.translate('xpack.csp.findings.frameworkSourcesLabel', {
|
||||
defaultMessage: 'Framework Sources',
|
||||
});
|
||||
|
||||
export const SECTION = i18n.translate('xpack.csp.findings.sectionLabel', {
|
||||
defaultMessage: 'Section',
|
||||
});
|
||||
|
||||
export const AUDIT = i18n.translate('xpack.csp.findings.auditLabel', {
|
||||
defaultMessage: 'Audit',
|
||||
});
|
||||
|
||||
export const REFERENCES = i18n.translate(
|
||||
'xpack.csp.findings.findingsFlyout.generalTab.referencesLabel',
|
||||
{
|
||||
defaultMessage: 'References',
|
||||
}
|
||||
);
|
||||
|
||||
export const RESULT_DETAILS = i18n.translate('xpack.csp.findings.resultLabel', {
|
||||
defaultMessage: 'Result Details',
|
||||
});
|
||||
|
||||
export const PROFILE_APPLICABILITY = i18n.translate(
|
||||
'xpack.csp.findings.profileApplicabilityLabel',
|
||||
{ defaultMessage: 'Profile Applicability' }
|
||||
);
|
||||
|
||||
export const EVALUATION = i18n.translate('xpack.csp.findings.evaluationLabel', {
|
||||
defaultMessage: 'Evaluation',
|
||||
});
|
||||
|
||||
export const EXPECTED = i18n.translate('xpack.csp.findings.expectedLabel', {
|
||||
defaultMessage: 'Expected',
|
||||
});
|
||||
|
||||
export const ACTUAL = i18n.translate('xpack.csp.findings.actualLabel', {
|
||||
defaultMessage: 'Actual',
|
||||
});
|
||||
|
||||
export const EVIDENCE = i18n.translate('xpack.csp.findings.evidenceLabel', {
|
||||
defaultMessage: 'Evidence',
|
||||
});
|
||||
|
||||
export const TIMESTAMP = i18n.translate('xpack.csp.findings.timestampLabel', {
|
||||
defaultMessage: 'Timestamp',
|
||||
});
|
||||
|
||||
export const AGENT = i18n.translate('xpack.csp.findings.agentLabel', {
|
||||
defaultMessage: 'Agent',
|
||||
});
|
||||
|
||||
export const VERSION = i18n.translate('xpack.csp.findings.versionLabel', {
|
||||
defaultMessage: 'Version',
|
||||
});
|
||||
|
||||
export const ID = i18n.translate('xpack.csp.findings.idLabel', {
|
||||
defaultMessage: 'ID',
|
||||
});
|
||||
|
||||
export const HOST = i18n.translate('xpack.csp.findings.hostLabel', {
|
||||
defaultMessage: 'Host',
|
||||
});
|
||||
|
||||
export const ARCHITECTURE = i18n.translate('xpack.csp.findings.architectureLabel', {
|
||||
defaultMessage: 'Architecture',
|
||||
});
|
||||
|
||||
export const CONTAINERIZED = i18n.translate('xpack.csp.findings.containerizedLabel', {
|
||||
defaultMessage: 'Containerized',
|
||||
});
|
||||
|
||||
export const HOSTNAME = i18n.translate('xpack.csp.findings.hostnameLabel', {
|
||||
defaultMessage: 'Hostname',
|
||||
});
|
||||
|
||||
export const MAC = i18n.translate('xpack.csp.findings.macLabel', {
|
||||
defaultMessage: 'Mac',
|
||||
});
|
||||
|
||||
export const IP = i18n.translate('xpack.csp.findings.ipLabel', {
|
||||
defaultMessage: 'IP',
|
||||
});
|
||||
|
||||
export const CODENAME = i18n.translate('xpack.csp.findings.codenameLabel', {
|
||||
defaultMessage: 'Codename',
|
||||
});
|
||||
|
||||
export const FAMILY = i18n.translate('xpack.csp.findings.familyLabel', {
|
||||
defaultMessage: 'Family',
|
||||
});
|
||||
|
||||
export const KERNEL = i18n.translate('xpack.csp.findings.kernelLabel', {
|
||||
defaultMessage: 'Kernel',
|
||||
});
|
||||
|
||||
export const PLATFORM = i18n.translate('xpack.csp.findings.platformLabel', {
|
||||
defaultMessage: 'Platform',
|
||||
});
|
||||
|
||||
export const NO_FINDINGS = i18n.translate('xpack.csp.findings.nonFindingsLabel', {
|
||||
defaultMessage: 'There are no Findings',
|
||||
});
|
||||
|
||||
export const DETAILS = i18n.translate('xpack.csp.findings.findingsFlyout.detailsTabLabel', {
|
||||
defaultMessage: 'Details',
|
||||
});
|
||||
|
||||
export const FINDINGS_SEARCH_PLACEHOLDER = i18n.translate(
|
||||
'xpack.csp.findings.searchBar.searchPlaceholder',
|
||||
{ defaultMessage: 'Search findings (eg. rule.section.keyword : "API Server" )' }
|
||||
);
|
||||
|
||||
export const PAGE_SEARCH_ERROR_MESSAGE = i18n.translate(
|
||||
'xpack.csp.findings.errorCallout.pageSearchErrorTitle',
|
||||
{ defaultMessage: 'We encountered an error retrieving search results' }
|
||||
);
|
|
@ -10001,51 +10001,6 @@
|
|||
"xpack.csp.cspPageTemplate.packageNotInstalled.pageTitle": "Installer l'intégration pour commencer",
|
||||
"xpack.csp.cspPageTemplate.packageNotInstalled.solutionNameLabel": "Niveau de sécurité du cloud",
|
||||
"xpack.csp.cspSettings.rules": "Règles de sécurité du CSP - ",
|
||||
"xpack.csp.findings.agentLabel": "Agent",
|
||||
"xpack.csp.findings.architectureLabel": "Architecture",
|
||||
"xpack.csp.findings.auditLabel": "Audit",
|
||||
"xpack.csp.findings.benchmarkLabel": "Benchmark",
|
||||
"xpack.csp.findings.codenameLabel": "Nom de code",
|
||||
"xpack.csp.findings.containerizedLabel": "Conteneurisé",
|
||||
"xpack.csp.findings.defaultValueLabel": "Valeur par défaut",
|
||||
"xpack.csp.findings.descriptionLabel": "Description",
|
||||
"xpack.csp.findings.evaluationLabel": "Évaluation",
|
||||
"xpack.csp.findings.evidenceLabel": "Preuve",
|
||||
"xpack.csp.findings.expectedLabel": "Attendus",
|
||||
"xpack.csp.findings.familyLabel": "Famille",
|
||||
"xpack.csp.findings.filenameLabel": "Nom de fichier",
|
||||
"xpack.csp.findings.frameworkSourcesLabel": "Sources du framework",
|
||||
"xpack.csp.findings.gidLabel": "GID",
|
||||
"xpack.csp.findings.hostLabel": "HÔTE",
|
||||
"xpack.csp.findings.hostnameLabel": "Nom d'hôte",
|
||||
"xpack.csp.findings.idLabel": "ID",
|
||||
"xpack.csp.findings.impactLabel": "Impact",
|
||||
"xpack.csp.findings.indexLabel": "Index",
|
||||
"xpack.csp.findings.ipLabel": "IP",
|
||||
"xpack.csp.findings.kernelLabel": "Kernel",
|
||||
"xpack.csp.findings.macLabel": "Mac",
|
||||
"xpack.csp.findings.modeLabel": "Mode",
|
||||
"xpack.csp.findings.nameLabel": "Nom",
|
||||
"xpack.csp.findings.nonFindingsLabel": "Il n'y a aucun résultat",
|
||||
"xpack.csp.findings.osLabel": "Système d'exploitation",
|
||||
"xpack.csp.findings.pathLabel": "Chemin",
|
||||
"xpack.csp.findings.platformLabel": "Plateforme",
|
||||
"xpack.csp.findings.profileApplicabilityLabel": "Applicabilité du profil",
|
||||
"xpack.csp.findings.rationaleLabel": "Environnement",
|
||||
"xpack.csp.findings.remediationLabel": "Résolution",
|
||||
"xpack.csp.findings.resourceLabel": "Ressource",
|
||||
"xpack.csp.findings.resultLabel": "Détails du résultat",
|
||||
"xpack.csp.findings.ruleEvaluatedAt": "Règle évaluée à",
|
||||
"xpack.csp.findings.ruleLabel": "Règle",
|
||||
"xpack.csp.findings.ruleNameLabel": "Nom de règle",
|
||||
"xpack.csp.findings.searchFailedLabel": "Échec de la recherche",
|
||||
"xpack.csp.findings.sectionLabel": "Section",
|
||||
"xpack.csp.findings.severityLabel": "Sévérité",
|
||||
"xpack.csp.findings.tagsLabel": "Balises",
|
||||
"xpack.csp.findings.timestampLabel": "Horodatage",
|
||||
"xpack.csp.findings.typeLabel": "Type",
|
||||
"xpack.csp.findings.uidLabel": "UID",
|
||||
"xpack.csp.findings.versionLabel": "Version",
|
||||
"xpack.csp.pageTemplate.errorDetails.errorBodyTitle": "{body}",
|
||||
"xpack.csp.pageTemplate.errorDetails.errorCodeTitle": "{error} {statusCode}",
|
||||
"xpack.csp.pageTemplate.loadErrorMessage": "Nous n'avons pas pu récupérer vos données sur le niveau de sécurité du cloud.",
|
||||
|
|
|
@ -10099,51 +10099,6 @@
|
|||
"xpack.csp.cspPageTemplate.packageNotInstalled.pageTitle": "開始するには統合をインストールしてください",
|
||||
"xpack.csp.cspPageTemplate.packageNotInstalled.solutionNameLabel": "クラウドセキュリティ態勢",
|
||||
"xpack.csp.cspSettings.rules": "CSPセキュリティルール - ",
|
||||
"xpack.csp.findings.agentLabel": "エージェント",
|
||||
"xpack.csp.findings.architectureLabel": "アーキテクチャー",
|
||||
"xpack.csp.findings.auditLabel": "監査",
|
||||
"xpack.csp.findings.benchmarkLabel": "ベンチマーク",
|
||||
"xpack.csp.findings.codenameLabel": "コード名",
|
||||
"xpack.csp.findings.containerizedLabel": "コンテナー化",
|
||||
"xpack.csp.findings.defaultValueLabel": "デフォルト値",
|
||||
"xpack.csp.findings.descriptionLabel": "説明",
|
||||
"xpack.csp.findings.evaluationLabel": "評価",
|
||||
"xpack.csp.findings.evidenceLabel": "証拠",
|
||||
"xpack.csp.findings.expectedLabel": "期待値",
|
||||
"xpack.csp.findings.familyLabel": "ファミリー",
|
||||
"xpack.csp.findings.filenameLabel": "ファイル名",
|
||||
"xpack.csp.findings.frameworkSourcesLabel": "フレームワークソース",
|
||||
"xpack.csp.findings.gidLabel": "GID",
|
||||
"xpack.csp.findings.hostLabel": "ホスト",
|
||||
"xpack.csp.findings.hostnameLabel": "ホスト名",
|
||||
"xpack.csp.findings.idLabel": "ID",
|
||||
"xpack.csp.findings.impactLabel": "インパクト",
|
||||
"xpack.csp.findings.indexLabel": "インデックス",
|
||||
"xpack.csp.findings.ipLabel": "IP",
|
||||
"xpack.csp.findings.kernelLabel": "カーネル",
|
||||
"xpack.csp.findings.macLabel": "Mac",
|
||||
"xpack.csp.findings.modeLabel": "モード",
|
||||
"xpack.csp.findings.nameLabel": "名前",
|
||||
"xpack.csp.findings.nonFindingsLabel": "調査結果はありません",
|
||||
"xpack.csp.findings.osLabel": "OS",
|
||||
"xpack.csp.findings.pathLabel": "パス",
|
||||
"xpack.csp.findings.platformLabel": "プラットフォーム",
|
||||
"xpack.csp.findings.profileApplicabilityLabel": "プロファイル適用性",
|
||||
"xpack.csp.findings.rationaleLabel": "根拠",
|
||||
"xpack.csp.findings.remediationLabel": "修正",
|
||||
"xpack.csp.findings.resourceLabel": "リソース",
|
||||
"xpack.csp.findings.resultLabel": "結果詳細",
|
||||
"xpack.csp.findings.ruleEvaluatedAt": "ルール評価日",
|
||||
"xpack.csp.findings.ruleLabel": "ルール",
|
||||
"xpack.csp.findings.ruleNameLabel": "ルール名",
|
||||
"xpack.csp.findings.searchFailedLabel": "検索失敗",
|
||||
"xpack.csp.findings.sectionLabel": "セクション",
|
||||
"xpack.csp.findings.severityLabel": "深刻度",
|
||||
"xpack.csp.findings.tagsLabel": "タグ",
|
||||
"xpack.csp.findings.timestampLabel": "タイムスタンプ",
|
||||
"xpack.csp.findings.typeLabel": "型",
|
||||
"xpack.csp.findings.uidLabel": "UID",
|
||||
"xpack.csp.findings.versionLabel": "バージョン",
|
||||
"xpack.csp.pageTemplate.errorDetails.errorBodyTitle": "{body}",
|
||||
"xpack.csp.pageTemplate.errorDetails.errorCodeTitle": "{error} {statusCode}",
|
||||
"xpack.csp.pageTemplate.loadErrorMessage": "クラウドセキュリティ態勢データを取得できませんでした",
|
||||
|
|
|
@ -10115,51 +10115,6 @@
|
|||
"xpack.csp.cspPageTemplate.packageNotInstalled.pageTitle": "安装集成以开始",
|
||||
"xpack.csp.cspPageTemplate.packageNotInstalled.solutionNameLabel": "云安全态势",
|
||||
"xpack.csp.cspSettings.rules": "CSP 安全规则 - ",
|
||||
"xpack.csp.findings.agentLabel": "代理",
|
||||
"xpack.csp.findings.architectureLabel": "架构",
|
||||
"xpack.csp.findings.auditLabel": "审计",
|
||||
"xpack.csp.findings.benchmarkLabel": "基准",
|
||||
"xpack.csp.findings.codenameLabel": "代号",
|
||||
"xpack.csp.findings.containerizedLabel": "容器化",
|
||||
"xpack.csp.findings.defaultValueLabel": "默认值",
|
||||
"xpack.csp.findings.descriptionLabel": "描述",
|
||||
"xpack.csp.findings.evaluationLabel": "评估",
|
||||
"xpack.csp.findings.evidenceLabel": "证据",
|
||||
"xpack.csp.findings.expectedLabel": "预期",
|
||||
"xpack.csp.findings.familyLabel": "系列",
|
||||
"xpack.csp.findings.filenameLabel": "文件名",
|
||||
"xpack.csp.findings.frameworkSourcesLabel": "框架源",
|
||||
"xpack.csp.findings.gidLabel": "GID",
|
||||
"xpack.csp.findings.hostLabel": "主机",
|
||||
"xpack.csp.findings.hostnameLabel": "主机名",
|
||||
"xpack.csp.findings.idLabel": "ID",
|
||||
"xpack.csp.findings.impactLabel": "影响",
|
||||
"xpack.csp.findings.indexLabel": "索引",
|
||||
"xpack.csp.findings.ipLabel": "IP",
|
||||
"xpack.csp.findings.kernelLabel": "内核",
|
||||
"xpack.csp.findings.macLabel": "Mac",
|
||||
"xpack.csp.findings.modeLabel": "模式",
|
||||
"xpack.csp.findings.nameLabel": "名称",
|
||||
"xpack.csp.findings.nonFindingsLabel": "无结果",
|
||||
"xpack.csp.findings.osLabel": "OS",
|
||||
"xpack.csp.findings.pathLabel": "路径",
|
||||
"xpack.csp.findings.platformLabel": "平台",
|
||||
"xpack.csp.findings.profileApplicabilityLabel": "配置文件适用性",
|
||||
"xpack.csp.findings.rationaleLabel": "理由",
|
||||
"xpack.csp.findings.remediationLabel": "补救",
|
||||
"xpack.csp.findings.resourceLabel": "资源",
|
||||
"xpack.csp.findings.resultLabel": "结果详情",
|
||||
"xpack.csp.findings.ruleEvaluatedAt": "规则评估时间",
|
||||
"xpack.csp.findings.ruleLabel": "规则",
|
||||
"xpack.csp.findings.ruleNameLabel": "规则名称",
|
||||
"xpack.csp.findings.searchFailedLabel": "搜索失败",
|
||||
"xpack.csp.findings.sectionLabel": "部分",
|
||||
"xpack.csp.findings.severityLabel": "严重性",
|
||||
"xpack.csp.findings.tagsLabel": "标签",
|
||||
"xpack.csp.findings.timestampLabel": "时间戳",
|
||||
"xpack.csp.findings.typeLabel": "类型",
|
||||
"xpack.csp.findings.uidLabel": "UID",
|
||||
"xpack.csp.findings.versionLabel": "版本",
|
||||
"xpack.csp.pageTemplate.errorDetails.errorBodyTitle": "{body}",
|
||||
"xpack.csp.pageTemplate.errorDetails.errorCodeTitle": "{error} {statusCode}",
|
||||
"xpack.csp.pageTemplate.loadErrorMessage": "我们无法提取您的云安全态势数据",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue