Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }