Skip to content

Commit 12402ee

Browse files
Merge pull request #3224 from galkremer1/CNV-61658-self-validation-part-1
CNV-61658: Self validation checkup feature - part 1
2 parents 02f2f9e + c4c450b commit 12402ee

19 files changed

+242
-119
lines changed

locales/en/plugin__kubevirt-plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@
504504
"Delete VirtualMachineInstancetype?": "Delete VirtualMachineInstancetype?",
505505
"Delete VirtualMachinePreference?": "Delete VirtualMachinePreference?",
506506
"Delete VirtualMachineSnapshot?": "Delete VirtualMachineSnapshot?",
507+
"Deleting": "Deleting",
507508
"Deleting a network interface is supported only on VirtualMachines that were created in versions greater than 4.13.": "Deleting a network interface is supported only on VirtualMachines that were created in versions greater than 4.13.",
508509
"Deletion protection": "Deletion protection",
509510
"Deprecated": "Deprecated",

locales/es/plugin__kubevirt-plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@
509509
"Delete VirtualMachineInstancetype?": "¿Desea eliminar VirtualMachineInstancetype?",
510510
"Delete VirtualMachinePreference?": "¿Desea eliminar VirtualMachinePreference?",
511511
"Delete VirtualMachineSnapshot?": "¿Desea eliminar VirtualMachineSnapshot?",
512+
"Deleting": "Deleting",
512513
"Deleting a network interface is supported only on VirtualMachines that were created in versions greater than 4.13.": "La eliminación de una interfaz de red solo se admite en VirtualMachines creadas en versiones posteriores a la versión 4.13.",
513514
"Deletion protection": "Protección contra eliminación",
514515
"Deprecated": "Obsoleto",

locales/fr/plugin__kubevirt-plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@
509509
"Delete VirtualMachineInstancetype?": "Supprimer VirtualMachineInstancetype\u00a0?",
510510
"Delete VirtualMachinePreference?": "Supprimer VirtualMachinePreference\u00a0?",
511511
"Delete VirtualMachineSnapshot?": "Supprimer VirtualMachineSnapshot\u00a0?",
512+
"Deleting": "Deleting",
512513
"Deleting a network interface is supported only on VirtualMachines that were created in versions greater than 4.13.": "La suppression d'une interface réseau est prise en charge uniquement sur les machines virtuelles créées dans des versions supérieures à 4.13.",
513514
"Deletion protection": "Protection contre la suppression",
514515
"Deprecated": "Obsolète",

locales/ja/plugin__kubevirt-plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@
504504
"Delete VirtualMachineInstancetype?": "VirtualMachineInstancetype を削除しますか?",
505505
"Delete VirtualMachinePreference?": "VirtualMachinePreference を削除しますか?",
506506
"Delete VirtualMachineSnapshot?": "VirtualMachineSnapshot を削除しますか?",
507+
"Deleting": "Deleting",
507508
"Deleting a network interface is supported only on VirtualMachines that were created in versions greater than 4.13.": "ネットワークインターフェイスの削除は、バージョン 4.13 以降で作成された VirtualMachine でのみサポートされています。",
508509
"Deletion protection": "削除保護",
509510
"Deprecated": "非推奨機能",

locales/ko/plugin__kubevirt-plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@
504504
"Delete VirtualMachineInstancetype?": "VirtualMachineInstancetype을 삭제하시겠습니까?",
505505
"Delete VirtualMachinePreference?": "VirtualMachinePreference를 삭제하시겠습니까?",
506506
"Delete VirtualMachineSnapshot?": "VirtualMachineSnapshot을 삭제하시겠습니까?",
507+
"Deleting": "Deleting",
507508
"Deleting a network interface is supported only on VirtualMachines that were created in versions greater than 4.13.": "네트워크 인터페이스 삭제는 4.13 이상 버전에서 생성된 VirtualMachines에서만 지원됩니다.",
508509
"Deletion protection": "삭제 보호",
509510
"Deprecated": "더 이상 사용되지 않음",

locales/zh/plugin__kubevirt-plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@
504504
"Delete VirtualMachineInstancetype?": "删除 VirtualMachineInstancetype?",
505505
"Delete VirtualMachinePreference?": "删除 VirtualMachinePreference?",
506506
"Delete VirtualMachineSnapshot?": "删除 VirtualMachineSnapshot?",
507+
"Deleting": "Deleting",
507508
"Deleting a network interface is supported only on VirtualMachines that were created in versions greater than 4.13.": "只有在版本高于 4.13 中创建的 VirtualMachines 上才支持删除网络接口。",
508509
"Deletion protection": "删除保护",
509510
"Deprecated": "已弃用",
Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
1-
import React, { FC } from 'react';
1+
import React, { FC, ReactNode } from 'react';
22

