package com.hubspot.baragon.models; import java.util.Collections; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Optional; import com.hubspot.baragon.exceptions.InvalidAgentMetadataStringException; @JsonIgnoreProperties( ignoreUnknown = true ) public class BaragonAgentMetadata { public static final Pattern AGENT_METADATA_STRING_REGEX = Pattern.compile("^http[s]?:\\/\\/([^:\\/]+:\\d{1,5})\\/.*$"); private final String baseAgentUri; @Deprecated private final Optional<String> domain; private final String agentId; private final BaragonAgentEc2Metadata ec2; private final Map<String, String> extraAgentData; private final boolean batchEnabled; @JsonCreator public static BaragonAgentMetadata fromString(String value) { final Matcher matcher = AGENT_METADATA_STRING_REGEX.matcher(value); if (!matcher.matches()) { throw new InvalidAgentMetadataStringException(value); } return new BaragonAgentMetadata(value, matcher.group(1), Optional.<String>absent(), new BaragonAgentEc2Metadata(Optional.<String>absent(), Optional.<String>absent(), Optional.<String>absent(), Optional.<String>absent()), Collections.<String, String>emptyMap(), false); } @JsonCreator public BaragonAgentMetadata(@JsonProperty("baseAgentUri") String baseAgentUri, @JsonProperty("agentId") String agentId, @JsonProperty("domain") Optional<String> domain, @JsonProperty("ec2") BaragonAgentEc2Metadata ec2, @JsonProperty("extraAgentData") Map<String, String> extraAgentData, @JsonProperty("batchEnabled") boolean batchEnabled) { this.baseAgentUri = baseAgentUri; this.domain = domain; this.agentId = agentId; this.ec2 = ec2; this.extraAgentData = MoreObjects.firstNonNull(extraAgentData, Collections.<String, String>emptyMap()); this.batchEnabled = MoreObjects.firstNonNull(batchEnabled, false); } public String getBaseAgentUri() { return baseAgentUri; } @Deprecated public Optional<String> getDomain() { return domain; } public String getAgentId() { return agentId; } public BaragonAgentEc2Metadata getEc2() { return ec2; } public Map<String, String> getExtraAgentData() { return extraAgentData; } public boolean isBatchEnabled() { return batchEnabled; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } BaragonAgentMetadata that = (BaragonAgentMetadata) o; return batchEnabled == that.batchEnabled && Objects.equal(baseAgentUri, that.baseAgentUri) && Objects.equal(domain, that.domain) && Objects.equal(agentId, that.agentId) && Objects.equal(ec2, that.ec2) && Objects.equal(extraAgentData, that.extraAgentData) && Objects.equal(batchEnabled, batchEnabled); } @Override public int hashCode() { return Objects.hashCode(baseAgentUri, domain, agentId, ec2, extraAgentData, batchEnabled); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("baseAgentUri", baseAgentUri) .add("domain", domain) .add("agentId", agentId) .add("ec2", ec2) .add("extraAgentData", extraAgentData) .add("batchEnabled", batchEnabled) .toString(); } }