package org.distributeme.consulintegration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gson.annotations.SerializedName;
import org.distributeme.core.ServiceDescriptor;
/**
* Request object for register a service at the consul registry.
* Created by rboehling on 2/28/17.
*/
class ConsulServiceDescription {
@SerializedName("ID")
private String id;
@SerializedName("Name")
private String name;
@SerializedName("Tags")
private List<String> tags = new ArrayList<>();
@SerializedName("Address")
private String address;
@SerializedName("Port")
private int port;
@SerializedName("EnableTagOverride")
private boolean enableTagOverride = false;
ConsulServiceDescription(ServiceDescriptor serviceDescriptor, Map<String, String> tagableSystemProperties, List<String> customTagList) {
String consulFriendlyServiceName = ServiceNameTranslator.toConsul(serviceDescriptor.getServiceId());
id = consulFriendlyServiceName;
name = consulFriendlyServiceName;
port = serviceDescriptor.getPort();
address = serviceDescriptor.getHost();
addInstanceId(serviceDescriptor.getInstanceId());
addCustomTags(customTagList);
addSystemProperties(tagableSystemProperties);
addProtocol(serviceDescriptor.getProtocol());
addTimestamp(serviceDescriptor.getTimestamp());
}
ConsulServiceDescription(ServiceDescriptor servicesDescriptor, Map<String, String> tagableSystemProperties) {
this(servicesDescriptor, tagableSystemProperties, new ArrayList<String>());
}
private void addCustomTags(List<String> customTagList) {
for (String customTag : customTagList) {
tags.add(customTag);
}
}
private void addSystemProperties(Map<String, String> tagableSystemProperties) {
for(Map.Entry<String, String> entry: tagableSystemProperties.entrySet()) {
String tagName = entry.getKey();
String tagValue = entry.getValue();
tags.add(tagName + "=" + tagValue);
}
}
private void addInstanceId(String instanceId) {
tags.add(ConsulTag.INSTANCE_ID.getTagName() + "=" + instanceId);
}
private void addProtocol(String protocol) {
tags.add(ConsulTag.PROTOCOL.getTagName() + "=" + protocol);
}
private void addTimestamp(long timestamp) {
tags.add(ConsulTag.TIMESTAMP.getTagName() + "=" + timestamp);
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public int getPort() {
return port;
}
public List<String> getTags() {
return tags;
}
}