package com.dianping.pigeon.registry.composite;
import com.dianping.pigeon.config.ConfigManager;
import com.dianping.pigeon.config.ConfigManagerLoader;
import com.dianping.pigeon.log.Logger;
import com.dianping.pigeon.log.LoggerLoader;
import com.dianping.pigeon.registry.Registry;
import com.dianping.pigeon.registry.util.Constants;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* Created by chenchongze on 17/5/5.
*/
public class MixUtils {
private static final Logger logger = LoggerLoader.getLogger(MixUtils.class);
private static final ConfigManager configManager = ConfigManagerLoader.getConfigManager();
public static final String KEY_MIX_MODE_READ_PREFER = "pigeon.registry.mix.mode.read.prefer";
private volatile static String mixReadPrefer = configManager.getStringValue(KEY_MIX_MODE_READ_PREFER, Constants.REGISTRY_MIX_NAME);
// registryName --> registry
private static final Map<String, Registry> registrys = new HashMap<>();
// serviceName --> true : mns, false/not exist : curator
private static final ConcurrentMap<String, Boolean> serviceActives = new ConcurrentHashMap<>();
// ip:port --> true : mns, false/not exist : curator
private static final ConcurrentMap<String, Boolean> machineActives = new ConcurrentHashMap<>();
public static String getMixReadPrefer() {
return mixReadPrefer;
}
public static void setMixReadPrefer(String mixReadPrefer) {
MixUtils.mixReadPrefer = mixReadPrefer;
}
public static Map<String, Registry> getRegistrys() {
return registrys;
}
public static ConcurrentMap<String, Boolean> getServiceActives() {
return serviceActives;
}
public static ConcurrentMap<String, Boolean> getMachineActives() {
return machineActives;
}
public static List<String[]> getServiceIpPortList(String serviceAddress) {
List<String[]> result = new ArrayList<String[]>();
if (serviceAddress != null && serviceAddress.length() > 0) {
String[] hostArray = serviceAddress.split(",");
for (String host : hostArray) {
int idx = host.lastIndexOf(":");
if (idx != -1) {
String ip = null;
int port = -1;
try {
ip = host.substring(0, idx);
port = Integer.parseInt(host.substring(idx + 1));
} catch (RuntimeException e) {
logger.warn("invalid host: " + host + ", ignored!");
}
if (ip != null && port > 0) {
result.add(new String[]{ip, port + ""});
}
} else {
logger.warn("invalid host: " + host + ", ignored!");
}
}
}
return result;
}
}