package org.nextprot.api.core.aop.requests;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.springframework.stereotype.Component;
@Component
public class RequestManager {
private ThreadLocal<RequestInfo> currentRequest = new ThreadLocal<RequestInfo>();
public List<RequestInfo> requests = new ArrayList<RequestInfo>();
public Map<String, RequestInfo> lastAddedRequestByControllers = new TreeMap<String, RequestInfo>();
public Map<String, RequestInfo> lastFinishedRequestByControllers = new TreeMap<String, RequestInfo>();
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss");
public synchronized List<RequestInfo> getRequests() {
return requests;
}
public synchronized void startMonitoringClientRequest(RequestInfo requestInfo) {
currentRequest.set(requestInfo);
requests.add(requestInfo);
long start = System.currentTimeMillis();
currentRequest.get().put(RequestInfo.START_TIME, start);
currentRequest.get().put(RequestInfo.START_TIME + "Formated", DATE_FORMAT.format(new Date(start)));
lastAddedRequestByControllers.put(requestInfo.getType(), requestInfo);
}
public synchronized void stopMonitoringCurrentRequestInfo() {
requests.remove(currentRequest.get());
lastFinishedRequestByControllers.put(currentRequest.get().getType(), currentRequest.get());
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - (Long) (currentRequest.get().get(RequestInfo.START_TIME));
currentRequest.get().put(RequestInfo.END_TIME, endTime);
currentRequest.get().put(RequestInfo.END_TIME + "Formated", DATE_FORMAT.format(new Date(endTime)));
currentRequest.get().put(RequestInfo.ELAPSED_TIME, elapsedTime);
currentRequest.remove();
}
public RequestInfo getCurrentRequest() {
return currentRequest.get();
}
public synchronized Map<String, RequestInfo> getLastAddedRequestByController() {
return lastAddedRequestByControllers;
}
public synchronized Map<String, RequestInfo> getLastFinishedRequest() {
return lastFinishedRequestByControllers;
}
public void stopMonitoringCurrentRequestInfo(Exception e) {
currentRequest.get().put("exceptionClass", e.getClass().getName());
currentRequest.get().put("exceptionMesssage", e.getLocalizedMessage());
stopMonitoringCurrentRequestInfo();
}
}