public async Task UpdateInstallationStatusAsync()

in src/PatchOrchestrationApplication/NodeAgentSFUtility/src/CommandProcessor.cs [339:447]


        public async Task<NodeAgentSfUtilityExitCodes> UpdateInstallationStatusAsync(String nodeName, Uri applicationName, 
            NodeAgentSfUtilityExitCodes updateState, WindowsUpdateOperationResult operationResult,
            TimeSpan timeout, CancellationToken cancellationToken)
        {
            NodeAgentSfUtilityExitCodes result;
            String resultDetails = null;

            if (operationResult != null)
            {
                int succeededOperations;
                int abortedOperations;
                int totalOperations;
                this.GetWuOperationResultCount(operationResult,out totalOperations,out abortedOperations,out succeededOperations);

                result =
                    await
                    CoordinatorServiceHelper.UpdateWuOperationResult(
                        this.fabricClient,
                        applicationName,
                        operationResult,
                        timeout,
                        cancellationToken);
                if (result != NodeAgentSfUtilityExitCodes.Success)
                {
                    return result;
                }

                resultDetails =
                    String.Format(
                        "{0} out of {1} updates were installed successfully, {2} were aborted",
                        succeededOperations,
                        operationResult.UpdateDetails.Count,
                        abortedOperations);
            }

            switch (updateState)
            {
                case NodeAgentSfUtilityExitCodes.InstallationCompleted:
                {
                    result =
                        await
                        RepairManagerHelper.UpdateRepairTask(
                            this.fabricClient,
                            nodeName,
                            RepairTaskState.Executing,
                            RepairTaskResult.Pending,
                            resultDetails,
                            NodeAgentSfUtilityExitCodes.InstallationCompleted,
                            timeout,
                            cancellationToken);
                    break;
                }

                case NodeAgentSfUtilityExitCodes.InstallationInProgress:
                {
                    result = await
                        RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
                            RepairTaskState.Executing, RepairTaskResult.Pending, resultDetails, NodeAgentSfUtilityExitCodes.InstallationInProgress, timeout,
                            cancellationToken);
                    break;
                }

                case NodeAgentSfUtilityExitCodes.RestartRequested:
                {
                    resultDetails = "Installation of the updates completed, Restart pending";
                    result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
                        RepairTaskState.Executing, RepairTaskResult.Pending,
                        resultDetails, NodeAgentSfUtilityExitCodes.RestartRequested, timeout, cancellationToken, DateTime.UtcNow);
                    break;
                }

                case NodeAgentSfUtilityExitCodes.RestartNotNeeded:
                {
                    resultDetails = "Installation of the updates completed, Restart not needed";
                    result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
                        RepairTaskState.Executing, RepairTaskResult.Pending,
                        resultDetails, NodeAgentSfUtilityExitCodes.RestartNotNeeded, timeout, cancellationToken);
                    break;
                }

                case NodeAgentSfUtilityExitCodes.RestartCompleted:
                {
                    resultDetails = "Installation of the updates completed, Restart post installation completed successfully";
                    result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
                        RepairTaskState.Executing, RepairTaskResult.Pending,
                        resultDetails, NodeAgentSfUtilityExitCodes.RestartCompleted, timeout, cancellationToken);
                    break;
                }

                case NodeAgentSfUtilityExitCodes.OperationCompleted:
                {
                    ServiceEventSource.Current.InfoMessage(String.Format("Mark the operation as completed"));
                    result = await RepairManagerHelper.UpdateRepairTask(this.fabricClient, nodeName,
                        RepairTaskState.Restoring, RepairTaskResult.Succeeded,
                        resultDetails, NodeAgentSfUtilityExitCodes.OperationCompleted, timeout, cancellationToken);
                    break;
                }

                default:
                {
                    ServiceEventSource.Current.ErrorMessage(String.Format("UpdateInstallationStatusAsync called with invalid state {0}", updateState));
                    result = NodeAgentSfUtilityExitCodes.InvalidArgument;
                    break;
                }
            }

            ServiceEventSource.Current.InfoMessage("UpdateInstallationStatusAsync result = {0}", result);
            return result;
        }