package com.airbnb.airpal.core.store.usage;
import com.airbnb.airpal.presto.Table;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.SlidingTimeWindowReservoir;
import com.google.common.collect.Maps;
import io.dropwizard.util.Duration;
import lombok.RequiredArgsConstructor;
import java.util.Map;
@RequiredArgsConstructor
public class LocalUsageStore implements UsageStore
{
private final Map<Table, Histogram> usageMap = Maps.newHashMap();
private final Duration usageTrackTime;
@Override
public long getUsages(Table table)
{
final Histogram window = usageMap.get(table);
if (window != null)
return window.getSnapshot().size();
else
return 0l;
}
@Override
public Map<Table, Long> getUsages(Iterable<Table> tables) {
return null;
}
@Override
public void markUsage(Table table)
{
Histogram window = usageMap.get(table);
if (window == null) {
final SlidingTimeWindowReservoir reservoir = new SlidingTimeWindowReservoir(
usageTrackTime.getQuantity(),
usageTrackTime.getUnit());
window = new Histogram(reservoir);
usageMap.put(table, window);
}
window.update(1);
}
@Override
public Duration window() {
return usageTrackTime;
}
}