Escalando aquela montanha de mensagens de erros
Autor: Alceu Rodrigues de Freitas Junior | Publicado: 2013-07-05T12:24:00-03:00
















Imagine abrir sua caixa de e-mail todos os dias e encontrar em média 500 mensagens de erros de processos de integração: o que fazer? Analisar uma a uma?



Com tantas mensagens de erro, o mais salutar seria primeiro priorizar aquelas mais graves e/ou com maior ocorrência... mas para fazer isso seria necessário ler todas as mensagens (se você tiver tempo hábil) ou colocar o computador para trabalhar para você e dar um resultado mais "mastigado". 









Solução orgânica

Eu optei por começar devagar e o primeiro passo seria tentar copiar os dados da mensagens nos e-mails em uma planilha do Excel para tentar encontrar padrões. Como abomino fazer CRTL+C e CRTL+V mais de um punhado de vezes, seria necessário criar alguma automação.



Primeiro, era necessário separar as mensagens de erros das outras mensagens de e-mail, então criei filtros no Outlook para isolar as mensagens de erro em uma pasta separada. Essa foi fácil.



Depois foi questão de, à partir do Outlook, abrir uma planilha do Excel via VBA e copiar o conteúdo do e-mail, depois de realizado um parsing simples, em cada linha da planilha. Isso permitia pelo menos limpar a caixa postal e ainda ter as informações.



Depois disso, foi um trabalho bastante manual de tentar categorizar as mensagens de erro para conseguir identificar quais os tipos de problema que apresentavam maior ocorrências. Iniciei isso tentando categorizar manualmente usando palavras-chave e uma mistura de "=SE(SEERRO(LOCALIZAR('error types'!$B$2;C2);0)&gt;0;1;0)" com "=SOMASE('EAI errors'!E2:E424;"&gt;0")" que realmente era uma dor de cabeça para acertar manualmente a cada nova extração do Outlook.



Antes de eu continuar massacrando dados, as mensagens de erro mudaram de lugar: a área de infraestrutura optou por parar de mandar mensagens de erro (algo inteligente, pela quantidade) e registrar as mesmas em um banco de dados relacional. Fiquei com um pouco de raiva pelo tempo empregado com Outlook e VBA, mas depois a vida ficou mais fácil já que os dados estavam melhor estruturados e obtê-los era muito menos doloroso. 

Facilitando a vida com Naive Bayes 



Próximo passo era tentar categorizar os erros automaticamente. Eu já havia lido alguma coisa sobre o algoritmo de Naive Bayes no Bogofilter, anos atrás, para lidar com SPAM e me pareceu uma boa escolha.



Criei então um script em Perl utilizando o módulo&nbsp;AI::Categorizer (cujo nome bem sugestivo ajudou na decisão de escolha). O script gerava como saída era um arquivo XML que eu importava novamente no Excel para gerar os gráficos... pelos menos era mais fácil acertar as fórmulas e eu não tinha que categorizar coisa nenhuma.



Categorizar não é tão fácil quanto parece: tive que quebrar a cabeça para criar training corpus que não se intrometessem um na vida do outro e categorizasse mensagens de forma errada, mesmo considerando que as mensagens de erro de uma categoria qualquer não mudavam tanto assim entre uma e outra, mas com certeza valeu a pena.



Já importar XML no Excel pode ser bem lento também, principalmente se seu computador é lento e o arquivo XML grande. Logo passei a usar MySQL como backend para guardar os dados em tabelas normalizadas. Depois comecei a usar DBIx::Class para não ter que fazer CRUD manualmente.



Feito isto, tomei vergonha na cara e comprei um livro sobre Pivot Tables. Parece meio vergonhoso, mas depois de anos fazendo ETL eu posso dizer que menosprezei por tempo demais o Excel com relação às suas Pivot Tables: gerar os relatórios ficou muito mais fácil depois que passei a alimentar o Excel automaticamente e com apenas alguns cliques eu conseguia ter visões diferentes dos dados. Segue alguns exemplos de gráficos gerados com os dados categorizados abaixo:

&nbsp;

 


E que tal acompanhar se as correções estão sendo eficazes ou não?




Conclusão
Utilizar as ferramentas corretas para o trabalho é sempre o melhor, o problema é saber de antemão o que é mais adequado ou não. Mas com alguma experiência anterior, experimentação e paciência você pode promover o amadurecimento da sua aplicação aos poucos e ainda colher os resultados esperados durante o processo!