示例#1
0
        private void GetGroupedResults(IDictionary <Object, UniformPair <EventBean[]> > groups, IEnumerable <EventBean> events, bool insertStream, EventBean[] eventsPerStream)
        {
            if (events == null)
            {
                return;
            }

            foreach (EventBean theEvent in events)
            {
                EventBean evalEvent = theEvent;
                if (evalEvent is NaturalEventBean)
                {
                    evalEvent = ((NaturalEventBean)evalEvent).OptionalSynthetic;
                }

                Object key;
                eventsPerStream[0] = evalEvent;
                if (_groupDeliveryExpressions.Length == 1)
                {
                    key = _groupDeliveryExpressions[0].Evaluate(new EvaluateParams(eventsPerStream, true, _exprEvaluatorContext));
                }
                else
                {
                    var keys = new Object[_groupDeliveryExpressions.Length];
                    for (int i = 0; i < _groupDeliveryExpressions.Length; i++)
                    {
                        keys[i] = _groupDeliveryExpressions[i].Evaluate(new EvaluateParams(eventsPerStream, true, _exprEvaluatorContext));
                    }
                    key = new MultiKeyUntyped(keys);
                }

                UniformPair <EventBean[]> groupEntry = groups.Get(key);
                if (groupEntry == null)
                {
                    groupEntry = insertStream
                                     ? new UniformPair <EventBean[]>(new[] { theEvent }, null)
                                     : new UniformPair <EventBean[]>(null, new[] { theEvent });
                    groups.Put(key, groupEntry);
                }
                else
                {
                    if (insertStream)
                    {
                        groupEntry.First = groupEntry.First == null
                                               ? new[] { theEvent }
                                               : EventBeanUtility.AddToArray(groupEntry.First, theEvent);
                    }
                    else
                    {
                        groupEntry.Second = groupEntry.Second == null
                                                ? new[] { theEvent }
                                                : EventBeanUtility.AddToArray(groupEntry.Second, theEvent);
                    }
                }
            }
        }
        private void GetGroupedResults(
            IDictionary<object, UniformPair<EventBean[]>> groups,
            EventBean[] events,
            bool insertStream,
            EventBean[] eventsPerStream)
        {
            if (events == null) {
                return;
            }

            foreach (var theEvent in events) {
                var evalEvent = theEvent;
                if (evalEvent is NaturalEventBean) {
                    evalEvent = ((NaturalEventBean) evalEvent).OptionalSynthetic;
                }

                eventsPerStream[0] = evalEvent;
                var key = _groupDeliveryExpressions.Evaluate(eventsPerStream, true, _epStatement.StatementContext);

                var groupEntry = groups.Get(key);
                if (groupEntry == null) {
                    if (insertStream) {
                        groupEntry = new UniformPair<EventBean[]>(new[] {theEvent}, null);
                    }
                    else {
                        groupEntry = new UniformPair<EventBean[]>(null, new[] {theEvent});
                    }

                    groups.Put(key, groupEntry);
                }
                else {
                    if (insertStream) {
                        if (groupEntry.First == null) {
                            groupEntry.First = new[] {theEvent};
                        }
                        else {
                            groupEntry.First = EventBeanUtility.AddToArray(groupEntry.First, theEvent);
                        }
                    }
                    else {
                        if (groupEntry.Second == null) {
                            groupEntry.Second = new[] {theEvent};
                        }
                        else {
                            groupEntry.Second = EventBeanUtility.AddToArray(groupEntry.Second, theEvent);
                        }
                    }
                }
            }
        }
