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);
}
};
}
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);
}
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;
}
Aggregations