package org.gbif.checklistbank.cli.analysis;
import org.gbif.api.model.Constants;
import org.gbif.api.model.checklistbank.DatasetMetrics;
import org.gbif.checklistbank.cli.common.RabbitDatasetService;
import org.gbif.checklistbank.service.DatasetAnalysisService;
import org.gbif.checklistbank.service.mybatis.guice.ChecklistBankServiceMyBatisModule;
import org.gbif.common.messaging.api.messages.BackboneChangedMessage;
import org.gbif.common.messaging.api.messages.ChecklistAnalyzedMessage;
import org.gbif.common.messaging.api.messages.ChecklistSyncedMessage;
import java.io.IOException;
import com.google.common.base.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AnalysisService extends RabbitDatasetService<ChecklistSyncedMessage> {
private static final Logger LOG = LoggerFactory.getLogger(AnalysisService.class);
private final DatasetAnalysisService analysisService;
private final DatasetIndexUpdater datasetIndexUpdater;
public AnalysisService(AnalysisConfiguration cfg) {
super("clb-analysis", cfg.poolSize, cfg.messaging, cfg.ganglia, "analyze", ChecklistBankServiceMyBatisModule.create(cfg.clb));
analysisService = getInstance(DatasetAnalysisService.class);
if (Strings.isNullOrEmpty(cfg.dataset.serverHome)) {
datasetIndexUpdater = null;
} else {
datasetIndexUpdater = new DatasetIndexUpdater(cfg.clb, cfg.dataset);
}
}
@Override
public Class<ChecklistSyncedMessage> getMessageClass() {
return ChecklistSyncedMessage.class;
}
@Override
protected void process(ChecklistSyncedMessage msg) throws IOException {
DatasetMetrics metrics = analysisService.analyse(msg.getDatasetUuid(), msg.getCrawlFinished());
if (datasetIndexUpdater != null) {
datasetIndexUpdater.index(msg.getDatasetUuid());
}
send(new ChecklistAnalyzedMessage(msg.getDatasetUuid()));
if (Constants.NUB_DATASET_KEY.equals(msg.getDatasetUuid())) {
send(new BackboneChangedMessage(metrics));
}
}
@Override
protected void shutDown() throws Exception {
if (datasetIndexUpdater != null) {
datasetIndexUpdater.close();
}
super.shutDown();
}
}