package com.linkedin.thirdeye.client.cache;
import java.util.List;
import java.util.Map;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.cache.CacheLoader;
import com.linkedin.thirdeye.dashboard.Utils;
public class DimensionFiltersCacheLoader extends CacheLoader<String, String> {
private static final Logger LOGGER = LoggerFactory.getLogger(DimensionFiltersCacheLoader.class);
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private QueryCache queryCache;
public DimensionFiltersCacheLoader(QueryCache queryCache) {
this.queryCache = queryCache;
}
@Override
public String load(String dataset) throws Exception {
DateTime startDateTime = new DateTime(System.currentTimeMillis()).minusDays(7);
DateTime endDateTime = new DateTime(System.currentTimeMillis());
String jsonFilters = null;
try {
LOGGER.info("Loading dimension filters cache {}", dataset);
List<String> dimensions = Utils.getSortedDimensionNames(dataset);
Map<String, List<String>> filters =
Utils.getFilters(queryCache, dataset, "filters", dimensions, startDateTime, endDateTime);
jsonFilters = OBJECT_MAPPER.writeValueAsString(filters);
} catch (Exception e) {
LOGGER.error("Error while fetching dimension values in filter drop down for collection: {}",
dataset, e);
}
return jsonFilters;
}
}