package edu.pdx.cs410J.di;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.logging.Logger;
/**
* Logs all calls to the rest services
*/
@Singleton
public class RestLoggingFilter implements Filter
{
private final Logger logger;
private final CreditCardDatabase cards;
@Inject
public RestLoggingFilter(Logger logger, CreditCardDatabase cards) {
this.logger = logger;
this.cards = cards;
}
public void init( FilterConfig config ) throws ServletException
{
// Initialize some credit cards for testing purposes. This probably isn't the best place to do this.
for (int i = 1; i <= 10; i++) {
CreditCard card = new CreditCard(String.valueOf(i));
cards.setBalance( card, 100.0 );
}
}
public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
throws IOException, ServletException
{
long begin = System.currentTimeMillis();
StringBuilder description = new StringBuilder("Request from ");
description.append(request.getRemoteAddr()).append(":").append(request.getRemotePort());
if (request instanceof HttpServletRequest) {
HttpServletRequest http = (HttpServletRequest) request;
description.append(" for ").append( http.getMethod() ).append(" ").append(http.getRequestURI());
}
logger.info("Begin " + description);
chain.doFilter( request, response );
long delta = System.currentTimeMillis() - begin;
logger.info("End (" + delta + " ms) " + description);
}
public void destroy()
{
}
}