public IEnumerator <EventBean> GetEnumerator(Viewable parent)
        {
            if (!_prototype.IsHistoricalOnly)
            {
                return(ObtainEnumerator(parent));
            }

            ResultSetProcessorUtil.ClearAndAggregateUngrouped(_exprEvaluatorContext, _aggregationService, parent);
            ArrayDeque <EventBean> deque = ResultSetProcessorUtil.EnumeratorToDeque(ObtainEnumerator(parent));

            _aggregationService.ClearResults(_exprEvaluatorContext);
            return(deque.GetEnumerator());
        }
        public IEnumerator <EventBean> GetEnumerator(Viewable parent)
        {
            if (!Prototype.IsHistoricalOnly)
            {
                return(ObtainEnumerator());
            }

            ResultSetProcessorUtil.ClearAndAggregateUngrouped(ExprEvaluatorContext, AggregationService, parent);

            var enumerator = ObtainEnumerator();

            AggregationService.ClearResults(ExprEvaluatorContext);
            return(enumerator);
        }
示例#3
0
        public override void Evaluate(
            EventBean[] eventsPerStream,
            ICollection <EventBean> matchingEvents,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            AggregationService.ClearResults(exprEvaluatorContext);
            if (matchingEvents == null)
            {
                return;
            }

            var events = new EventBean[eventsPerStream.Length + 1];

            Array.Copy(eventsPerStream, 0, events, 1, eventsPerStream.Length);

            var evaluateParams = new EvaluateParams(events, true, exprEvaluatorContext);

            foreach (EventBean subselectEvent in matchingEvents)
            {
                events[0] = subselectEvent;
                var pass = (bool?)FilterExpr.Evaluate(evaluateParams);
                if (pass ?? false)
                {
                    AggregationService.ApplyEnter(events, null, exprEvaluatorContext);
                }
            }
        }
        public override void Evaluate(
            EventBean[] eventsPerStream,
            ICollection<EventBean> matchingEvents,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            AggregationService.ClearResults(exprEvaluatorContext);
            if (matchingEvents == null)
            {
                return;
            }
            var events = new EventBean[eventsPerStream.Length + 1];
            Array.Copy(eventsPerStream, 0, events, 1, eventsPerStream.Length);
            var evaluateParams = new EvaluateParams(events, true, exprEvaluatorContext);

            foreach (EventBean subselectEvent in matchingEvents)
            {
                events[0] = subselectEvent;
                var pass = FilterEval.Evaluate(evaluateParams);
                if (true.Equals(pass))
                {
                    Object groupKey = GenerateGroupKey(events, true, exprEvaluatorContext);
                    AggregationService.ApplyEnter(events, groupKey, exprEvaluatorContext);
                }
            }
        }
示例#5
0
        public static void ClearAndAggregateUngrouped(ExprEvaluatorContext exprEvaluatorContext, AggregationService aggregationService, Viewable parent)
        {
            aggregationService.ClearResults(exprEvaluatorContext);
            var ee = parent.GetEnumerator();
            var eventsPerStream = new EventBean[1];

            while (ee.MoveNext())
            {
                eventsPerStream[0] = ee.Current;
                aggregationService.ApplyEnter(eventsPerStream, null, exprEvaluatorContext);
            }
        }
示例#6
0
        // Called based on schedule evaluation registered when a variable changes (new data is null).
        // Called when new data arrives.
        private void Expire(EventBean[] newData, EventBean[] oldData)
        {
            OneEventCollection expired = null;

            if (oldData != null)
            {
                expired = new OneEventCollection();
                expired.Add(oldData);
            }
            int expiredCount = 0;

            if (!_window.IsEmpty())
            {
                ExpressionWindowTimestampEventPair newest = _window.Last;

                while (true)
                {
                    ExpressionWindowTimestampEventPair first = _window.First;

                    bool pass = CheckEvent(first, newest, expiredCount);
                    if (!pass)
                    {
                        if (expired == null)
                        {
                            expired = new OneEventCollection();
                        }
                        EventBean removed = _window.RemoveFirst().TheEvent;
                        expired.Add(removed);
                        if (AggregationService != null)
                        {
                            _removedEvents[0] = removed;
                            AggregationService.ApplyLeave(_removedEvents, null, AgentInstanceContext);
                        }
                        expiredCount++;
                        InternalHandleExpired(first);
                    }
                    else
                    {
                        break;
                    }

                    if (_window.IsEmpty())
                    {
                        if (AggregationService != null)
                        {
                            AggregationService.ClearResults(AgentInstanceContext);
                        }
                        break;
                    }
                }
            }

            // Check for any events that get pushed out of the window
            EventBean[] expiredArr = null;
            if (expired != null)
            {
                expiredArr = expired.ToArray();
            }

            // update event buffer for access by expressions, if any
            if (ViewUpdatedCollection != null)
            {
                ViewUpdatedCollection.Update(newData, expiredArr);
            }

            // If there are child views, call update method
            if (HasViews)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QViewIndicate(this, _dataWindowViewFactory.ViewName, newData, expiredArr);
                }
                UpdateChildren(newData, expiredArr);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AViewIndicate();
                }
            }
        }
示例#7
0
 public void ClearResults(ExprEvaluatorContext exprEvaluatorContext)
 {
     _service.ClearResults(exprEvaluatorContext);
 }
示例#8
0
        // Called based on schedule evaluation registered when a variable changes (new data is null).
        // Called when new data arrives.
        public void Expire(int numEventsInBatch)
        {
            if (numEventsInBatch == Window.Count || numEventsInBatch == -1)
            {
                var batchNewData = Window.ToArray();
                if (ViewUpdatedCollection != null)
                {
                    ViewUpdatedCollection.Update(batchNewData, LastBatch);
                }

                // post
                if (batchNewData != null || LastBatch != null)
                {
                    Instrument.With(
                        i => i.QViewIndicate(this, _dataWindowViewFactory.ViewName, batchNewData, LastBatch),
                        i => i.AViewIndicate(),
                        () => UpdateChildren(batchNewData, LastBatch));
                }

                // clear
                Window.Clear();
                LastBatch = batchNewData;
                if (AggregationService != null)
                {
                    AggregationService.ClearResults(AgentInstanceContext);
                }
                OldestEvent = null;
                NewestEvent = null;
            }
            else
            {
                var batchNewData = Window.Take(numEventsInBatch).ToArray();
                unchecked
                {
                    for (int ii = 0; ii < batchNewData.Length; ii++)
                    {
                        Window.Remove(batchNewData[ii]);
                    }
                }

                if (ViewUpdatedCollection != null)
                {
                    ViewUpdatedCollection.Update(batchNewData, LastBatch);
                }

                // post
                if (batchNewData != null || LastBatch != null)
                {
                    Instrument.With(
                        i => i.QViewIndicate(this, _dataWindowViewFactory.ViewName, batchNewData, LastBatch),
                        i => i.AViewIndicate(),
                        () => UpdateChildren(batchNewData, LastBatch));
                }

                // clear
                LastBatch = batchNewData;
                if (AggregationService != null)
                {
                    AggregationService.ApplyLeave(batchNewData, null, AgentInstanceContext);
                }
                OldestEvent = Window.FirstOrDefault();
            }
        }