use of com.codecademy.eventhub.list.MemIdList in project EventHub by Codecademy.
the class EventHub method getFunnelCounts.
public synchronized int[] getFunnelCounts(String startDate, String endDate, String[] funnelStepsEventTypes, int numDaysToCompleteFunnel, List<Filter> eventFilters, Filter userFilter) {
IdList firstStepEventIdList = new MemIdList(new long[10000], 0);
int[] funnelStepsEventTypeIds = getEventTypeIds(funnelStepsEventTypes);
List<Integer> userIdsList = Lists.newArrayList();
Set<Integer> userIdsSet = Sets.newHashSet();
EventIndex.Callback aggregateUserIdsCallback = new AggregateUserIds(eventStorage, userStorage, firstStepEventIdList, eventFilters.get(0), userFilter, userIdsList, userIdsSet);
shardedEventIndex.enumerateEventIds(funnelStepsEventTypes[0], startDate, endDate, aggregateUserIdsCallback);
int[] numFunnelStepsMatched = new int[funnelStepsEventTypes.length];
IdList.Iterator firstStepEventIdIterator = firstStepEventIdList.iterator();
if (funnelStepsEventTypes.length == 1) {
for (int userId : userIdsList) {
numFunnelStepsMatched[0]++;
}
} else {
for (int userId : userIdsList) {
long firstStepEventId = firstStepEventIdIterator.next();
long maxLastStepEventId = datedEventIndex.findFirstEventIdOnDate(firstStepEventId, numDaysToCompleteFunnel);
CountMatchedFunnelSteps countMatchedFunnelSteps = new CountMatchedFunnelSteps(eventStorage, userStorage, funnelStepsEventTypeIds, 1, /* first step already matched*/
maxLastStepEventId, eventFilters, userFilter);
userEventIndex.enumerateEventIds(userId, userEventIndex.getEventOffset(userId, firstStepEventId), Integer.MAX_VALUE, countMatchedFunnelSteps);
for (int i = 0; i < countMatchedFunnelSteps.getNumMatchedSteps(); i++) {
numFunnelStepsMatched[i]++;
}
}
}
return numFunnelStepsMatched;
}
Aggregations