package codeine.db.mysql; import codeine.executer.Task; import codeine.jsons.global.GlobalConfigurationJsonStore; import codeine.jsons.global.MysqlConfigurationJson; import org.apache.log4j.Logger; import javax.inject.Inject; import java.util.concurrent.TimeUnit; public class NearestMysqlHostSelectorPeer implements Task, MysqlHostSelector{ public static final long INTERVAL = TimeUnit.HOURS.toMillis(1); private static final Logger log = Logger.getLogger(NearestMysqlHostSelectorPeer.class); @Inject private GlobalConfigurationJsonStore conf; @Inject private IDBConnection dbConnection; private MysqlConfigurationJson mysqlConf; private NearestHostSelector nearestHostSelector; @Override public MysqlConfigurationJson mysql() { return mysql(false); } private MysqlConfigurationJson mysql(boolean forceNew) { if (null != mysqlConf && !forceNew){ return mysqlConf; } mysqlConf = selectNearestConf(); return mysqlConf; } private MysqlConfigurationJson selectNearestConf() { log.info("selectNearestConf - starting"); if (nearestHostSelector == null) { nearestHostSelector = new NearestHostSelector(new MysqlConnectionsProvider(conf.get().mysql(), dbConnection)); } MysqlConfigurationJson selectedMysql = nearestHostSelector.select(); log.info("selectNearestConf - selected mysql " + selectedMysql); return selectedMysql; } @Override public String toString() { return "NearestMysqlHostSelector [mysqlConf=" + mysqlConf + "]"; } @Override public void run() { log.info("Checking for nearest mysql db"); mysql(true); } }