Search in sources :

Example 1 with MemIdList

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;
}
Also used : MemIdList(com.codecademy.eventhub.list.MemIdList) IdList(com.codecademy.eventhub.list.IdList) MemIdList(com.codecademy.eventhub.list.MemIdList) DummyIdList(com.codecademy.eventhub.list.DummyIdList) ShardedEventIndex(com.codecademy.eventhub.index.ShardedEventIndex) UserEventIndex(com.codecademy.eventhub.index.UserEventIndex) EventIndex(com.codecademy.eventhub.index.EventIndex) DatedEventIndex(com.codecademy.eventhub.index.DatedEventIndex)

Aggregations

DatedEventIndex (com.codecademy.eventhub.index.DatedEventIndex)1 EventIndex (com.codecademy.eventhub.index.EventIndex)1 ShardedEventIndex (com.codecademy.eventhub.index.ShardedEventIndex)1 UserEventIndex (com.codecademy.eventhub.index.UserEventIndex)1 DummyIdList (com.codecademy.eventhub.list.DummyIdList)1 IdList (com.codecademy.eventhub.list.IdList)1 MemIdList (com.codecademy.eventhub.list.MemIdList)1