33
import { JobModel, modelToGroupVersionKind } from '@kubevirt-ui/kubevirt-api/console';
44
import { IoK8sApiBatchV1Job } from '@kubevirt-ui/kubevirt-api/kubernetes';
5-
import { NO_DATA_DASH } from '@kubevirt-utils/resources/vm/utils/constants';
65
import {
76
ResourceLink,
87
RowProps,
98
TableData,
109
Timestamp,
1110
} from '@openshift-console/dynamic-plugin-sdk';
1211

13-
import CheckupsNetworkStatusIcon from './CheckupsNetworkStatusIcon';
12+
import CheckupsStatusIcon from './CheckupsStatusIcon';
1413

15-
const CheckupsNetworkDetailsPageHistoryRow: FC<
16-
RowProps<IoK8sApiBatchV1Job, { job: IoK8sApiBatchV1Job }>
17-
> = ({ activeColumnIDs, obj: job }) => {
14+
export type CheckupsDetailsPageHistoryRowData = {
15+
customActions?: (job: IoK8sApiBatchV1Job) => ReactNode;
16+
};
17+
18+
const CheckupsDetailsPageHistoryRow: FC<
19+
RowProps<IoK8sApiBatchV1Job, CheckupsDetailsPageHistoryRowData>
20+
> = ({ activeColumnIDs, obj: job, rowData }) => {
1821
return (
1922
<>
2023
<TableData activeColumnIDs={activeColumnIDs} id="job">
@@ -25,13 +28,19 @@ const CheckupsNetworkDetailsPageHistoryRow: FC<
2528
/>
2629
</TableData>
2730
<TableData activeColumnIDs={activeColumnIDs} id="status">
28-
<CheckupsNetworkStatusIcon job={job} onlyJob={true} />
31+
<CheckupsStatusIcon job={job} onlyJob={true} />
32+
</TableData>
33+
<TableData activeColumnIDs={activeColumnIDs} id="start-time">
34+
<Timestamp timestamp={job?.status?.startTime} />
2935
</TableData>
3036
<TableData activeColumnIDs={activeColumnIDs} id="complete-time">
31-
<Timestamp timestamp={job?.status?.completionTime || NO_DATA_DASH} />
37+
<Timestamp timestamp={job?.status?.completionTime} />
38+
</TableData>
39+
<TableData activeColumnIDs={activeColumnIDs} className="pf-v6-c-table__action" id="">
40+
{rowData?.customActions?.(job) || null}
3241
</TableData>
3342
</>
3443
);
3544
};
3645

37-
export default CheckupsNetworkDetailsPageHistoryRow;
46+
export default CheckupsDetailsPageHistoryRow;

src/views/checkups/CheckupsNetworkStatusIcon.tsx renamed to src/views/checkups/CheckupsStatusIcon.tsx

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,50 @@ import React, { FC } from 'react';
33
import { IoK8sApiBatchV1Job, IoK8sApiCoreV1ConfigMap } from '@kubevirt-ui/kubevirt-api/kubernetes';
44
import { useKubevirtTranslation } from '@kubevirt-utils/hooks/useKubevirtTranslation';
55
import { NO_DATA_DASH } from '@kubevirt-utils/resources/vm/utils/constants';
6-
import { Icon as PFIcon } from '@patternfly/react-core';
6+
import { Icon as PFIcon, Spinner } from '@patternfly/react-core';
77
import { CheckCircleIcon, ExclamationCircleIcon, SyncAltIcon } from '@patternfly/react-icons';
88

9-
import { getConfigMapStatus, getJobStatus, NetworkCheckupsStatus } from './utils/utils';
9+
import { CheckupsStatus, getConfigMapStatus, getJobStatus } from './utils/utils';
1010

1111
import './checkups.scss';
1212

13-
type CheckupsNetworkStatusIconProps = {
13+
type CheckupsStatusIconProps = {
1414
configMap?: IoK8sApiCoreV1ConfigMap;
15-
job: IoK8sApiBatchV1Job;
15+
job?: IoK8sApiBatchV1Job;
1616
onlyJob?: boolean;
1717
};
1818

19-
const CheckupsNetworkStatusIcon: FC<CheckupsNetworkStatusIconProps> = ({
20-
configMap,
21-
job,
22-
onlyJob = false,
23-
}) => {
19+
const CheckupsStatusIcon: FC<CheckupsStatusIconProps> = ({ configMap, job, onlyJob = false }) => {
2420
const { t } = useKubevirtTranslation();
25-
const statusJob = getJobStatus(job);
26-
const statusConfigMap = getConfigMapStatus(configMap, statusJob);
21+
const jobStatus = getJobStatus(job);
22+
const configMapStatus = getConfigMapStatus(configMap, jobStatus);
2723

2824
const Icon = {
29-
[NetworkCheckupsStatus.Done]: (
25+
[CheckupsStatus.Deleting]: (
26+
<>
27+
<PFIcon>
28+
<Spinner size="sm" />
29+
</PFIcon>
30+
{t('Deleting')}
31+
</>
32+
),
33+
[CheckupsStatus.Done]: (
3034
<>
3135
<PFIcon status="success">
3236
<CheckCircleIcon />
3337
</PFIcon>
3438
{t('Succeeded')}
3539
</>
3640
),
37-
[NetworkCheckupsStatus.Failed]: (
41+
[CheckupsStatus.Failed]: (
3842
<>
3943
<PFIcon status="danger">
4044
<ExclamationCircleIcon />
4145
</PFIcon>
4246
{t('Failed')}
4347
</>
4448
),
45-
[NetworkCheckupsStatus.Running]: (
49+
[CheckupsStatus.Running]: (
4650
<>
4751
<PFIcon>
4852
<SyncAltIcon />
@@ -55,10 +59,8 @@ const CheckupsNetworkStatusIcon: FC<CheckupsNetworkStatusIconProps> = ({
5559
if (!configMap && !job) return <>{NO_DATA_DASH}</>;
5660

5761
return (
58-
<div className="CheckupsNetworkStatusIcon--main">
59-
{Icon[onlyJob ? statusJob : statusConfigMap]}
60-
</div>
62+
<span className="CheckupsStatusIcon--main">{Icon[onlyJob ? jobStatus : configMapStatus]}</span>
6163
);
6264
};
6365

64-
export default CheckupsNetworkStatusIcon;
66+
export default CheckupsStatusIcon;

src/views/checkups/checkups.scss

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,18 @@
1313
}
1414
}
1515

16-
.CheckupsNetworkStatusIcon {
16+
.CheckupsStatusIcon {
1717
&--main {
18+
display: inline-flex;
19+
align-items: center;
20+
1821
.pf-v6-c-icon {
1922
margin-right: var(--pf-t--global--spacer--xs);
2023
}
2124
}
2225
}
26+
// Make tab content scrollable when there are many checkups
27+
.pf-v6-c-tab-content {
28+
max-height: calc(100vh - 200px);
29+
overflow-y: auto;
30+
}

src/views/checkups/network/details/tabs/details/CheckupsNetworkDetailsPageSection.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import { NO_DATA_DASH } from '@kubevirt-utils/resources/vm/utils/constants';
1414
import { ResourceLink } from '@openshift-console/dynamic-plugin-sdk';
1515
import { DescriptionList, Grid, GridItem, PageSection, Title } from '@patternfly/react-core';
1616

17-
import CheckupsNetworkStatusIcon from '../../../../CheckupsNetworkStatusIcon';
17+
import CheckupsStatusIcon from '../../../../CheckupsStatusIcon';
1818
import {
19-
STATUS_COMPILATION_TIME_STAMP,
19+
STATUS_COMPLETION_TIME_STAMP,
2020
STATUS_FAILURE_REASON,
2121
STATUS_START_TIME_STAMP,
2222
} from '../../../../utils/utils';
@@ -62,7 +62,7 @@ const CheckupsNetworkDetailsPageSection: FC<CheckupsNetworkDetailsPageSectionPro
6262
descriptionHeader={t('Name')}
6363
/>
6464
<DescriptionItem
65-
descriptionData={<CheckupsNetworkStatusIcon configMap={configMap} job={job} />}
65+
descriptionData={<CheckupsStatusIcon configMap={configMap} job={job} />}
6666
descriptionHeader={t('Status')}
6767
/>
6868
<DescriptionItem
@@ -99,7 +99,7 @@ const CheckupsNetworkDetailsPageSection: FC<CheckupsNetworkDetailsPageSectionPro
9999
descriptionHeader={t('Start time')}
100100
/>
101101
<DescriptionItem
102-
descriptionData={configMap?.data?.[STATUS_COMPILATION_TIME_STAMP] || NO_DATA_DASH}
102+
descriptionData={configMap?.data?.[STATUS_COMPLETION_TIME_STAMP] || NO_DATA_DASH}
103103
descriptionHeader={t('Complete time')}
104104
/>
105105
</DescriptionList>

0 commit comments

Comments
 (0)