package smartkv.client.workloads;
import java.io.Serializable;
import java.util.Comparator;
import smartkv.server.RequestType;
public class RequestLogEntry implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private static int serialGenerator = 0;
public static Comparator<RequestLogEntry> timeStartedComparisonASC = new Comparator<RequestLogEntry>(){
public int compare (RequestLogEntry r1, RequestLogEntry r2){
if (r1.getTimeStarted() < r2.getTimeStarted()) return -1;
if (r1.getTimeStarted() == r2.getTimeStarted()) return 0;
return 1;
}
};
public final int serial;
private RequestType type;
private long timeStarted;
private long timeEnded;
private int sizeOfRequest;
private int sizeOfResponse;
public long getTimeStarted() {
return timeStarted;
}
public void setStrackTrace(){
StackTraceElement stt[] = Thread.currentThread().getStackTrace();
tid = Thread.currentThread().getId();
for (int i = 4 ; i < 14 && i < stt.length; i++){
st[i] = stt[i].toString();
}
}
public RequestLogEntry(){
serial = RequestLogEntry.serialGenerator++;
initializeFields();
}
/**
*
*/
public void initializeFields() {
timeEnded = sizeOfResponse = sizeOfRequest = 0;
timeStarted = System.currentTimeMillis();
}
public String st[] = new String[14];
public long tid;
public RequestLogEntry(long timeStarted, long timeEnded, int sizeOfRequest,
int sizeOfResponse, RequestType type) {
serial = RequestLogEntry.serialGenerator++;
this.type = type;
this.timeStarted = timeStarted;
this.timeEnded = timeEnded;
this.sizeOfRequest = sizeOfRequest;
this.sizeOfResponse = sizeOfResponse;
initializeFields();
}
public RequestLogEntry(RequestLogEntry r ){
serial = RequestLogEntry.serialGenerator++;
type = r.getType();
timeStarted = r.getTimeStarted();
timeEnded = r.getTimeEnded();
sizeOfRequest = r.getSizeOfRequest();
sizeOfResponse = r.getSizeOfResponse();
}
public RequestType getType() {
return type;
}
public void setType(RequestType type) {
this.type = type;
}
@Override
public Object clone(){
return new RequestLogEntry(this);
}
public void setTimeStarted(long timeStarted) {
this.timeStarted = timeStarted;
}
public long getTimeEnded() {
return timeEnded;
}
public void setTimeEnded(long timeEnded) {
this.timeEnded = timeEnded;
}
public int getSizeOfRequest() {
return sizeOfRequest;
}
public void setSizeOfRequest(int sizeOfRequest) {
this.sizeOfRequest = sizeOfRequest;
}
public int getSizeOfResponse() {
return sizeOfResponse;
}
public void setSizeOfResponse(int sizeOfResponse) {
this.sizeOfResponse = sizeOfResponse;
}
@Override
public String toString() {
return "RequestLogEntry [serial=" + serial + ", type=" + type
+ ", timeStarted=" + timeStarted + ", timeEnded=" + timeEnded
+ ", sizeOfRequest=" + sizeOfRequest + ", sizeOfResponse="
+ sizeOfResponse + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + serial;
result = prime * result + sizeOfRequest;
result = prime * result + sizeOfResponse;
result = prime * result + (int) (timeEnded ^ (timeEnded >>> 32));
result = prime * result
+ (int) (timeStarted ^ (timeStarted >>> 32));
result = prime * result + ((type == null) ? 0 : type.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;
RequestLogEntry other = (RequestLogEntry) obj;
if (serial != other.serial)
return false;
if (sizeOfRequest != other.sizeOfRequest)
return false;
if (sizeOfResponse != other.sizeOfResponse)
return false;
if (timeEnded != other.timeEnded)
return false;
if (timeStarted != other.timeStarted)
return false;
if (type != other.type)
return false;
return true;
}
public void endedNow() {
this.timeEnded = System.currentTimeMillis();
}
}