package codeine.db.mysql;
import codeine.jsons.global.MysqlConfigurationJson;
import com.google.common.collect.Lists;
import org.apache.log4j.Logger;
import javax.inject.Inject;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MysqlConnectionsProvider implements IMysqlConnectionsProvider {
private static final Logger log = Logger.getLogger(MysqlConnectionsProvider.class);
private List<MysqlConfigurationJson> sqlHosts;
private IDBConnection dbConnection;
public MysqlConnectionsProvider(List<MysqlConfigurationJson> sqls, IDBConnection dbConnection) {
sqlHosts = sqls;
this.dbConnection = dbConnection;
}
@Override
public List<MysqlConnectionWithPing> getMysqlConnections() {
List<MysqlConnectionWithPing> $ = Lists.newArrayList();
for (MysqlConfigurationJson sqlHost : sqlHosts) {
long time = check(sqlHost);
if (time != Long.MAX_VALUE) {
$.add(new MysqlConnectionWithPing(sqlHost, check(sqlHost)));
}
}
Collections.sort($, new Comparator<MysqlConnectionWithPing>() {
@Override
public int compare(MysqlConnectionWithPing o1, MysqlConnectionWithPing o2) {
return Long.compare(o1.getPingTime(),o2.getPingTime());
}
});
return $;
}
private long check(MysqlConfigurationJson mysql) {
long start = System.currentTimeMillis();
if (!dbConnection.checkConnection(mysql.host(), mysql.port(), mysql.user(), mysql.password())){
log.info("Failed to check connection to " + mysql);
return Long.MAX_VALUE;
}
return System.currentTimeMillis() - start;
}
}