package org.rakam.aws; import com.google.common.eventbus.EventBus; import org.rakam.analysis.EventExplorer; import org.rakam.analysis.InMemoryQueryMetadataStore; import org.rakam.analysis.JDBCPoolDataSource; import org.rakam.analysis.TestEventExplorer; import org.rakam.analysis.metadata.Metastore; import org.rakam.aws.kinesis.AWSKinesisEventStore; import org.rakam.collection.Event; import org.rakam.collection.FieldDependencyBuilder; import org.rakam.config.JDBCConfig; import org.rakam.config.ProjectConfig; import org.rakam.event.TestingEnvironment; import org.rakam.plugin.EventStore; import org.rakam.presto.analysis.PrestoConfig; import org.rakam.presto.analysis.PrestoContinuousQueryService; import org.rakam.presto.analysis.PrestoEventExplorer; import org.rakam.presto.analysis.PrestoMaterializedViewService; import org.rakam.presto.analysis.PrestoQueryExecutor; import org.rakam.presto.analysis.PrestoRakamRaptorMetastore; import org.rakam.report.QueryExecutorService; import org.rakam.report.realtime.RealTimeConfig; import org.testng.annotations.BeforeSuite; import java.time.Clock; import java.util.List; public class TestPrestoEventExplorer extends TestEventExplorer { private EventExplorer eventExplorer; private TestingEnvironment testingEnvironment; private PrestoRakamRaptorMetastore metastore; private PrestoQueryExecutor prestoQueryExecutor; private InMemoryQueryMetadataStore queryMetadataStore; private JDBCPoolDataSource metastoreDataSource; private PrestoContinuousQueryService continuousQueryService; private AWSKinesisEventStore testingPrestoEventStore; @BeforeSuite @Override public void setup() throws Exception { testingEnvironment = new TestingEnvironment(); PrestoConfig prestoConfig = testingEnvironment.getPrestoConfig(); JDBCConfig postgresqlConfig = testingEnvironment.getPostgresqlConfig(); metastoreDataSource = JDBCPoolDataSource.getOrCreateDataSource(postgresqlConfig); queryMetadataStore = new InMemoryQueryMetadataStore(); metastore = new PrestoRakamRaptorMetastore(testingEnvironment.getPrestoMetastore(), new EventBus(), new ProjectConfig(), prestoConfig); metastore.setup(); prestoQueryExecutor = new PrestoQueryExecutor(new ProjectConfig(), prestoConfig, null, null, metastore); continuousQueryService = new PrestoContinuousQueryService(queryMetadataStore, new RealTimeConfig(), prestoQueryExecutor, prestoConfig); PrestoMaterializedViewService materializedViewService = new PrestoMaterializedViewService( new PrestoConfig(), prestoQueryExecutor, metastore, queryMetadataStore); QueryExecutorService queryExecutorService = new QueryExecutorService(prestoQueryExecutor, metastore, materializedViewService, Clock.systemUTC(), '"'); eventExplorer = new PrestoEventExplorer(new ProjectConfig(), queryExecutorService, metastore, continuousQueryService, materializedViewService); setupInline(); super.setup(); // new EventExplorerListener(new ProjectConfig(), null).onCreateCollection(new ProjectCreatedEvent(PROJECT_NAME)); // todo find a better way of handling this Thread.sleep(15000); } @Override public EventStore getEventStore() { return testingPrestoEventStore; } public PrestoQueryExecutor getPrestoQueryExecutor() { return prestoQueryExecutor; } public PrestoContinuousQueryService getContinuousQueryService() { return continuousQueryService; } public JDBCPoolDataSource getMetastoreDataSource() { return metastoreDataSource; } public void setupInline() { AWSConfig awsConfig = testingEnvironment.getAWSConfig(); int kinesisPort = getEnvironment().getKinesisPort(); awsConfig .setKinesisEndpoint(kinesisPort == 0 ? null : "http://127.0.0.1:" + kinesisPort) .setEventStoreStreamName("rakam-events"); testingPrestoEventStore = new AWSKinesisEventStore( awsConfig, getMetastore(), new FieldDependencyBuilder().build()) { // KCL doesn't work with Kinesalite. See: https://github.com/mhart/kinesalite/issues/16 @Override public int[] storeBatch(List<Event> events) { events.forEach(this::store); return SUCCESSFUL_BATCH; } }; } @Override public Metastore getMetastore() { return metastore; } @Override public EventExplorer getEventExplorer() { return eventExplorer; } public TestingEnvironment getEnvironment() { return testingEnvironment; } }