示例#3
0
        public override void Update(EventBean[] newData, EventBean[] oldData)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QViewProcessIRStream(this, _factory.ViewName, newData, oldData);
            }

            // remove points from data window
            if (oldData != null && oldData.Length != 0)
            {
                foreach (EventBean anOldData in oldData)
                {
                    Window.Remove(anOldData);
                    HandleInternalRemovedEvent(anOldData);
                }
                DetermineOldestTimestamp();
            }

            // add data points to the window
            EventBean[] batchNewData = null;
            if (newData != null)
            {
                foreach (EventBean newEvent in newData)
                {
                    long timestamp = GetLongValue(newEvent);
                    if (ReferenceTimestamp == null)
                    {
                        ReferenceTimestamp = timestamp;
                    }

                    if (_oldestTimestamp == null)
                    {
                        _oldestTimestamp = timestamp;
                    }
                    else
                    {
                        var delta = _timeDeltaComputation.DeltaMillisecondsAddWReference(
                            _oldestTimestamp.Value, ReferenceTimestamp.Value);
                        ReferenceTimestamp = delta.LastReference;
                        if (timestamp - _oldestTimestamp >= delta.Delta)
                        {
                            if (batchNewData == null)
                            {
                                batchNewData = Window.ToArray();
                            }
                            else
                            {
                                batchNewData = EventBeanUtility.AddToArray(batchNewData, Window);
                            }
                            Window.Clear();
                            _oldestTimestamp = null;
                        }
                    }

                    Window.Add(newEvent);
                    HandleInternalAddEvent(newEvent, batchNewData != null);
                }
            }

            if (batchNewData != null)
            {
                HandleInternalPostBatch(Window, batchNewData);
                if (ViewUpdatedCollection != null)
                {
                    ViewUpdatedCollection.Update(batchNewData, LastBatch);
                }
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QViewIndicate(this, _factory.ViewName, newData, LastBatch);
                }
                UpdateChildren(batchNewData, LastBatch);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AViewIndicate();
                }
                LastBatch = batchNewData;
                DetermineOldestTimestamp();
            }
            if (oldData != null && oldData.Length > 0)
            {
                if (ViewUpdatedCollection != null)
                {
                    ViewUpdatedCollection.Update(null, oldData);
                }
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QViewIndicate(this, _factory.ViewName, null, oldData);
                }
                UpdateChildren(null, oldData);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AViewIndicate();
                }
            }

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AViewProcessIRStream();
            }
        }
示例#4
0
        public override void Update(EventBean[] newData, EventBean[] oldData)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QViewProcessIRStream(this, FirstUniqueByPropertyViewFactory.NAME, newData, oldData);
            }

            EventBean[] newDataToPost = null;
            EventBean[] oldDataToPost = null;

            if (oldData != null)
            {
                foreach (EventBean oldEvent in oldData)
                {
                    // Obtain unique value
                    object key = GetUniqueKey(oldEvent);

                    // If the old event is the current unique event, remove and post as old data
                    EventBean lastValue = _firstEvents.Get(key);

                    if (lastValue != oldEvent)
                    {
                        continue;
                    }

                    if (oldDataToPost == null)
                    {
                        oldDataToPost = new EventBean[] { oldEvent };
                    }
                    else
                    {
                        oldDataToPost = EventBeanUtility.AddToArray(oldDataToPost, oldEvent);
                    }

                    _firstEvents.Remove(key);
                    InternalHandleRemoved(key, lastValue);
                }
            }

            if (newData != null)
            {
                foreach (EventBean newEvent in newData)
                {
                    // Obtain unique value
                    object key = GetUniqueKey(newEvent);

                    // already-seen key
                    if (_firstEvents.ContainsKey(key))
                    {
                        continue;
                    }

                    // store
                    _firstEvents.Put(key, newEvent);
                    InternalHandleAdded(key, newEvent);

                    // Post the new value
                    if (newDataToPost == null)
                    {
                        newDataToPost = new EventBean[] { newEvent };
                    }
                    else
                    {
                        newDataToPost = EventBeanUtility.AddToArray(newDataToPost, newEvent);
                    }
                }
            }

            if ((HasViews) && ((newDataToPost != null) || (oldDataToPost != null)))
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QViewIndicate(this, FirstUniqueByPropertyViewFactory.NAME, newDataToPost, oldDataToPost);
                }
                UpdateChildren(newDataToPost, oldDataToPost);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AViewIndicate();
                }
            }

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

            // remove points from data window
            if (oldData != null && oldData.Length != 0) {
                foreach (var anOldData in oldData) {
                    window.Remove(anOldData);
                    HandleInternalRemovedEvent(anOldData);
                }

                DetermineOldestTimestamp();
            }

            // add data points to the window
            EventBean[] batchNewData = null;
            if (newData != null) {
                foreach (var newEvent in newData) {
                    var timestamp = GetLongValue(newEvent);
                    if (referenceTimestamp == null) {
                        referenceTimestamp = timestamp;
                    }

                    if (oldestTimestamp == null) {
                        oldestTimestamp = timestamp;
                    }
                    else {
                        var delta = timePeriodProvide.DeltaAddWReference(
                            oldestTimestamp.Value,
                            referenceTimestamp.Value,
                            null,
                            true,
                            agentInstanceContext);
                        referenceTimestamp = delta.LastReference;
                        if (timestamp - oldestTimestamp >= delta.Delta) {
                            if (batchNewData == null) {
                                batchNewData = window.ToArray();
                            }
                            else {
                                batchNewData = EventBeanUtility.AddToArray(batchNewData, window);
                            }

                            window.Clear();
                            oldestTimestamp = null;
                        }
                    }

                    window.Add(newEvent);
                    HandleInternalAddEvent(newEvent, batchNewData != null);
                }
            }

            if (batchNewData != null) {
                HandleInternalPostBatch(window, batchNewData);
                viewUpdatedCollection?.Update(batchNewData, lastBatch);

                agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, batchNewData, lastBatch);
                child.Update(batchNewData, lastBatch);
                agentInstanceContext.InstrumentationProvider.AViewIndicate();

                lastBatch = batchNewData;
                DetermineOldestTimestamp();
            }

            if (oldData != null && oldData.Length > 0) {
                viewUpdatedCollection?.Update(null, oldData);

                agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, null, oldData);
                child.Update(null, oldData);
                agentInstanceContext.InstrumentationProvider.AViewIndicate();
            }

            agentInstanceContext.InstrumentationProvider.AViewProcessIRStream();
        }
