/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.common.server.bo;
import com.navercorp.pinpoint.common.buffer.AutomaticBuffer;
import com.navercorp.pinpoint.common.buffer.Buffer;
import java.util.Comparator;
/**
* @author emeroad
* @author hyungil.jeong
*/
public class AgentInfoBo {
public static final Comparator<AgentInfoBo> AGENT_NAME_ASC_COMPARATOR = new Comparator<AgentInfoBo>() {
@Override
public int compare(AgentInfoBo that, AgentInfoBo other) {
final String thatAgentId = defaultString(that.agentId);
final String otherAgentId = defaultString(other.agentId);
return thatAgentId.compareTo(otherAgentId);
}
private String defaultString(String string) {
return string == null ? "" : string;
}
};
private final String hostName;
private final String ip;
private final String ports;
private final String agentId;
private final String applicationName;
private final short serviceTypeCode;
private final int pid;
private final String vmVersion;
private final String agentVersion;
private final long startTime;
private final long endTimeStamp;
private final int endStatus;
// Should be serialized separately
private final ServerMetaDataBo serverMetaData;
private final JvmInfoBo jvmInfo;
private AgentInfoBo(Builder builder) {
this.hostName = builder.hostName;
this.ip = builder.ip;
this.ports = builder.ports;
this.agentId = builder.agentId;
this.applicationName = builder.applicationName;
this.serviceTypeCode = builder.serviceTypeCode;
this.pid = builder.pid;
this.vmVersion = builder.vmVersion;
this.agentVersion = builder.agentVersion;
this.startTime = builder.startTime;
this.endTimeStamp = builder.endTimeStamp;
this.endStatus = builder.endStatus;
this.serverMetaData = builder.serverMetaData;
this.jvmInfo = builder.jvmInfo;
}
public String getIp() {
return ip;
}
public String getHostName() {
return hostName;
}
public String getPorts() {
return ports;
}
public String getAgentId() {
return agentId;
}
public String getApplicationName() {
return applicationName;
}
public long getStartTime() {
return startTime;
}
public long getEndTimeStamp() {
return endTimeStamp;
}
public int getEndStatus() {
return endStatus;
}
public int getPid() {
return pid;
}
public short getServiceTypeCode() {
return serviceTypeCode;
}
public String getVmVersion() {
return vmVersion;
}
public String getAgentVersion() {
return agentVersion;
}
public ServerMetaDataBo getServerMetaData() {
return this.serverMetaData;
}
public JvmInfoBo getJvmInfo() {
return this.jvmInfo;
}
public byte[] writeValue() {
final Buffer buffer = new AutomaticBuffer();
buffer.putPrefixedString(this.getHostName());
buffer.putPrefixedString(this.getIp());
buffer.putPrefixedString(this.getPorts());
buffer.putPrefixedString(this.getApplicationName());
buffer.putShort(this.getServiceTypeCode());
buffer.putInt(this.getPid());
buffer.putPrefixedString(this.getAgentVersion());
buffer.putLong(this.getStartTime());
buffer.putLong(this.getEndTimeStamp());
buffer.putInt(this.getEndStatus());
buffer.putPrefixedString(this.getVmVersion());
return buffer.getBuffer();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((agentId == null) ? 0 : agentId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AgentInfoBo other = (AgentInfoBo)obj;
if (agentId == null) {
if (other.agentId != null)
return false;
} else if (!agentId.equals(other.agentId))
return false;
return true;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("AgentInfoBo{");
sb.append("hostName='").append(hostName).append('\'');
sb.append(", ip='").append(ip).append('\'');
sb.append(", ports='").append(ports).append('\'');
sb.append(", agentId='").append(agentId).append('\'');
sb.append(", applicationName='").append(applicationName).append('\'');
sb.append(", serviceTypeCode=").append(serviceTypeCode);
sb.append(", pid=").append(pid);
sb.append(", vmVersion=").append(vmVersion).append('\'');
sb.append(", agentVersion='").append(agentVersion).append('\'');
sb.append(", startTime=").append(startTime);
sb.append(", endTimeStamp=").append(endTimeStamp);
sb.append(", endStatus=").append(endStatus);
sb.append('}');
return sb.toString();
}
public static class Builder {
private String hostName;
private String ip;
private String ports;
private String agentId;
private String applicationName;
private short serviceTypeCode;
private int pid;
private String vmVersion;
private String agentVersion;
private long startTime;
private long endTimeStamp;
private int endStatus;
// Should be serialized separately
private ServerMetaDataBo serverMetaData;
private JvmInfoBo jvmInfo;
public Builder() {
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public void setIp(String ip) {
this.ip = ip;
}
public void setPorts(String ports) {
this.ports = ports;
}
public void setAgentId(String agentId) {
this.agentId = agentId;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public void setServiceTypeCode(short serviceTypeCode) {
this.serviceTypeCode = serviceTypeCode;
}
public short getServiceTypeCode() {
return serviceTypeCode;
}
public void setPid(int pid) {
this.pid = pid;
}
public void setVmVersion(String vmVersion) {
this.vmVersion = vmVersion;
}
public void setAgentVersion(String agentVersion) {
this.agentVersion = agentVersion;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
public void setEndTimeStamp(long endTimeStamp) {
this.endTimeStamp = endTimeStamp;
}
public void setEndStatus(int endStatus) {
this.endStatus = endStatus;
}
public void setServerMetaData(ServerMetaDataBo serverMetaData) {
this.serverMetaData = serverMetaData;
}
public void setJvmInfo(JvmInfoBo jvmInfo) {
this.jvmInfo = jvmInfo;
}
public AgentInfoBo build() {
if (this.hostName == null)
this.hostName = "";
if (this.ip == null)
this.ip = "";
if (this.ports == null)
this.ports = "";
if (this.agentId == null)
this.agentId = "";
if (this.applicationName == null)
this.applicationName = "";
if (this.vmVersion == null)
this.vmVersion = "";
if (this.agentVersion == null) {
this.agentVersion = "";
}
return new AgentInfoBo(this);
}
}
}