Example #1
0
        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);
        }
Example #2
0
        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);
        }