package com.linkedin.thirdeye.client.cache;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jersey.repackaged.com.google.common.collect.Lists;
import com.linkedin.thirdeye.common.ThirdEyeConfiguration;
import com.linkedin.thirdeye.datalayer.bao.DatasetConfigManager;
import com.linkedin.thirdeye.datalayer.dto.DatasetConfigDTO;
public class CollectionsCache {
private AtomicReference<List<String>> collectionsRef;
private DatasetConfigManager datasetConfigDAO;
private List<String> whitelistCollections;
private static final Logger LOG = LoggerFactory.getLogger(CollectionsCache.class);
public CollectionsCache(DatasetConfigManager datasetConfigDAO, ThirdEyeConfiguration config) {
this.collectionsRef = new AtomicReference<>();
this.datasetConfigDAO = datasetConfigDAO;
this.whitelistCollections = config.getWhitelistCollections();
}
public List<String> getCollections() {
return collectionsRef.get();
}
public void loadCollections() {
List<String> collections = new ArrayList<>();
if (CollectionUtils.isNotEmpty(whitelistCollections)) {
for (String collection : whitelistCollections) {
DatasetConfigDTO datasetConfig = datasetConfigDAO.findByDataset(collection);
if (datasetConfig == null || !datasetConfig.isActive()) {
LOG.info("Skipping collection {} due to missing dataset config or status inactive", collection);
continue;
}
collections.add(collection);
}
} else {
List<DatasetConfigDTO> datasetConfigs = datasetConfigDAO.findActive();
for (DatasetConfigDTO datasetConfigDTO : datasetConfigs) {
collections.add(datasetConfigDTO.getDataset());
}
}
LOG.info("Loading collections {}", collections);
collectionsRef.set(collections);
}
}