package com.sap.jod.test.util;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class StatsCollector implements Filter {
private static final Logger LOG =
Logger.getLogger(StatsCollector.class.getName());
private Interceptor interceptor;
@Override
public void init(FilterConfig config)
throws ServletException {
interceptor = new Interceptor();
interceptor.install();
}
@Override
public void destroy() {
interceptor.uninstall();
}
@Override
public void doFilter(ServletRequest req,
ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
List<String> collectedData = new ArrayList<String>();
try {
interceptor.setCache(collectedData);
chain.doFilter(req, resp);
} finally {
interceptor.setCache(null);
}
write(collectedData);
}
protected void write(List<String> stats) {
StringBuilder sb = new StringBuilder("RPC calls:\n");
for (String s: stats) sb.append(s).append("\n");
LOG.info(sb.toString());
}
}
|