private IEnumerable <TObject> GetObjectsWhenStreaming(TParam parameters) { if (Count != null && filters != null) { int previousCount; Func <int> getCount; if (StreamProvider.StreamCount != null) { previousCount = StreamProvider.StreamCount.Value; getCount = () => previousCount; } else { getCount = () => ((IStreamableCmdlet <PrtgTableCmdlet <TObject, TParam>, TObject, TParam>) this).GetStreamTotalObjects(parameters); } StreamProvider.SetStreamCount(parameters, Count); var iterator = new TakeIterator <TObject, TParam>( StreamProvider.StreamCount.Value, parameters, (p, c) => StreamProvider.StreamRecords <TObject>(p, Count, c), getCount, PostProcessRecords, SortReturnedRecordsRunner ); return(iterator); } return(StreamProvider.StreamRecords <TObject>(parameters, Count)); }
private IEnumerable <TObject> GetObjectsWhenStreaming(TParam parameters) { if (ProgressManager.WatchStream) { if (typeof(TObject) == typeof(Log)) { return((IEnumerable <TObject>) new InfiniteLogGenerator( client.GetLogs, (LogParameters)(object)parameters, ((IWatchableCmdlet)this).Interval, i => { if (Stopping) { throw new PipelineStoppedException(); } return true; }, CancellationToken, logs => (IEnumerable <Log>)PostProcessRecords((IEnumerable <TObject>)logs) )); } throw new NotImplementedException($"Don't know how to watch objects of type ({typeof(TObject).Name})"); } if (Count != null && filters != null) { int previousCount; Func <int> getCount; if (StreamProvider.StreamCount != null) { previousCount = StreamProvider.StreamCount.Value; getCount = () => previousCount; } else { getCount = () => ((IStreamableCmdlet <PrtgTableCmdlet <TObject, TParam>, TObject, TParam>) this).GetStreamTotalObjects(parameters); } StreamProvider.SetStreamCount(parameters, Count); var iterator = new TakeIterator <TObject, TParam>( StreamProvider.StreamCount.Value, parameters, (p, c) => StreamProvider.StreamRecords <TObject>(p, Count, c), getCount, PostProcessRecords, SortReturnedRecordsRunner ); return(iterator); } return(StreamProvider.StreamRecords <TObject>(parameters, Count)); }
public void Query_Take_Until_Matched_TakeIterator() { var items = new List <BaseItem>(); items.AddRange(GetPage("Yes", 1)); items.AddRange(GetPage("YeNo", 1)); items.AddRange(GetPage("YeNo", 1)); items.AddRange(GetPage("Yes", 1)); items.AddRange(GetPage("YeNo", 1)); items.AddRange(GetPage("Yes", 1)); var urls = new object[] { TestHelpers.RequestSensor("count=2&filter_name=@sub(Ye)", UrlFlag.Columns), //Yes, YeNo TestHelpers.RequestSensor("count=0&filter_name=@sub(Ye)", null), //Count TestHelpers.RequestSensor("count=1&filter_name=@sub(Ye)&start=2", UrlFlag.Columns), //YeNo TestHelpers.RequestSensor("count=3&filter_name=@sub(Ye)&start=3", UrlFlag.Columns) //Yes }; var client = Initialize_Client(new AddressValidatorResponse(urls) { ItemOverride = new Dictionary <Content, BaseItem[]> { [Content.Sensors] = items.ToArray() } }); Func <SensorParameters, Func <int>, IEnumerable <Sensor> > streamer = (p, c) => client.ObjectEngine.StreamObjects <Sensor, SensorParameters>(p, true, c); var parameters = new SensorParameters { SearchFilters = new List <SearchFilter> { new SearchFilter(Property.Name, FilterOperator.Contains, "Ye") } }; var iterator = new TakeIterator <Sensor, SensorParameters>( 2, parameters, streamer, () => client.GetTotalObjects(parameters.Content, parameters.SearchFilters?.ToArray()), r => r.Where(s => s.Name == "Yes") ); var response = iterator.ToList(); Assert.AreEqual(2, response.Count); }
private IEnumerable <TObject> StreamObjectsWhenNotStreaming(TParam parameters) { var streamCount = StreamCount(); //If we're piping from groups, don't specify a count so that we may retrieve all records and retrieve the //correct amount that match the criteria if (!streamCount) { parameters.Count = null; } var iterator = new TakeIterator <TObject, TParam>( Count.Value, parameters, GetNotStreamingStreamer(streamCount), () => StreamProvider.GetTotalExist(parameters), PostProcessRecords, SortReturnedRecordsRunner, streamCount ); return(iterator); }