Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS Varejo Franquias e Redes

Linha de Produto:

Franquias e Redes

Segmento:

Varejo

Módulo:TaskManager / Financeiro
Função:Log configurável
País:Brasil
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :DVARLIVEBT-5234


02. SITUAÇÃO/REQUISITO

Esporadicamente algumas das mensagens de venda e de pagamento que foram criadas tanto pelo PDV Desktop quanto pelo MobShop, após enviadas ao servidor de fila do Totvs Franquias e Redes (LiveQueue), é verificado que foram processadas sem nenhuma falha, entretanto as informações não constam no sistema.

Exemplo de alguns casos com cupons de 6 lojas tanto MobShop quanto Desktop, conforme figura abaixo.

  • Quando Status = 1, significa Processado.
  • QtdProcessamento indica que foi processado somente uma única vez.
  • Erro apresentaria a exceção caso houvesse alguma.
  • IncluirOperacaoPDVOperacao, refere-se a mensagens de pagamento do Financeiro.

Hoje não existe nenhum rastreamento que possibilite uma análise mais aprofundada do problema. Mesmo se tratando de falha uma esporádica, essa situação causa um enorme problema nos fechamentos, por exemplo:

  • Divergência nos relatórios de vendas.
  • Venda ausente no Financeiro.
  • Ausência de forma de pagamento

Exemplo de uma situação de divergência, onde cupom 106473 foi finalizado em duas formas de pagamento DINHEIRO e VALE TROCA.

Ao detalhar o cupom, na sub aba TROCAS é possível verificar o correto valor.

Entretanto na  sub aba Pagamentos, não existem valores.

E também se realizar o filtro na aba Financeiro, procurar por Receitas, cupom 106473 não foi localizado.

03. SOLUÇÃO

Implementado uma rotina de gravação configurável de log para proporcionar uma análise mais adequada e clara da execução, carregamento e exceções nas rotinas de processamento de mensagens.

Com o log, será possível análisar os cenários já descritos bem como novos problemas que possam surgir no processo assíncrono de processamento de mensagens do PDV Desktop e MobShop.

Para o TaskManager responsável por executar a fila de mensagens, foi desenvolvido um Plugin para persistir os logs de cada execução e de cada mensagem, ficando com a estrutura similar à:

Para o Financeiro, também foi adicionado diversos logs por toda à extensão do processo específico de processamento de Pagamentos, ficando similar à:


Detalhes

Para realizar a configuração para uso do log Plugin, é necessário acessar o site Monitoramento e efetuar o login:

Na tela inicial, selecionar e clicar no botão 5000, referente a interface de configuração do log do TaskManager, conforme:

Acessar também o menu de configuração e verificar o nível de log:

O campo Ativo deve estar com o valor 1 (ligado) e campo LogLevel com valor diferente de 0:

Após rodar o instalador da Fila, deve-se conferir o arquivo spf.exe.config:

Verificar se existe a chave "Integracao.ConnectionString" e caso não existir, criar manualmente conforme o exemplo:

Verificar a existência do arquivo "Plugin.Spf.LogIntegracao.dll", que é o próprio Plugin:

Na ausência do Plugin no diretório de instalação, entrar em contato com time de produto.

OBS: O diretório de instalação pode variar dependendo do ambiente e apenas a existência do Plugin no diretório Queue não significa que o log será gravado, sendo necessário configurar.

Após ativar o log do TaskManager por um período de tempo, para consultar os logs recomenda-se utilizar o ObjectID da mensagem e data de processamento:

Abaixo um exemplo de consulta, informando o ObjectID da mensagem e o período do intervalo, mostrando que a mesma foi processada com erro.

consulta.sql
USE rentech
GO

SELECT
	*
-- TipoModulo, [Local], Mensagem, Creation
FROM Rentech..LogIntegracao (nolock) 
WHERE DataHora >= 'DATAINICIO' AND DataHora < 'DATAFIM' AND
TipoModulo = 5000 AND
Mensagem LIKE '%OBJECTID-MENSAGEM%'

No exemplo acima o log retorna foi o seguinte:

[MessageManager] MensagemID: b7cf87ff-dc49-4c1d-84f1-2aa8fdaed03e Falha na execução. Exception: Exception has been thrown by the target of an invocation. | Error ocurred. | Error ocurred. | The type initializer for Rentech.Framework.Base.Functions threw an exception. | The type initializer for Rentech.Framework.Base.Functions threw an exception. | System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: The type initializer for Rentech.Framework.Base.Functions threw an exception. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.TypeInitializationException: The type initializer for Rentech.Framework.Base.Functions threw an exception. ----> System.UnauthorizedAccessException: Access to the path Global\Mutex is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.Threading.Mutex.MutexTryCodeHelper.MutexTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.Mutex.CreateMutexWithGuaranteedCleanup(Boolean initiallyOwned, String name, Boolean& createdNew, SECURITY_ATTRIBUTES secAttrs) at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name, Boolean& createdNew, MutexSecurity mutexSecurity) at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name) at Rentech.Framework.Base.Functions..cctor() --- End of inner ExceptionDetail...). | System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: The type initializer for Rentech.Framework.Base.Functions threw an exception. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.TypeInitializationException: The type initializer for Rentech.Framework.Base.Functions threw an exception. ----> System.UnauthorizedAccessException: Access to the path.

Demonstrando uma possível falha de permissão.

Para realizar a configuração para uso do log no processamento dos pagamentos do Financeiro, é necessário acessar o site Monitoramento e efetuar o login:

Na tela inicial, selecionar e clicar no botão 2000, referente a interface de configuração do log do Financeiro, conforme:

Acessar também o menu de configuração e verificar o nível de log:

O campo Ativo deve estar com o valor 1 (ligado) e campo LogLevel com valor diferente de 0:

Após ativar o log do Financeiro por um período de tempo, para consultar os logs recomenda-se utilizar o ObjectID da operação financeiro, gerado nos clientes PDV Desktop e Mobshop:

Abaixo um exemplo de consulta, informando o ObjectID da operação financeira.

consulta.sql
USE rentech
GO

SELECT
	*
-- OwnerId, IdOperacao, DataOperacao, Creation, Observacao
FROM [ModuloFinanceiro]..[Financeiro_LogOperacao] (nolock) 
WHERE IdOperacao = 'ID-OPERACAO-FINANCEIRA'
ORDER BY Creation


OBS: Vale lembrar que, caso ocorra alguma exceção no processamento da mensagem do financeiro, o rollback realizado nos dados também afetará a gravação dos logs, pois ambos estarão na mesma transação!


04. DEMAIS INFORMAÇÕES

O modelo de Plugin implementado no TaskManager utiliza o MEF, muito interessante para baixo acoplamento e controle de dependências.


IMPORTANTE!

Os logs quando ativados, irão gravar toda execução. Dessa forma não mantenha ligado direto, pois a quantidade de informações é enorme e desnecessária. Habilite o log por um período, deixe coletar, desligue a integração e análise os dados.