Global Tax

Manutenção das aplicações Tax Hub e Taxware Bridge.

 

Execução

As documentação do projeto estava escassa e antiquada assim eu tive que confiar no código fonte da aplicação. Eu identifiquei que há dois propósitos distintos para a aplicação. O primeiro é de servir como uma ponte entre duas aplicações chamadas ePrice e FEMS. Neste contexto a aplicação é conhecida como Tax Hub (TH). O segundo propósito é calcular impostos usando um produto chamado Taxwere Enterprise from Automatic Data Processing Incorporation. Para este propósito a aplicação é conhecida como Taxware Bridge (TB).

Há duas instâncias da aplicação TH que rodam no ambiente de Teste. Cada uma usa um conjunto independente de filas que pertencem a dois gerenciadores de filas diferentes. Os gerenciadores de fila são chamados TAXHUB0 e TAXHUB1. Logo depois que entrei para o projeto GTE, eu recebi um pedido para fazer o TAXHUB0 apontar o ambiente de Garantia de Qualidade FEMS. Não havia documentação alguma sobre as configuração de filas, assim eu contatei o grupo de suporte MQ Series para me fornecer a configuração corrente dos gerenciadores de fila. Eu identifiquei que não era possível só resolver o problema atualizando os arquivos de configuração do TH. Era necessário criar filas novas no TAXHUB0. Eu especifiquei as filas novas e abri um pedido na aplicação de local de apoio para a criação das filas. Eu atualizei as propriedades de configuração do TH para as filas novas. O time de ePrice testou a conexão e a mudança foi completada com sucesso.

Quando eu iniciei no projeto, eu recebi um pedido para verificar por que o ambiente de desenvolvimento não estava funcionando. Infelizmente também não havia nenhuma documentação sobre este ambiente. Assim, eu comecei a investigar e descobri que o ambiente de desenvolvimento era um servidor Windows 2000 em uma instalação da companhia. O servidor foi desativado porque o sistema operacional Windows 2000 não era mais suportado. Eu contatei o gerente de projeto e um servidor AIX novo foi disponibilizado ao projeto. Eu recebi todas as senhas inclusive a de root. Eu então estava responsável por reproduzir o ambiente Windows 2000 no servidor AIX. Eu extraí e recriei as tabelas DB2. Eu extraí as definições de filas MQ usando uma ferramenta da Internet. Eu fiz algumas limpezas no script. Eu recriei as filas. Eu recriei a aplicação TH a partir do repositório CVS usando o produto Rational Software Architect (RSA) e a instalei no WebSphere Application Server. Eu arrumei alguns detalhes de configuração do Datasource JDBC para fazer a aplicação acessar o banco de dados, os listeners do MQ Series não estavam inicializados e arrumei alguns outros problemas secundários. Finalmente eu consegui montar o ambiente de desenvolvimento novo com sucesso.

Desde o momento em que me tornei responsável pela aplicação de TH, eu fui requisitado para ajudar em problemas de Severidade 1 na produção. Eu tive que analisar os logs do TH e guiar o time para isolar o problema. Eu pude identificar os seguintes problemas em circunstâncias diferentes:

  1. Eu identifiquei pelos logs que algumas chamadas SOAP pareciam estar paradas e uma fila do FEMS para o TH começou a acumular mensagens. O time de ePrice me informou que haviam três servidores de ePrice que consomem as mensagens por WebServers. Então, poderia haver alguns dos três servidores que estaria com algum problema. Sabendo disto, eles começaram a desligar um servidor e deixar os dois outros servidores funcionando. Depois de um par de testes o servidor com problema foi identificado. O problema de Severidade 1 foi resolvido com sucesso.

  2. Eu identifiquei pelos logs que as mensagens de confirmação estavam sendo recebidas pelo FEMS Brasil mas nenhuma resposta estava sendo enviada. Então, poderia haver um problema na aplicação FEMS ou na fila de FEMS para TH. O time de suporte MQ identificou um canal que estava parado. O problema foi resolvido e eliminamos o problema de Severidade 1.

  3. Eu identifiquei pelos logs que o FEMS Brasil não estava enviando os impostos nem as mensagens de confirmação para o TH. Então, poderia haver um problema na aplicação de FEMS. O time de suporte FEMS identificou que havia um sistema de arquivo sem espaço. O problema foi resolvido e a Severidade 1 foi eliminada.

Os outros problemas de Severidade 1 foram variações destes três exemplos. A aplicação de TH é crítica ao negócio e precisa de cuidado constante porque o TH foi implementado com um único thread. Então, se qualquer problema acontece então o fluxo inteiro é afetado.

Eu fui contatado pelo time de apoio de DB2 e eles informaram que as duas instâncias de DB2 tinham o Fix Pack 16 e tinham que ser atualizado para o Fix Pack 17 para estar de acordo com as regras da equipe de suporte. Eu tive que coordenar esta mudança com o cliente e abrir um ticket no sistema local de apoio. Eu comecei criando um plano e contatando os grupos envolvidos. Eu descobri que o ambiente de Teste e ambiente de Produção estavam baseado em servidores compartilhados. Estes servidores não só eram usados pelo TH mas também por outra aplicação chamada WWPRT. Eu confirmei que esta aplicação também estava usando uma instância na mesma instalação de DB2 e tinha que ser parado durante esta mudança. Eu contatei o grupo responsável para a fila NUS_N_SSBRCONN para verificar se o Fix podia ser aplicada nos dois servidores. Eles informaram que o ambiente de Teste não tinha bastante espaço em disco para carregar o Fix Pack. Eu coordenei com o grupo responsável para a fila NUS_N_DCRCHAIX para montar um sistema de arquivo para receber o Fix Pack e desmontá-lo depois da mudança. Eu coordenei com os times responsáveis pelas fila NUS_N_SSUDBDBA e NUS_N_SSWEBNORT para parar as instâncias de DB2 e parar as aplicações WebSphere respectivamente. Eu elaborei um plano que estimava em 6h para a conclusão do processo e criei os tickets. Depois de arrumar alguns pequenos detalhes os tickets foram aprovados. A atualização foi implementada com sucesso em ambos os servidores.

