Tempo de resposta para requisição

3 respostas
R

Olá a todos,

Preciso saber se alguém já desenvolveu algo que calcule o tempo de resposta para uma requisição feita para um servlet por exemplo.

agradeço a atenção,

Marcelo

3 Respostas

M

Opa,

crie um filtro, ai voce usa os metodos dofilter para iniciar a contagem de tempo e o destroy para finalizar a contagem e calcular o tempo.

:okok:

R

fala marcos,

eu estou realmente criando um flitro, o problema é que eu não consigo atualizar o atributo que guarda o tempo das requisições no método destroy, porque ele é chamado só qdo o container vai matar a instância do filtro.

estou mandando o código pra ver se ajuda.

valeu

import java.net.*;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class FiltroRequest implements Filter{
	
    private FilterConfig fc;
    private ServletContext sc;
    private static int contaRequest;
    private String dirFile;
    private String urlInicio;
    long inicio;
    long fim;
    long tempoResposta;
    
    String contextPath;
    String servletPath;
    String pathInfo;
    String pathServlet;
    int contaReq;    
	
    Map tempo;
	
  public void init(FilterConfig config) throws ServletException{
		
		this.fc   = config;
		this.sc   = fc.getServletContext();
		dirFile   = sc.getInitParameter("dirLog");
		urlInicio = sc.getInitParameter("url_inicio");
		
	}
	
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
	throws ServletException, IOException{
		
      inicio = System.currentTimeMillis(); 	
      tempo  = (HashMap) sc.getAttribute("tempoResp");		

     HttpServletRequest request   = (HttpServletRequest) req;
      HttpServletResponse response = (HttpServletResponse) resp;
      Map contador                 = (HashMap) sc.getAttribute("contaReq");
	  
	  contextPath = request.getContextPath();
	  servletPath = request.getServletPath();
	  pathInfo    = request.getPathInfo();
	  pathServlet = resgataServlet(pathInfo);
	  contaReq       = 0;
	  
    if (contador.containsKey(pathServlet)){contaReq = Integer.parseInt    ((String) contador.get (pathServlet)) + 1;

	   contador.put(pathServlet, ""+contaReq);

		}else{
			    contador.put(pathServlet, "1");
		     }
		     
	  sc.setAttribute("contaReq", contador);

	  fim = System.currentTimeMillis();
	
      tempoResposta = fim - inicio;
   	  tempo.put(""+inicio+"-"+contextPath+servletPath+pathInfo, fim);
      sc.setAttribute("tempoResp", tempo);

 	  chain.doFilter(request,resp);
		
	}
	
	public void destroy(){
	
	}

	/**
	 *usado para extrair somente o nome do servlet do pathInfo
	 */
	public String resgataServlet(String pPathInfo){
		
  	  String servlet = "";
  	  
  	  for(int i=0; i < pPathInfo.length(); i++){
			
	    if (pPathInfo.charAt(i) == '?'){break;}
	    else{servlet = servlet + pPathInfo.charAt(i);}
	
 	  }
 	  
 	  return servlet;		
		
	}

	
}

[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - marcossousa[/color][/size] :joia:

M

Opa,

Me expressei mal, bem você irá fazer é isto aqui:

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
   throws ServletException, IOException{
      
      // inicia contagem aqui

      chain.doFilter(request,resp);
      
     // finaliza aqui e faz os cálculos
   }

Sugiro utilizar outros métodos para que o doFilter não fique tão extenso.

:okok:

Criado 22 de maio de 2006
Ultima resposta 23 de mai. de 2006
Respostas 3
Participantes 2