public override void ApplyLeave(EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(false, Aggregators.Length, 0, groupByKey); } var row = _aggregatorsPerGroup.Get(groupByKey); // The aggregators for this group do not exist, need to create them from the prototypes AggregationMethod[] groupAggregators; if (row != null) { groupAggregators = row.Methods; } else { groupAggregators = _methodResolutionService.NewAggregators(Aggregators, exprEvaluatorContext.AgentInstanceId, groupByKey, GroupKeyBinding, null); row = new AggregationMethodRow(_methodResolutionService.GetCurrentRowCount(groupAggregators, null) + 1, groupAggregators); _aggregatorsPerGroup[groupByKey] = row; } var evaluateParams = new EvaluateParams(eventsPerStream, false, exprEvaluatorContext); // For this row, evaluate sub-expressions, enter result _currentAggregatorRow = groupAggregators; var evaluators = Evaluators; var evaluatorsLength = evaluators.Length; for (var ii = 0; ii < evaluatorsLength; ii++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggNoAccessEnterLeave(false, ii, groupAggregators[ii], Aggregators[ii].AggregationExpression); } groupAggregators[ii].Leave(evaluators[ii].Evaluate(evaluateParams)); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggNoAccessEnterLeave(false, ii, groupAggregators[ii]); } } row.DecreaseRefcount(); if (row.Refcount <= 0) { _removedKeys.Add(groupByKey); _methodResolutionService.RemoveAggregators(exprEvaluatorContext.AgentInstanceId, groupByKey, GroupKeyBinding, null); // allow persistence to remove keys already } if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(false); } }
public override void ApplyEnter(EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(true, Aggregators.Length, 0, groupByKey); } HandleRemovedKeys(); // The aggregators for this group do not exist, need to create them from the prototypes AggregationMethodRow row; AggregationMethod[] groupAggregators; if (!_aggregatorsPerGroup.TryGetValue(groupByKey, out row)) { groupAggregators = AggSvcGroupByUtil.NewAggregators(Aggregators); row = new AggregationMethodRow(1, groupAggregators); _aggregatorsPerGroup[groupByKey] = row; } else { groupAggregators = row.Methods; row.IncreaseRefcount(); } var evaluateParams = new EvaluateParams(eventsPerStream, true, exprEvaluatorContext); // For this row, evaluate sub-expressions, enter result _currentAggregatorRow = groupAggregators; var evaluators = Evaluators; var evaluatorsLength = evaluators.Length; for (var ii = 0; ii < evaluatorsLength; ii++) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggNoAccessEnterLeave(true, ii, groupAggregators[ii], Aggregators[ii].AggregationExpression); } groupAggregators[ii].Enter(evaluators[ii].Evaluate(evaluateParams)); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggNoAccessEnterLeave(true, ii, groupAggregators[ii]); } } if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(true); } }