Profiling

Com esse recurso, é possível realizar o profiling (captura de informações a respeito de desempenho) em qualquer bean do Spring. As informações são capturadas a cada chamada dos métodos e gravadas em memória. De tempos em tempos, um timer pega essas informações e registra no banco de dados, para consulta posterior. Essa consulta pode ser realizada no SIGAdmin, através do link Suporte Técnico → Consultar Informações de Profiling.

Implementação

O profiling foi implementado utilizando programação orientada a aspectos com o Spring e o AspectJ. Foi criada uma anotação chamada @Metrics, que deve ser colocada em uma classe ou em um método, e recebe como parâmetro um array de objetos de uma enum chamada MetricType. A enum possui os seguintes tipos de métricas: COUNT_CALL, TIME e MAX_TIME, que servem para medir o número de chamadas, o tempo médio de execução e o tempo máximo de execução dos métodos.

Foi criado ainda uma classe chamada ProfilingAspect, que contém um around advice em torno de métodos de classes que contenham a anotação @Metrics ou métodos que contenham a anotação @Metrics. Esse advice calcula os valores de desempenho explicados acima e armazenam em três mapas estáticos, um para cada tipo de informação. De tempos em tempos, um timer pega as informações dos mapas estáticos e insere essas informações no banco de dados, na tabela infra.profiling.

Utilização

Para que uma determinada classe seja interceptada pelo aspecto de profiling, é necessário que ela seja um bean do Spring, ou seja, tenha a anotação @Component e o seu pacote seja escaneado no applicationContext.xml. Para DAOs, que são a grande maioria das classes interceptadas pelo profiler, deve-se colocar o escopo session.

Além disso, a classe deve possuir a anotação @Metrics, informando todos os MetricType necessários para o profiling.

Exemplo de Uso

Na classe Java:

@Component @Scope("session") 
@Metrics({MetricType.COUNT_CALL, MetricType.MAX_TIME, MetricType.TIME})
public class BaseArquivosDao extends GenericDAOImpl {
 
...

No applicationContext.xml:

<context:component-scan base-package="br.ufrn.comum.dao"/>
<context:component-scan base-package="br.ufrn.admin.dao"/>

Consultas

As consultas podem ser realizadas no SIGAdmin, no link Suporte Técnico → Consultar Informações de Profiling. Nessa consulta, é possível buscar informações de profiling por classe, método, número máximo de chamadas, tempo médio de execução, com diversas possibilidades de ordenação.