org.jboss.resteasy.plugins.stats.RegistryStatsResource Maven / Gradle / Ivy
package org.jboss.resteasy.plugins.stats;
import org.jboss.resteasy.core.ResourceInvoker;
import org.jboss.resteasy.core.ResourceLocatorInvoker;
import org.jboss.resteasy.core.ResourceMethodInvoker;
import org.jboss.resteasy.core.ResourceMethodRegistry;
import org.jboss.resteasy.spi.Registry;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBException;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
/**
* @author Bill Burke
* @version $Revision: 1 $
*/
@Path("/resteasy/registry")
public class RegistryStatsResource
{
@GET
@Produces({"application/xml", "application/json"})
public RegistryData get() throws JAXBException
{
ResourceMethodRegistry registry = (ResourceMethodRegistry) ResteasyProviderFactory.getContextData(Registry.class);
RegistryData data = new RegistryData();
for (String key : registry.getBounded().keySet())
{
List invokers = registry.getBounded().get(key);
RegistryEntry entry = new RegistryEntry();
data.getEntries().add(entry);
entry.setUriTemplate(key);
for (ResourceInvoker invoker : invokers)
{
if (invoker instanceof ResourceMethodInvoker)
{
ResourceMethodInvoker rm = (ResourceMethodInvoker) invoker;
for (String httpMethod : rm.getHttpMethods())
{
ResourceMethodEntry method = null;
if (httpMethod.equals("GET")) method = new GetResourceMethod();
else if (httpMethod.equals("PUT")) method = new PutResourceMethod();
else if (httpMethod.equals("DELETE")) method = new DeleteResourceMethod();
else if (httpMethod.equals("POST")) method = new PostResourceMethod();
else if (httpMethod.equals("OPTIONS")) method = new OptionsResourceMethod();
else if (httpMethod.equals("TRACE")) method = new TraceResourceMethod();
else if (httpMethod.equals("HEAD")) method = new HeadResourceMethod();
method.setClazz(rm.getResourceClass().getName());
method.setMethod(rm.getMethod().getName());
AtomicLong stat = rm.getStats().get(httpMethod);
if (stat != null) method.setInvocations(stat.longValue());
else method.setInvocations(0);
if (rm.getProduces() != null)
{
for (MediaType mediaType : rm.getProduces())
{
method.getProduces().add(mediaType.toString());
}
}
if (rm.getConsumes() != null)
{
for (MediaType mediaType : rm.getConsumes())
{
method.getConsumes().add(mediaType.toString());
}
}
entry.getMethods().add(method);
}
}
else
{
ResourceLocatorInvoker rl = (ResourceLocatorInvoker) invoker;
SubresourceLocator locator = new SubresourceLocator();
locator.setClazz(rl.getMethod().getDeclaringClass().getName());
locator.setMethod(rl.getMethod().getName());
entry.setLocator(locator);
}
}
}
return data;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy