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); } }
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)); }