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.common.base.Optional; import com.google.inject.Inject; import com.hubspot.baragon.service.BaragonServiceModule; import com.hubspot.baragon.service.config.ElbConfiguration; import com.hubspot.baragon.service.worker.BaragonElbSyncWorker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ElbSyncWorkerListener extends AbstractLatchListener { private static final Logger LOG = LoggerFactory.getLogger(ElbSyncWorkerListener.class); private final ScheduledExecutorService executorService; private final BaragonElbSyncWorker elbWorker; private final Optional<ElbConfiguration> config; private ScheduledFuture<?> elbWorkerFuture = null; @Inject public ElbSyncWorkerListener(@Named(BaragonServiceModule.BARAGON_SERVICE_SCHEDULED_EXECUTOR) ScheduledExecutorService executorService, Optional<ElbConfiguration> config, BaragonElbSyncWorker elbWorker) { this.executorService = executorService; this.config = config; this.elbWorker = elbWorker; } @Override public void isLeader() { LOG.info("We are the leader! Starting ElbSyncWorker..."); if (elbWorkerFuture != null) { elbWorkerFuture.cancel(false); } elbWorkerFuture = executorService.scheduleAtFixedRate(elbWorker, config.get().getInitialDelaySeconds(), config.get().getIntervalSeconds(), TimeUnit.SECONDS); } @Override public void notLeader() { LOG.info("We are not the leader!"); elbWorkerFuture.cancel(false); } @Override public boolean isEnabled() { return (config.isPresent() && config.get().isEnabled()); } }