package org.rakam.analysis; import com.google.common.collect.ImmutableMap; import com.google.common.eventbus.Subscribe; import org.rakam.analysis.MaterializedViewService; import org.rakam.config.ProjectConfig; import org.rakam.plugin.MaterializedView; import org.rakam.plugin.SystemEvents.CollectionCreatedEvent; import javax.inject.Inject; import java.time.Duration; import static java.lang.String.format; import static org.rakam.util.ValidationUtil.checkCollection; import static org.rakam.util.ValidationUtil.checkTableColumn; public class EventExplorerListener { private final MaterializedViewService materializedViewService; private final ProjectConfig projectConfig; @Inject public EventExplorerListener(ProjectConfig projectConfig, MaterializedViewService materializedViewService) { this.materializedViewService = materializedViewService; this.projectConfig = projectConfig; } @Subscribe public void onCreateCollection(CollectionCreatedEvent event) { createTable(event.project, event.collection); } public void createTable(String project, String collection) { String query = format("select date_trunc('hour', %s) as _time, count(*) as total from %s group by 1", checkTableColumn(projectConfig.getTimeColumn()), checkCollection(collection)); MaterializedView report = new MaterializedView("_event_explorer_metrics - " + collection, format("Event explorer metrics for %s collection", collection), query, Duration.ofHours(1), true, true, ImmutableMap.of()); materializedViewService.create(project, report).join(); } }