package com.networknt.consul;
import com.networknt.registry.URLImpl;
import com.networknt.utility.Constants;
import com.networknt.registry.URLParamType;
import com.networknt.registry.URL;
import com.networknt.utility.Util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ConsulUtils {
/**
* Check if two lists have the same urls. If any list is empty, return false
*
* @param urls1 first url list
* @param urls2 second url list
* @return boolean true when they are the same
*/
public static boolean isSame(List<URL> urls1, List<URL> urls2) {
if (urls1 == null || urls2 == null) {
return false;
}
if (urls1.size() != urls2.size()) {
return false;
}
return urls1.containsAll(urls2);
}
/**
* build consul service from url
*
* @param url a URL object
* @return ConsulService consul service
*/
public static ConsulService buildService(URL url) {
ConsulService service = new ConsulService();
service.setAddress(url.getHost());
service.setId(ConsulUtils.convertConsulSerivceId(url));
service.setName(url.getPath());
service.setPort(url.getPort());
service.setTtl(ConsulConstants.TTL);
List<String> tags = new ArrayList<String>();
tags.add(ConsulConstants.CONSUL_TAG_LIGHT_PROTOCOL + url.getProtocol());
service.setTags(tags);
return service;
}
/**
* build url from service
*
* @param service consul service
* @return URL object
*/
public static URL buildUrl(ConsulService service) {
URL url = null;
if (url == null) {
Map<String, String> params = new HashMap<String, String>();
//String group = service.getName();
//params.put(URLParamType.group.getName(), group);
//params.put(URLParamType.nodeType.getName(), Constants.NODE_TYPE_SERVICE);
url = new URLImpl(ConsulConstants.DEFAULT_PROTOCOL, service.getAddress(), service.getPort(),
ConsulUtils.getPathFromServiceId(service.getId()), params);
}
return url;
}
/**
* get cluster info from url, cluster info (protocol, path)
*
* @param url a URL object
* @return String url cluster info
*/
public static String getUrlClusterInfo(URL url) {
return url.getPath();
}
/**
* convert group to service name
*
* @param group group
* @return String service name
*/
public static String convertGroupToServiceName(String group) {
return group;
}
/**
* get group from consul service
*
* @param group group
* @return group
*/
public static String getGroupFromServiceName(String group) {
return group;
}
/**
* convert url to consul service id. serviceid includes ip+port+service
*
* @param url a URL object
* @return service id
*/
public static String convertConsulSerivceId(URL url) {
if (url == null) {
return null;
}
return convertServiceId(url.getHost(), url.getPort(), url.getPath());
}
/**
* get path of url from service id in consul
*
* @param serviceId service id
* @return path
*/
public static String getPathFromServiceId(String serviceId) {
return serviceId.substring(serviceId.indexOf(":") + 1, serviceId.lastIndexOf(":"));
}
/**
* get protocol from consul tag
*
* @param tag tag
* @return protocol
*/
public static String getProtocolFromTag(String tag) {
return tag.substring(ConsulConstants.CONSUL_TAG_LIGHT_PROTOCOL.length());
}
public static String convertServiceId(String host, int port, String path) {
return host + ":" + path + ":" + port;
}
}