Skip to content

Commit 41e4f1f

Browse files
authored
Merge pull request #1486 from swaroopar/feature/fixRetryUpdate
refactor status polling to use order status only
2 parents 7c4cd59 + 95752d1 commit 41e4f1f

File tree

11 files changed

+218
-44
lines changed

11 files changed

+218
-44
lines changed

package.json

-3
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,6 @@
9999
"eslint-config-prettier",
100100
"eslint-plugin-prettier"
101101
],
102-
"ignoreBinaries": [
103-
"zip"
104-
],
105102
"eslint": {
106103
"config": [
107104
"./eslint.config.mjs"

src/components/content/common/queries/useServiceDetailsByServiceIdQuery.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ import {
1313
taskStatus,
1414
} from '../../../../xpanse-api/generated';
1515

16+
const GET_SERVICE_DETAILS_QUERY_ID = 'getServiceDetailsById';
17+
1618
export function useServiceDetailsByServiceIdQuery(
1719
serviceId: string | undefined,
1820
currentServiceHostingType: string,
1921
currentServiceOrderTaskStatus: string | undefined
2022
) {
2123
return useQuery({
22-
queryKey: ['getServiceDetailsById', serviceId, currentServiceHostingType],
24+
queryKey: [GET_SERVICE_DETAILS_QUERY_ID, serviceId, currentServiceHostingType],
2325
queryFn: () => {
2426
if (currentServiceHostingType === serviceHostingType.SELF.toString()) {
2527
const data: GetSelfHostedServiceDetailsByIdData = {
@@ -41,3 +43,10 @@ export function useServiceDetailsByServiceIdQuery(
4143
gcTime: Infinity,
4244
});
4345
}
46+
47+
export function getQueryKeyForServiceDetailsByServiceIdQuery(
48+
serviceId: string,
49+
currentServiceHostingType: string
50+
): string[] {
51+
return [GET_SERVICE_DETAILS_QUERY_ID, serviceId, currentServiceHostingType];
52+
}

src/components/content/deployedServices/myServices/MyServices.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ function MyServices(): React.JSX.Element {
157157

158158
const serviceDestroyQuery = useDestroyRequestSubmitQuery();
159159
const servicePurgeQuery = usePurgeRequestSubmitQuery();
160-
const redeployFailedDeploymentQuery = useRedeployFailedDeploymentQuery();
160+
const redeployFailedDeploymentQuery = useRedeployFailedDeploymentQuery(
161+
activeRecord ? (activeRecord.serviceHostingType as serviceHostingType) : serviceHostingType.SELF
162+
);
161163
const serviceRecreateRequest = useRecreateRequest();
162164

163165
const serviceStateStartQuery = useServiceStateStartQuery();

src/components/content/order/create/OrderSubmit.tsx

+2-10
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { isHandleKnownErrorResponse } from '../../common/error/isHandleKnownErro
2222
import { ContactDetailsShowType } from '../../common/ocl/ContactDetailsShowType.ts';
2323
import { ContactDetailsText } from '../../common/ocl/ContactDetailsText.tsx';
2424
import { useLatestServiceOrderStatusQuery } from '../../common/queries/useLatestServiceOrderStatusQuery.ts';
25-
import { useServiceDetailsByServiceIdQuery } from '../../common/queries/useServiceDetailsByServiceIdQuery.ts';
2625
import { EulaInfo } from '../common/EulaInfo';
2726
import { IsvNameDisplay } from '../common/IsvNameDisplay.tsx';
2827
import { ServiceTitle } from '../common/ServiceTitle.tsx';
@@ -41,7 +40,7 @@ function OrderSubmit(state: OrderSubmitProps): React.JSX.Element {
4140
const [isShowDeploymentResult, setIsShowDeploymentResult] = useState<boolean>(false);
4241
const uniqueRequestId = useRef(v4());
4342
const submitDeploymentRequest = useDeployRequestSubmitQuery();
44-
const redeployFailedDeploymentQuery = useRedeployFailedDeploymentQuery();
43+
const redeployFailedDeploymentQuery = useRedeployFailedDeploymentQuery(state.serviceHostingType);
4544
const getSubmitLatestServiceOrderStatusQuery = useLatestServiceOrderStatusQuery(
4645
redeployFailedDeploymentQuery.isSuccess
4746
? redeployFailedDeploymentQuery.data.orderId
@@ -50,12 +49,6 @@ function OrderSubmit(state: OrderSubmitProps): React.JSX.Element {
5049
[taskStatus.SUCCESSFUL, taskStatus.FAILED]
5150
);
5251

53-
const getServiceDetailsByIdQuery = useServiceDetailsByServiceIdQuery(
54-
submitDeploymentRequest.data?.serviceId ?? '',
55-
state.serviceHostingType,
56-
getSubmitLatestServiceOrderStatusQuery.data?.taskStatus
57-
);
58-
5952
const orderableServicesQuery = userOrderableServicesQuery(state.category, state.name);
6053

6154
const [cacheFormVariable] = useOrderFormStore((state) => [state.addDeployVariable]);
@@ -227,12 +220,11 @@ function OrderSubmit(state: OrderSubmitProps): React.JSX.Element {
227220
{isShowDeploymentResult ? (
228221
<OrderSubmitStatusAlert
229222
key={uniqueRequestId.current}
230-
uuid={submitDeploymentRequest.data?.serviceId ?? ''}
223+
serviceId={submitDeploymentRequest.data?.serviceId ?? ''}
231224
serviceHostType={state.serviceHostingType}
232225
submitDeploymentRequest={submitDeploymentRequest}
233226
redeployFailedDeploymentQuery={redeployFailedDeploymentQuery}
234227
getSubmitLatestServiceOrderStatusQuery={getSubmitLatestServiceOrderStatusQuery}
235-
deployedServiceDetails={getServiceDetailsByIdQuery.data}
236228
serviceProviderContactDetails={state.contactServiceDetails}
237229
retryRequest={retryRequest}
238230
onClose={onClose}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* SPDX-FileCopyrightText: Huawei Inc.
4+
*/
5+
6+
import { Skeleton } from 'antd';
7+
import React from 'react';
8+
import submitResultStyles from '../../../../styles/submit-result.module.css';
9+
import { serviceHostingType, ServiceOrderStatusUpdate } from '../../../../xpanse-api/generated';
10+
import { convertMapToDetailsList } from '../../../utils/convertMapToDetailsList.tsx';
11+
import FallbackSkeleton from '../../common/lazy/FallBackSkeleton.tsx';
12+
import { useServiceDetailsByServiceIdQuery } from '../../common/queries/useServiceDetailsByServiceIdQuery.ts';
13+
import { OperationType } from '../types/OperationType.ts';
14+
15+
export function OrderEndPointDetails({
16+
serviceOrderStatus,
17+
serviceId,
18+
selectedServiceHostingType,
19+
operationType,
20+
}: {
21+
serviceOrderStatus: ServiceOrderStatusUpdate;
22+
serviceId: string;
23+
selectedServiceHostingType: serviceHostingType;
24+
operationType: OperationType;
25+
}): React.JSX.Element {
26+
const endPointMap = new Map<string, string>();
27+
const deployServiceDetailsQuery = useServiceDetailsByServiceIdQuery(
28+
serviceId,
29+
selectedServiceHostingType,
30+
serviceOrderStatus.taskStatus
31+
);
32+
if (
33+
deployServiceDetailsQuery.isPending ||
34+
deployServiceDetailsQuery.isFetching ||
35+
deployServiceDetailsQuery.isRefetching
36+
) {
37+
return <Skeleton />;
38+
}
39+
if (deployServiceDetailsQuery.data) {
40+
if (deployServiceDetailsQuery.data.deployedServiceProperties) {
41+
for (const key in deployServiceDetailsQuery.data.deployedServiceProperties) {
42+
endPointMap.set(key, deployServiceDetailsQuery.data.deployedServiceProperties[key]);
43+
}
44+
}
45+
if (endPointMap.size > 0) {
46+
return (
47+
<>
48+
<span>
49+
{operationType === OperationType.Deploy ? 'Deployment Successful' : 'Modification Successful'}
50+
</span>
51+
<div className={submitResultStyles.resultContainer}>
52+
{convertMapToDetailsList(endPointMap, 'Endpoint Information')}
53+
</div>
54+
</>
55+
);
56+
} else {
57+
return (
58+
<span>
59+
{operationType === OperationType.Deploy ? 'Deployment Successful' : 'Modification Successful'}
60+
</span>
61+
);
62+
}
63+
}
64+
return <FallbackSkeleton />;
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* SPDX-FileCopyrightText: Huawei Inc.
4+
*/
5+
6+
import React from 'react';
7+
import { serviceHostingType, ServiceOrderStatusUpdate } from '../../../../xpanse-api/generated';
8+
import { OperationType } from '../types/OperationType';
9+
import { OrderEndPointDetails } from './OrderEndPointDetails.tsx';
10+
11+
export const OrderProcessingStatus = ({
12+
operationType,
13+
serviceOrderStatus,
14+
serviceId,
15+
selectedServiceHostingType,
16+
}: {
17+
operationType: OperationType;
18+
serviceOrderStatus: ServiceOrderStatusUpdate;
19+
serviceId: string;
20+
selectedServiceHostingType: serviceHostingType;
21+
}): React.JSX.Element => {
22+
const errorMsg: string = 'Please contact service vendor for error details.';
23+
if (operationType === OperationType.Deploy) {
24+
if (serviceOrderStatus.taskStatus === 'successful') {
25+
return (
26+
<OrderEndPointDetails
27+
serviceOrderStatus={serviceOrderStatus}
28+
serviceId={serviceId}
29+
selectedServiceHostingType={selectedServiceHostingType}
30+
operationType={operationType}
31+
/>
32+
);
33+
} else if (serviceOrderStatus.taskStatus === 'failed') {
34+
return (
35+
<div>
36+
<span>{serviceOrderStatus.error?.errorType.toString()}</span>
37+
<div>
38+
{selectedServiceHostingType === serviceHostingType.SELF
39+
? serviceOrderStatus.error?.details.join()
40+
: errorMsg}
41+
</div>
42+
</div>
43+
);
44+
}
45+
}
46+
47+
if (operationType === OperationType.Modify) {
48+
if (serviceOrderStatus.taskStatus === 'successful') {
49+
return (
50+
<OrderEndPointDetails
51+
serviceOrderStatus={serviceOrderStatus}
52+
serviceId={serviceId}
53+
selectedServiceHostingType={selectedServiceHostingType}
54+
operationType={operationType}
55+
/>
56+
);
57+
} else if (serviceOrderStatus.taskStatus === 'failed') {
58+
return (
59+
<div>
60+
<span>{'Modification Failed.'}</span>
61+
<div>
62+
{selectedServiceHostingType === serviceHostingType.SELF
63+
? serviceOrderStatus.error?.details.join()
64+
: errorMsg}
65+
</div>
66+
</div>
67+
);
68+
}
69+
}
70+
71+
if (operationType === OperationType.Destroy) {
72+
if (serviceOrderStatus.taskStatus === 'successful') {
73+
return (
74+
<div>
75+
<span>{'Destroyed Successfully'}</span>
76+
</div>
77+
);
78+
} else if (serviceOrderStatus.taskStatus === 'failed') {
79+
return (
80+
<div>
81+
<span>{'Destroyed Failed.'}</span>
82+
<div>
83+
{selectedServiceHostingType === serviceHostingType.SELF
84+
? serviceOrderStatus.error?.details.join()
85+
: errorMsg}
86+
</div>
87+
</div>
88+
);
89+
}
90+
}
91+
return <></>;
92+
};

src/components/content/order/orderStatus/OrderSubmitStatusAlert.tsx

+25-12
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { UseMutationResult, UseQueryResult } from '@tanstack/react-query';
77
import React, { useMemo } from 'react';
88
import { useStopwatch } from 'react-timer-hook';
99
import {
10-
DeployedServiceDetails,
1110
DeployRequest,
1211
ErrorResponse,
1312
serviceHostingType,
@@ -19,28 +18,26 @@ import {
1918
import { convertStringArrayToUnorderedList } from '../../../utils/generateUnorderedList';
2019
import { isHandleKnownErrorResponse } from '../../common/error/isHandleKnownErrorResponse.ts';
2120
import { OperationType } from '../types/OperationType';
21+
import { OrderProcessingStatus } from './OrderProcessingStatus.tsx';
2222
import { OrderSubmitResult } from './OrderSubmitResult';
23-
import { ProcessingStatus } from './ProcessingStatus';
2423

2524
function OrderSubmitStatusAlert({
26-
uuid,
25+
serviceId,
2726
serviceHostType,
2827
submitDeploymentRequest,
2928
redeployFailedDeploymentQuery,
3029
getSubmitLatestServiceOrderStatusQuery,
31-
deployedServiceDetails,
3230
serviceProviderContactDetails,
3331
retryRequest,
3432
onClose,
3533
}: {
36-
uuid: string;
34+
serviceId: string;
3735
serviceHostType: serviceHostingType;
3836
submitDeploymentRequest:
3937
| UseMutationResult<ServiceOrder, Error, DeployRequest>
4038
| UseMutationResult<ServiceOrder, Error, string>;
4139
redeployFailedDeploymentQuery: UseMutationResult<ServiceOrder, Error, string>;
4240
getSubmitLatestServiceOrderStatusQuery: UseQueryResult<ServiceOrderStatusUpdate>;
43-
deployedServiceDetails: DeployedServiceDetails | undefined;
4441
serviceProviderContactDetails: ServiceProviderContactDetails | undefined;
4542
retryRequest: () => void;
4643
onClose: () => void;
@@ -76,7 +73,14 @@ function OrderSubmitStatusAlert({
7673
taskStatus.SUCCESSFUL.toString() ||
7774
getSubmitLatestServiceOrderStatusQuery.data.taskStatus.toString() === taskStatus.FAILED.toString())
7875
) {
79-
return <ProcessingStatus response={deployedServiceDetails} operationType={OperationType.Deploy} />;
76+
return (
77+
<OrderProcessingStatus
78+
operationType={OperationType.Deploy}
79+
serviceOrderStatus={getSubmitLatestServiceOrderStatusQuery.data}
80+
serviceId={serviceId}
81+
selectedServiceHostingType={serviceHostType}
82+
/>
83+
);
8084
} else if (getSubmitLatestServiceOrderStatusQuery.isError) {
8185
if (serviceHostType === serviceHostingType.SERVICE_VENDOR) {
8286
return 'Deployment status polling failed. Please visit MyServices page to check the status of the request and contact service vendor for error details.';
@@ -91,11 +95,20 @@ function OrderSubmitStatusAlert({
9195
}
9296
}
9397
}, [
98+
submitDeploymentRequest.isPending,
99+
submitDeploymentRequest.isError,
100+
submitDeploymentRequest.isSuccess,
101+
submitDeploymentRequest.error,
102+
redeployFailedDeploymentQuery.isPending,
103+
redeployFailedDeploymentQuery.isError,
104+
redeployFailedDeploymentQuery.isSuccess,
105+
redeployFailedDeploymentQuery.error,
106+
getSubmitLatestServiceOrderStatusQuery.isSuccess,
107+
getSubmitLatestServiceOrderStatusQuery.data,
108+
getSubmitLatestServiceOrderStatusQuery.isError,
109+
getSubmitLatestServiceOrderStatusQuery.isPending,
110+
serviceId,
94111
serviceHostType,
95-
deployedServiceDetails,
96-
submitDeploymentRequest,
97-
redeployFailedDeploymentQuery,
98-
getSubmitLatestServiceOrderStatusQuery,
99112
]);
100113

101114
const alertType = useMemo(() => {
@@ -156,7 +169,7 @@ function OrderSubmitStatusAlert({
156169
) {
157170
return submitDeploymentRequest.error.body.serviceId as string;
158171
} else {
159-
return uuid;
172+
return serviceId;
160173
}
161174
}
162175
};

src/components/content/order/orderStatus/ProcessingStatus.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const ProcessingStatus = ({
1818
}): React.JSX.Element => {
1919
const errorMsg: string = 'Please contact service vendor for error details.';
2020
const endPointMap = new Map<string, string>();
21-
if (operationType === (OperationType.Deploy as OperationType)) {
21+
if (operationType === OperationType.Deploy) {
2222
if (response?.serviceDeploymentState === serviceDeploymentState.DEPLOYMENT_SUCCESSFUL) {
2323
if (response.deployedServiceProperties) {
2424
for (const key in response.deployedServiceProperties) {
@@ -49,7 +49,7 @@ export const ProcessingStatus = ({
4949
}
5050
}
5151

52-
if (operationType === (OperationType.Modify as OperationType)) {
52+
if (operationType === OperationType.Modify) {
5353
if (response?.serviceDeploymentState === serviceDeploymentState.MODIFICATION_SUCCESSFUL) {
5454
if (response.deployedServiceProperties) {
5555
for (const key in response.deployedServiceProperties) {
@@ -80,7 +80,7 @@ export const ProcessingStatus = ({
8080
}
8181
}
8282

83-
if (operationType === (OperationType.Destroy as OperationType)) {
83+
if (operationType === OperationType.Destroy) {
8484
if (response?.serviceDeploymentState === serviceDeploymentState.DESTROY_SUCCESSFUL) {
8585
return (
8686
<div>

src/components/content/order/retryDeployment/RetryServiceSubmit.tsx

+1-8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
ServiceOrderStatusUpdate,
1414
ServiceProviderContactDetails,
1515
} from '../../../../xpanse-api/generated';
16-
import { useServiceDetailsByServiceIdQuery } from '../../common/queries/useServiceDetailsByServiceIdQuery.ts';
1716
import OrderSubmitStatusAlert from '../orderStatus/OrderSubmitStatusAlert.tsx';
1817

1918
export const RetryServiceSubmit = ({
@@ -35,20 +34,14 @@ export const RetryServiceSubmit = ({
3534
retryRequest: () => void;
3635
onClose: () => void;
3736
}): React.JSX.Element => {
38-
const getServiceDetailsQuery = useServiceDetailsByServiceIdQuery(
39-
currentSelectedService.serviceId,
40-
currentSelectedService.serviceHostingType,
41-
getSubmitLatestServiceOrderStatusQuery.data?.taskStatus
42-
);
4337
return (
4438
<>
4539
<OrderSubmitStatusAlert
46-
uuid={currentSelectedService.serviceId}
40+
serviceId={currentSelectedService.serviceId}
4741
serviceHostType={currentSelectedService.serviceHostingType as serviceHostingType}
4842
submitDeploymentRequest={submitDeploymentRequest}
4943
redeployFailedDeploymentQuery={redeployFailedDeploymentQuery}
5044
getSubmitLatestServiceOrderStatusQuery={getSubmitLatestServiceOrderStatusQuery}
51-
deployedServiceDetails={getServiceDetailsQuery.data}
5245
serviceProviderContactDetails={serviceProviderContactDetails}
5346
retryRequest={retryRequest}
5447
onClose={onClose}

0 commit comments

Comments
 (0)