Tanto o ambiente de teste quanto o de produção tinham os processos do WebSphere Application Server rodando sob o usuário root. Havia um pedido para mover os processos para o usuário taxeadm. Eu tive que envolver muitas pessoas de times de apoio para obter a estória do por quê esta exposição ainda não tinha sido eliminada. O PM enviou uma nota reconhecendo a maneira pela qual utilizei as comunicações e que superaram processos burocráticos na obtenção das razões necessárias. Assim, eu poderia desenvolver uma sucessão de tarefas para eliminar a exposição. Eu criei os tickets e coordenei as execuções das alterações. O problema foi resolvido.

Eu era responsável para prover ajuda em muitas outras tarefas como o upgrade do MQ Series nos ambientes de teste e de produção, analise de logs e impostos em muitas ocasiões, arrumar as configurações de logs da biblioteca log4j para remover linhas duplicadas, criar scripts "awk" para filtrar os logs e prover informações amigáveis aos usuários, ajudar o ePrice a arrumar as bibliotecas para as chamadas SOAP que estavam com versão errada e resolvi outros problemas como estes.

Desde o momento quem que iniciei no projeto GTE, o time de CCE pediu a criação de um ambiente novo. Então, eu tive que proporcionar todo o código e instruções para organização uma instalação nova de TB. Eu recuperei as DDLs do banco de dados, organizei as instruções que eu tinha sobre como instalar o Taxware e a versão mais recente do TB do repositório de código CVS. Este código produziu um comportamento diferente do esperado. Havia um tag extra na definição de WSDL e os arquivos de XML que são trocados nas chamadas SOAP não estavam em sincronia com o formato do CCE. Eu comecei uma investigação e eu achei que o repositório de código tinha somente um versionamento fora a versão mais recente do código. Infelizmente, nenhum das duas versões tinha o comportamento correto. Não havia nenhuma documentação sobre os versionamentos da aplicação. Então, eu concluí que o código não estava versionado corretamente. Eu tive que gerar um plano para analisar as partes do código, arrumar o problema do estra tag, documentar os resultados e fazer algumas limpezas no código fonte. Eu gerei um plano que incluia um recurso de grupo da Índia. Nós trabalhamos como um time, embora eu coordenei o trabalho dele para gerar uma ferramenta de automatização de teste específica para TB. Eu implementei uma versão de teste da aplicação de TB que armazena em arquivo o conteúdo enviado ao produto Taxware. Eu implementei uma ferramenta para separar este conteúdo em uma sucessão de campos assim poder analisar o conteúdo facilmente. Usando esta técnica eu poderia verificar o que estava sendo gerado pelo TB e que respostas o Taxware estava provendo. Deste modo eu era capaz de eliminar o extra tag com segurança. Eu documentei o código e eu descobri que o ambiente novo não estava inicializando alguns campos corretamente. Eu arrumei este problema no código, eu executei uma sequência de testes. Em seguida, eu entreguei uma versão final ao time de apoio da aplicação CCE. Eu executei o plano prosperamente, dentro do tempo especificado e nos custos esperados. Durante esta fase eu concordei muitas conferências com CCE para explicar os problemas identificados, o plano de ação que eu criei, prover atualizações e responder perguntas deu uma forma sucinta.

As atualizações de impostos no Produto de Taxware não eram feitas automaticamente. Eu recebia requisições mensais pede baixar os arquivos de atualização de impostos do site da ADP e aplicar nos servidores de TB. Eu transferia os arquivos em um diretório específico e ativava atualização através de uma interface gráfica Motif que eu abria localmente usando o produto Exceed. Este processo consumia tempo, assim eu estudei a documentação de Taxware e eu pude criar um único script para atualizar o produto inteiro imediatamente.

Haviam grupos que estavam usando uma versão anterior do produto Taxware comparado com as versões instaladas nos servidores da aplicação de TB. Eu usei o ambiente de desenvolvimento para instalar estas versões. Depois de estudar cuidadosamente o muitos passos para instalar o produto Taxware eu pude ter muitas versões diferentes do produto de Taxware em um único servidor e eu poderia selecionar facilmente qual versão seria a ativa. Deste modo eu poderia prover um apoio melhor aos outros grupos.

A aplicação TB aplicava regras às cotas. Estas regras são bases em informação armazenada em um banco de dados. Eu também recebia atualizações de tabelas. Eu tinha que converter os conteúdos de um arquivo Windows Excel normal em um formato DB2 IXF. Eu criava as instruções para o time de suporte DB2 aplicar as atualizações, negociava o período em que a aplicação estaria desligada, especialmente com o time de ePrice porque a aplicação de TB afeta a aplicação de TH diretamente, e finalmente abria um ticket no sistema de suporte para executar a atualização.