/*
* Copyright 2015 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.web.vo;
import java.util.Comparator;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.navercorp.pinpoint.common.server.bo.AgentEventBo;
import com.navercorp.pinpoint.common.server.util.AgentEventType;
/**
* @author HyunGil Jeong
*/
@JsonInclude(Include.NON_NULL)
public class AgentEvent {
public static final Comparator<AgentEvent> EVENT_TIMESTAMP_ASC_COMPARATOR = new Comparator<AgentEvent>() {
@Override
public int compare(AgentEvent o1, AgentEvent o2) {
int eventTimestampComparison = Long.compare(o1.eventTimestamp, o2.eventTimestamp);
if (eventTimestampComparison == 0) {
return o2.eventTypeCode - o1.eventTypeCode;
}
return eventTimestampComparison;
}
};
public static final Comparator<AgentEvent> EVENT_TIMESTAMP_DESC_COMPARATOR = new Comparator<AgentEvent>() {
@Override
public int compare(AgentEvent o1, AgentEvent o2) {
int eventTimestampComparison = Long.compare(o2.eventTimestamp, o1.eventTimestamp);
if (eventTimestampComparison == 0) {
return o1.eventTypeCode - o2.eventTypeCode;
}
return eventTimestampComparison;
}
};
@JsonProperty
private final String agentId;
@JsonProperty
private final long eventTimestamp;
@JsonProperty
private final int eventTypeCode;
@JsonProperty
private final String eventTypeDesc;
@JsonProperty
private final boolean hasEventMessage;
@JsonProperty
private final long startTimestamp;
@JsonProperty
private Object eventMessage;
public AgentEvent(AgentEventBo agentEventBo) {
this.agentId = agentEventBo.getAgentId();
this.eventTimestamp = agentEventBo.getEventTimestamp();
this.startTimestamp = agentEventBo.getStartTimestamp();
AgentEventType eventType = agentEventBo.getEventType();
this.eventTypeCode = eventType.getCode();
this.eventTypeDesc = eventType.getDesc();
this.hasEventMessage = eventType.getMessageType() != Void.class;
}
public String getAgentId() {
return agentId;
}
public long getEventTimestamp() {
return eventTimestamp;
}
public int getEventTypeCode() {
return eventTypeCode;
}
public String getEventTypeDesc() {
return eventTypeDesc;
}
public boolean hasEventMessage() {
return this.hasEventMessage;
}
public long getStartTimestamp() {
return startTimestamp;
}
public Object getEventMessage() {
return eventMessage;
}
public void setEventMessage(Object eventMessage) {
this.eventMessage = eventMessage;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((agentId == null) ? 0 : agentId.hashCode());
result = prime * result + (int)(eventTimestamp ^ (eventTimestamp >>> 32));
result = prime * result + eventTypeCode;
result = prime * result + ((eventTypeDesc == null) ? 0 : eventTypeDesc.hashCode());
result = prime * result + (hasEventMessage ? 1231 : 1237);
result = prime * result + (int)(startTimestamp ^ (startTimestamp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AgentEvent other = (AgentEvent)obj;
if (agentId == null) {
if (other.agentId != null)
return false;
} else if (!agentId.equals(other.agentId))
return false;
if (eventTimestamp != other.eventTimestamp)
return false;
if (eventTypeCode != other.eventTypeCode)
return false;
if (eventTypeDesc == null) {
if (other.eventTypeDesc != null)
return false;
} else if (!eventTypeDesc.equals(other.eventTypeDesc))
return false;
if (hasEventMessage != other.hasEventMessage)
return false;
if (startTimestamp != other.startTimestamp)
return false;
return true;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("AgentEvent{");
sb.append("agentId='").append(agentId).append('\'');
sb.append(", eventTimestamp=").append(eventTimestamp);
sb.append(", eventTypeCode=").append(eventTypeCode);
sb.append(", eventTypeDesc='").append(eventTypeDesc).append('\'');
sb.append(", hasEventMessage=").append(hasEventMessage);
sb.append(", startTimestamp=").append(startTimestamp);
sb.append(", eventMessage=").append(eventMessage);
sb.append('}');
return sb.toString();
}
}