public async Task <IList <WindowsUpdateNodeResults> > GetWuResults(WindowsUpdateOperationType operationType = WindowsUpdateOperationType.Installation)
        {
            var resultsStore = await this.stateManager.GetOrAddAsync <IReliableQueue <WindowsUpdateOperationResult> >(CoordinatorService.ResultsStoreName);

            using (var tx = this.stateManager.CreateTransaction())
            {
                var resultsEnumerator = (await resultsStore.CreateEnumerableAsync(tx)).GetAsyncEnumerator();

                IDictionary <string, WindowsUpdateNodeResults> bucketizedResults = new Dictionary <string, WindowsUpdateNodeResults>();
                while (await resultsEnumerator.MoveNextAsync(CancellationToken.None).ConfigureAwait(false))
                {
                    if (resultsEnumerator.Current.OperationType == operationType)
                    {
                        if (!bucketizedResults.ContainsKey(resultsEnumerator.Current.NodeName))
                        {
                            bucketizedResults[resultsEnumerator.Current.NodeName] = new WindowsUpdateNodeResults(resultsEnumerator.Current.NodeName);
                        }

                        bucketizedResults[resultsEnumerator.Current.NodeName].WindowsUpdateOperationResults.Add(resultsEnumerator.Current);
                    }
                }

                IList <WindowsUpdateNodeResults> nodeResults = bucketizedResults.Values.ToList();
                ServiceEventSource.Current.InfoMessage("Returned {0} node results from queue {1}", nodeResults.Count, CoordinatorService.ResultsStoreName);
                return(nodeResults);
            }
        }
Beispiel #2
0
 public WindowsUpdateOperationResult(String nodeName, DateTime operationTime, WuOperationResult operationResult, IList <WindowsUpdateDetail> updateDetails, WindowsUpdateOperationType operationType, string windowsUpdateQuery, string windowsUpdateFrequency, bool rebootRequired)
 {
     this.NodeName               = nodeName;
     this.OperationTime          = operationTime;
     this.UpdateDetails          = updateDetails;
     this.OperationType          = operationType;
     this.OperationResult        = operationResult;
     this.WindowsUpdateFrequency = windowsUpdateFrequency;
     this.WindowsUpdateQuery     = windowsUpdateQuery;
     this.RebootRequired         = rebootRequired;
 }
        private WindowsUpdateOperationResult FormatOperationResult(OperationResultCode operationResultCode, WUCollectionWrapper updateCollectionWrapper, WindowsUpdateOperationType operationType, string wuQuery, string wuFrequency, DateTime operationStartTime)
        {
            bool rebootRequired = false;
            IList <WindowsUpdateDetail> details = new List <WindowsUpdateDetail>();

            if (updateCollectionWrapper != null && updateCollectionWrapper.Collection != null)
            {
                foreach (WUUpdateWrapper item in updateCollectionWrapper.Collection.Values)
                {
                    WindowsUpdateDetail updateDetail = new WindowsUpdateDetail();
                    updateDetail.UpdateId    = item.Update.Identity.UpdateID;
                    updateDetail.Title       = item.Update.Title;
                    updateDetail.Description = item.Update.Description;
                    bool operation = operationType.Equals(WindowsUpdateOperationType.Installation)
                        ? item.IsInstalled
                        : item.IsDownloaded;

                    updateDetail.ResultCode = MatchOperationResult(operation);
                    updateDetail.HResult    = item.HResult;

                    details.Add(updateDetail);

                    rebootRequired = !rebootRequired ? item.Update.RebootRequired : rebootRequired;
                }
            }
            return(new WindowsUpdateOperationResult(this._nodeName, operationStartTime, DateTime.UtcNow, MatchOperationResult(operationResultCode), details, operationType, wuQuery, wuFrequency, rebootRequired));
        }