package org.rakam.plugin; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import org.rakam.collection.Event; import org.rakam.report.QueryExecution; import org.rakam.report.QueryResult; import org.rakam.report.realtime.AggregationType; import java.net.URL; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; public interface EventStore { int[] SUCCESSFUL_BATCH = new int[0]; CompletableFuture<Void> COMPLETED_FUTURE = CompletableFuture.completedFuture(null); CompletableFuture<int[]> COMPLETED_FUTURE_BATCH = CompletableFuture.completedFuture(new int[] {}); default void store(Event event) { storeAsync(event).join(); } default int[] storeBatch(List<Event> events) { return storeBatchAsync(events).join(); } CompletableFuture<int[]> storeBatchAsync(List<Event> events); CompletableFuture<Void> storeAsync(Event event); default void storeBulk(List<Event> events) { if (events.isEmpty()) { return; } storeBatch(events); } enum CopyType { AVRO, CSV, JSON; @JsonCreator public static CopyType get(String name) { return valueOf(name.toUpperCase()); } @JsonProperty public String value() { return name(); } } enum CompressionType { GZIP; @JsonCreator public static CompressionType get(String name) { return valueOf(name.toUpperCase()); } @JsonProperty public String value() { return name(); } } }