Search in sources :

Example 1 with IdList

use of com.codecademy.eventhub.list.IdList in project EventHub by Codecademy.

the class ShardedEventIndexModule method getEventIndexFactory.

@Provides
public EventIndex.Factory getEventIndexFactory(@Named("eventhub.shardedeventindex.directory") final String shardedEventIndexDirectory, @Named("eventhub.eventindex.initialNumEventIdsPerDay") final int initialNumEventIdsPerDay, final DmaIdList.Factory dmaIdListFactory) {
    dmaIdListFactory.setDefaultCapacity(initialNumEventIdsPerDay);
    return new EventIndex.Factory() {

        @Override
        public EventIndex build(String eventType) {
            String eventIndexDirectory = String.format("%s/%s/", shardedEventIndexDirectory, eventType);
            List<String> dates = Lists.newArrayList();
            File[] files = new File(eventIndexDirectory).listFiles(new PatternFilenameFilter("[0-9]{8}\\.ser"));
            if (files != null) {
                for (File file : files) {
                    dates.add(file.getName().substring(0, 8));
                }
            }
            SortedMap<String, IdList> eventIdListMap = Maps.newTreeMap();
            for (String date : dates) {
                eventIdListMap.put(date, dmaIdListFactory.build(EventIndex.getEventIdListFilename(eventIndexDirectory, date)));
            }
            return new EventIndex(eventIndexDirectory, dmaIdListFactory, eventIdListMap);
        }
    };
}
Also used : PatternFilenameFilter(com.google.common.io.PatternFilenameFilter) File(java.io.File) IdList(com.codecademy.eventhub.list.IdList) DmaIdList(com.codecademy.eventhub.list.DmaIdList) Provides(com.google.inject.Provides)

Example 2 with IdList

use of com.codecademy.eventhub.list.IdList in project EventHub by Codecademy.

the class EventIndex method addEvent.

public void addEvent(long eventId, String date) {
    IdList idList = eventIdListMap.get(date);
    if (idList == null) {
        idList = dmaIdListFactor.build(getEventIdListFilename(directory, date));
        eventIdListMap.put(date, idList);
    }
    idList.add(eventId);
}
Also used : IdList(com.codecademy.eventhub.list.IdList) DmaIdList(com.codecademy.eventhub.list.DmaIdList)

Example 3 with IdList

use of com.codecademy.eventhub.list.IdList 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

IdList (com.codecademy.eventhub.list.IdList)3 DmaIdList (com.codecademy.eventhub.list.DmaIdList)2 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 MemIdList (com.codecademy.eventhub.list.MemIdList)1 PatternFilenameFilter (com.google.common.io.PatternFilenameFilter)1 Provides (com.google.inject.Provides)1 File (java.io.File)1