package com.hubspot.baragon.service.listeners;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.inject.Named;
import com.google.inject.Inject;
import com.hubspot.baragon.service.BaragonServiceModule;
import com.hubspot.baragon.service.config.BaragonConfiguration;
import com.hubspot.baragon.service.worker.RequestPurgingWorker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RequestPurgingListener extends AbstractLatchListener {
private static final Logger LOG = LoggerFactory.getLogger(RequestPurgingListener.class);
private final ScheduledExecutorService executorService;
private final BaragonConfiguration configuration;
private final RequestPurgingWorker requestPurgingWorker;
private ScheduledFuture<?> requestPurgerWorkerFuture = null;
@Inject
public RequestPurgingListener(@Named(BaragonServiceModule.BARAGON_SERVICE_SCHEDULED_EXECUTOR) ScheduledExecutorService executorService,
BaragonConfiguration configuration,
RequestPurgingWorker requestPurgingWorker) {
this.executorService = executorService;
this.configuration = configuration;
this.requestPurgingWorker = requestPurgingWorker;
}
@Override
public void isLeader() {
LOG.info("We are the leader! Starting Old Request Purger...");
if (requestPurgerWorkerFuture != null) {
requestPurgerWorkerFuture.cancel(false);
}
requestPurgerWorkerFuture = executorService.scheduleAtFixedRate(
requestPurgingWorker,
configuration.getHistoryConfiguration().getWorkerInitialDelayHours(),
configuration.getHistoryConfiguration().getPurgeEveryHours(),
TimeUnit.HOURS
);
}
@Override
public void notLeader() {
LOG.info("We are not the leader!");
requestPurgerWorkerFuture.cancel(false);
}
@Override
public boolean isEnabled() {
return configuration.getHistoryConfiguration().isEnabled();
}
}