示例#6
0
        public override void Update(
            EventBean[] newData,
            EventBean[] oldData)
        {
            agentInstanceContext.AuditProvider.View(newData, oldData, agentInstanceContext, viewFactory);
            agentInstanceContext.InstrumentationProvider.QViewProcessIRStream(viewFactory, newData, oldData);

            EventBean[] newDataToPost = null;
            EventBean[] oldDataToPost = null;

            if (oldData != null) {
                foreach (var oldEvent in oldData) {
                    // Obtain unique value
                    var key = GetUniqueKey(oldEvent);

                    // If the old event is the current unique event, remove and post as old data
                    var lastValue = firstEvents.Get(key);

                    if (lastValue != oldEvent) {
                        continue;
                    }

                    if (oldDataToPost == null) {
                        oldDataToPost = new[] {oldEvent};
                    }
                    else {
                        oldDataToPost = EventBeanUtility.AddToArray(oldDataToPost, oldEvent);
                    }

                    firstEvents.Remove(key);
                }
            }

            if (newData != null) {
                foreach (var newEvent in newData) {
                    // Obtain unique value
                    var key = GetUniqueKey(newEvent);

                    // already-seen key
                    if (firstEvents.ContainsKey(key)) {
                        continue;
                    }

                    // store
                    firstEvents.Put(key, newEvent);

                    // Post the new value
                    if (newDataToPost == null) {
                        newDataToPost = new[] {newEvent};
                    }
                    else {
                        newDataToPost = EventBeanUtility.AddToArray(newDataToPost, newEvent);
                    }
                }
            }

            if (child != null && (newDataToPost != null || oldDataToPost != null)) {
                agentInstanceContext.InstrumentationProvider.QViewIndicate(viewFactory, newDataToPost, oldDataToPost);
                child.Update(newDataToPost, oldDataToPost);
                agentInstanceContext.InstrumentationProvider.AViewIndicate();
            }

            agentInstanceContext.InstrumentationProvider.AViewProcessIRStream();
        }