AgentTracker.java

package emissary.core.sentinel.protocols.trackers;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

import java.util.StringJoiner;

public class AgentTracker implements Tracker, Comparable<AgentTracker> {

    private final String agentName;
    private String agentId;
    private String shortName;
    private String directoryEntryKey;
    private long timer = -1;

    public AgentTracker(String agentName) {
        this.agentName = agentName;
    }

    public String getAgentName() {
        return agentName;
    }

    public String getAgentId() {
        return agentId;
    }

    public void setAgentId(String agentId) {
        if (StringUtils.contains(agentId, "No_AgentID_Set")) {
            clear();
        } else {
            this.agentId = agentId;
            if (StringUtils.contains(agentId, "Agent-")) {
                this.shortName = getShortName(agentId);
            }
        }
    }

    public String getShortName() {
        return shortName;
    }

    public static String getShortName(String agentId) {
        return StringUtils.substringAfter(StringUtils.substringAfter(agentId, "Agent-"), "-");
    }

    public String getDirectoryEntryKey() {
        return directoryEntryKey;
    }

    public void setDirectoryEntryKey(String directoryEntryKey) {
        this.directoryEntryKey = directoryEntryKey;
    }

    public String getPlaceName() {
        return getPlaceName(this.directoryEntryKey);
    }

    public static String getPlaceName(String directoryEntryKey) {
        return StringUtils.defaultString(StringUtils.substringAfterLast(directoryEntryKey, "/"));
    }

    public long getTimer() {
        return timer;
    }

    public void resetTimer() {
        this.timer = -1;
    }

    public void incrementTimer(long time) {
        if (this.timer == -1) {
            this.timer = 0;
        } else {
            this.timer += time;
        }
    }

    public void clear() {
        this.agentId = "";
        this.shortName = "";
        this.directoryEntryKey = "";
        resetTimer();
    }

    @Override
    public int compareTo(AgentTracker o) {
        return this.agentName.compareTo(o.agentName);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }

        if (!(o instanceof AgentTracker)) {
            return false;
        }

        AgentTracker that = (AgentTracker) o;

        return new EqualsBuilder()
                .append(getTimer(), that.getTimer())
                .append(getAgentName(), that.getAgentName())
                .append(getAgentId(), that.getAgentId())
                .append(getShortName(), that.getShortName())
                .append(getDirectoryEntryKey(), that.getDirectoryEntryKey())
                .isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37)
                .append(getAgentName())
                .append(getAgentId())
                .append(getShortName())
                .append(getDirectoryEntryKey())
                .append(getTimer())
                .toHashCode();
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", "{", "}")
                .add("\"agentName\":\"" + agentName + "\"")
                .add("\"directoryEntry\":\"" + directoryEntryKey + "\"")
                .add("\"shortName\":\"" + shortName + "\"")
                .add("\"timeInMinutes\":" + timer)
                .toString();
    }
}