示例#1
0
        public override void Update(EventBean[] newData, EventBean[] oldData)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QViewProcessIRStream(this, _sortWindowViewFactory.ViewName, newData, oldData);
            }

            OneEventCollection removedEvents = null;

            // Remove old data
            if (oldData != null)
            {
                for (var i = 0; i < oldData.Length; i++)
                {
                    var oldDataItem = oldData[i];
                    var sortValues  = GetSortValues(oldDataItem);
                    var result      = CollectionUtil.RemoveEventByKeyLazyListMap(sortValues, oldDataItem, _sortedEvents);
                    if (result)
                    {
                        _eventCount--;
                        if (removedEvents == null)
                        {
                            removedEvents = new OneEventCollection();
                        }
                        removedEvents.Add(oldDataItem);
                        InternalHandleRemoved(sortValues, oldDataItem);
                    }
                }
            }

            // Add new data
            if (newData != null)
            {
                for (var i = 0; i < newData.Length; i++)
                {
                    var newDataItem = newData[i];
                    var sortValues  = GetSortValues(newDataItem);
                    CollectionUtil.AddEventByKeyLazyListMapFront(sortValues, newDataItem, _sortedEvents);
                    _eventCount++;
                    InternalHandleAdd(sortValues, newDataItem);
                }
            }

            // Remove data that sorts to the bottom of the window
            if (_eventCount > _sortWindowSize)
            {
                var removeCount = _eventCount - _sortWindowSize;
                for (var i = 0; i < removeCount; i++)
                {
                    // Remove the last element of the last key - sort order is key and then natural order of arrival
                    var lastKey   = _sortedEvents.Keys.Last();
                    var lastEntry = _sortedEvents.Get(lastKey);
                    if (lastEntry is IList <EventBean> )
                    {
                        var events   = (IList <EventBean>)lastEntry;
                        var theEvent = events.DeleteAt(events.Count - 1);  // remove oldest event, newest events are first in list
                        _eventCount--;
                        if (events.IsEmpty())
                        {
                            _sortedEvents.Remove(lastKey);
                        }
                        if (removedEvents == null)
                        {
                            removedEvents = new OneEventCollection();
                        }
                        removedEvents.Add(theEvent);
                        InternalHandleRemoved(lastKey, theEvent);
                    }
                    else
                    {
                        var theEvent = (EventBean)lastEntry;
                        _eventCount--;
                        _sortedEvents.Remove(lastKey);
                        if (removedEvents == null)
                        {
                            removedEvents = new OneEventCollection();
                        }
                        removedEvents.Add(theEvent);
                        InternalHandleRemoved(lastKey, theEvent);
                    }
                }
            }

            // If there are child views, fireStatementStopped Update method
            if (_optionalSortedRandomAccess != null)
            {
                _optionalSortedRandomAccess.Refresh(_sortedEvents, _eventCount, _sortWindowSize);
            }

            if (HasViews)
            {
                EventBean[] expiredArr = null;
                if (removedEvents != null)
                {
                    expiredArr = removedEvents.ToArray();
                }

                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QViewIndicate(this, _sortWindowViewFactory.ViewName, newData, expiredArr);
                }
                UpdateChildren(newData, expiredArr);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AViewIndicate();
                }
            }

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AViewProcessIRStream();
            }
        }
示例#2
0
        public override void Update(
            EventBean[] newData,
            EventBean[] oldData)
        {
            agentInstanceContext.AuditProvider.View(newData, oldData, agentInstanceContext, factory);
            agentInstanceContext.InstrumentationProvider.QViewProcessIRStream(factory, newData, oldData);

            OneEventCollection removedEvents = null;

            // Remove old data
            if (oldData != null) {
                for (var i = 0; i < oldData.Length; i++) {
                    var oldDataItem = oldData[i];
                    var sortValues = GetSortValues(oldDataItem);
                    var result = CollectionUtil.RemoveEventByKeyLazyListMap(sortValues, oldDataItem, sortedEvents);
                    if (result) {
                        eventCount--;
                        if (removedEvents == null) {
                            removedEvents = new OneEventCollection();
                        }

                        removedEvents.Add(oldDataItem);
                        InternalHandleRemoved(sortValues, oldDataItem);
                    }
                }
            }

            // Add new data
            if (newData != null) {
                for (var i = 0; i < newData.Length; i++) {
                    var newDataItem = newData[i];
                    var sortValues = GetSortValues(newDataItem);
                    CollectionUtil.AddEventByKeyLazyListMapFront(sortValues, newDataItem, sortedEvents);
                    eventCount++;
                    InternalHandleAdd(sortValues, newDataItem);
                }
            }

            // Remove data that sorts to the bottom of the window
            if (eventCount > sortWindowSize) {
                var removeCount = eventCount - sortWindowSize;
                for (var i = 0; i < removeCount; i++) {
                    // Remove the last element of the last key - sort order is key and then natural order of arrival
                    var lastKey = sortedEvents.Keys.Last();
                    var lastEntry = sortedEvents.Get(lastKey);
                    if (lastEntry is IList<EventBean>) {
                        var events = (IList<EventBean>) lastEntry;
                        var theEvent =
                            events.DeleteAt(events.Count - 1); // remove oldest event, newest events are first in list
                        eventCount--;
                        if (events.IsEmpty()) {
                            sortedEvents.Remove(lastKey);
                        }

                        if (removedEvents == null) {
                            removedEvents = new OneEventCollection();
                        }

                        removedEvents.Add(theEvent);
                        InternalHandleRemoved(lastKey, theEvent);
                    }
                    else {
                        var theEvent = (EventBean) lastEntry;
                        eventCount--;
                        sortedEvents.Remove(lastKey);
                        if (removedEvents == null) {
                            removedEvents = new OneEventCollection();
                        }

                        removedEvents.Add(theEvent);
                        InternalHandleRemoved(lastKey, theEvent);
                    }
                }
            }

            // If there are child views, fireStatementStopped update method
            optionalSortedRandomAccess?.Refresh(sortedEvents, eventCount, sortWindowSize);

            if (child != null) {
                EventBean[] expiredArr = null;
                if (removedEvents != null) {
                    expiredArr = removedEvents.ToArray();
                }

                agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, newData, expiredArr);
                child.Update(newData, expiredArr);
                agentInstanceContext.InstrumentationProvider.AViewIndicate();
            }

            agentInstanceContext.InstrumentationProvider.AViewProcessIRStream();
        }