/* Copyright (c) 2001 - 2011 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.monitor.rest;
import org.apache.commons.io.FilenameUtils;
import org.geoserver.monitor.Monitor;
import org.geoserver.monitor.RequestData;
import org.geoserver.monitor.RequestData.Category;
import org.geoserver.rest.BeanDelegatingRestlet;
import org.geoserver.rest.DispatcherCallback;
import org.restlet.Restlet;
import org.restlet.Route;
import org.restlet.data.Request;
import org.restlet.data.Response;
public class RESTMonitorCallback implements DispatcherCallback {
Monitor monitor;
public RESTMonitorCallback(Monitor monitor) {
this.monitor = monitor;
}
public void init(Request request, Response response) {
RequestData data = monitor.current();
if (data == null) {
//will happen in cases where the filter is not active
return;
}
data.setCategory(Category.REST);
if (request.getResourceRef() != null) {
String resource = request.getResourceRef().getLastSegment();
resource = FilenameUtils.getBaseName(resource);
data.getResources().add(resource);
}
monitor.update();
}
public void dispatched(Request request, Response response, Restlet restlet) {
RequestData data = monitor.current();
if (data == null) {
//will happen in cases where the filter is not active
return;
}
if (restlet instanceof Route) {
restlet = ((Route)restlet).getNext();
}
if (restlet instanceof BeanDelegatingRestlet) {
restlet = ((BeanDelegatingRestlet)restlet).getBean();
}
if (restlet != null) {
if (restlet.getClass().getPackage().getName().startsWith("org.geoserver.catalog.rest")) {
data.setService("RESTConfig");
}
}
monitor.update();
}
public void exception(Request request, Response response, Exception error) {
}
public void finished(Request request, Response response) {
}
}