async Task <HubRequest[]> GetRequestsAsync() { if (_networkSetting.NetworkStatus != Util.ConnectionOKStatus) { return(new HubRequest[0]); } var datamartIDs = _networkSetting.DataMartList .Where(dm => dm.AllowUnattendedOperation && (dm.NotifyOfNewQueries || dm.ProcessQueriesAndNotUpload || dm.ProcessQueriesAndUploadAutomatically)) .Select(dm => dm.DataMartId).ToArray(); if (datamartIDs.Length == 0) { return(new HubRequest[0]); } var requestFilter = new RequestFilter { Statuses = new[] { DTO.DataMartClient.Enums.DMCRoutingStatus.Submitted, DTO.DataMartClient.Enums.DMCRoutingStatus.Resubmitted }, DataMartIds = datamartIDs }; var requests = Observable.Create <DTO.DataMartClient.RequestList>(async observer => { int index = 0; int batchSize = Properties.Settings.Default.AutoProcessingBatchSize; DTO.DataMartClient.RequestList rl = null; while (rl == null || (index < rl.TotalCount)) { rl = await DnsServiceManager.GetRequestList("AutoProcessor", _networkSetting, index, batchSize, requestFilter, DTO.DataMartClient.RequestSortColumn.RequestTime, true); if (rl == null || rl.TotalCount == 0) { break; } observer.OnNext(rl); index += batchSize; } observer.OnCompleted(); }).DefaultIfEmpty() .Aggregate((requestList1, requestList2) => { if (requestList1 == null && requestList2 == null) { return(new DTO.DataMartClient.RequestList { Segment = Array.Empty <DTO.DataMartClient.RequestListRow>(), SortedAscending = true, SortedByColumn = DTO.DataMartClient.RequestSortColumn.RequestTime }); } else if (requestList1 != null && requestList2 == null) { return(requestList1); } else if (requestList1 == null && requestList2 != null) { return(requestList2); } else { return(new DTO.DataMartClient.RequestList { Segment = requestList1.Segment.EmptyIfNull().Concat(requestList2.Segment.EmptyIfNull()).ToArray(), SortedAscending = requestList1.SortedAscending, SortedByColumn = requestList1.SortedByColumn, StartIndex = requestList1.StartIndex, TotalCount = requestList1.TotalCount }); } }) .SelectMany(requestList => { if (requestList == null) { return(Array.Empty <DTO.DataMartClient.RequestListRow>()); } return(requestList.Segment.DefaultIfEmpty().Where(s => s.AllowUnattendedProcessing)); }) .SelectMany(rlr => RequestCache.ForNetwork(_networkSetting).LoadRequest(rlr.ID, rlr.DataMartID)) .ToArray(); return(await requests); }
async Task <HubRequest[]> GetRequestsAsync() { var datamartIDs = _networkSetting.DataMartList .Where(dm => dm.AllowUnattendedOperation && (dm.NotifyOfNewQueries || dm.ProcessQueriesAndNotUpload || dm.ProcessQueriesAndUploadAutomatically)) .Select(dm => dm.DataMartId).ToArray(); if (datamartIDs.Length == 0) { return(Array.Empty <HubRequest>()); } var requestFilter = new RequestFilter { Statuses = new[] { Lpp.Dns.DTO.DataMartClient.Enums.DMCRoutingStatus.Submitted, Lpp.Dns.DTO.DataMartClient.Enums.DMCRoutingStatus.Resubmitted }, DataMartIds = datamartIDs, FromDate = DateTime.UtcNow.AddYears(-1), DateRange = DateRangeKind.Exact }; var ob = Observable.Create <DTO.DataMartClient.RequestList>(async observer => { int index = 0; int batchSize = 2; DTO.DataMartClient.RequestList rl = null; while (rl == null || (index < rl.TotalCount)) { _logger.Debug($"Observer loop: pageIndex={ index }."); rl = await DnsServiceManager.GetRequestList("RxQueryTests-DefaultDSM", _networkSetting, index, batchSize, requestFilter, null, null); _logger.Debug($"Observer loop: pageIndex={ index }, results returned={ rl.Segment.DefaultIfEmpty().Count() }, total results={ rl.TotalCount }"); if (rl.TotalCount == 0) { break; } observer.OnNext(rl); index += batchSize; } _logger.Debug("Observer loop firing OnComplete"); observer.OnCompleted(); }).DefaultIfEmpty().Aggregate((requestList1, requestList2) => { if (requestList1 == null && requestList2 == null) { return(new DTO.DataMartClient.RequestList { Segment = Array.Empty <DTO.DataMartClient.RequestListRow>(), SortedAscending = false, SortedByColumn = DTO.DataMartClient.RequestSortColumn.RequestTime }); } else if (requestList1 != null && requestList2 == null) { return(requestList1); } else if (requestList1 == null && requestList2 != null) { return(requestList2); } else { return(new DTO.DataMartClient.RequestList { Segment = requestList1.Segment.EmptyIfNull().Concat(requestList2.Segment.EmptyIfNull()).ToArray(), SortedAscending = requestList1.SortedAscending, SortedByColumn = requestList1.SortedByColumn, StartIndex = requestList1.StartIndex, TotalCount = requestList1.TotalCount }); } }) .SelectMany(requestList => { if (requestList == null) { return(Array.Empty <DTO.DataMartClient.RequestListRow>()); } return(requestList.Segment.DefaultIfEmpty().Where(s => s.AllowUnattendedProcessing)); }) .SelectMany(rlr => RequestCache.ForNetwork(_networkSetting).LoadRequest(rlr.ID, rlr.DataMartID)) .ToArray(); return(await ob); }