Fala ai Radizeiro e Radizeira, tudo bem com você?

Diversas vezes você teve que monitorar como está o seu banco de dados, em qual momento está sendo executado um comando que tem gerado demanda de chamados.

E essa questão de monitorar de banco de dados as vezes recorremos a recurso que às vezes podem nos custar consideráveis valores.

Como estamos aqui dentro da nossa série sobre Firedac, uma ferramenta nativa do Delphi, por que não utilizar o melhor dessa ferramenta?

Então irei hoje mostrar para vocês como utilizar o Tracing e Monitoring do Firedac.

E afinal o que é Tracing e Monitoring?

Tracing é a principal de depuração do Firedac, que detalha todas as ações que estão sendo realizadas no SGDB.

Você consegue de forma bem simples, e acredito que poucas pessoas utilizam desse recurso.

E você consegue de forma bem simples monitorar tudo que o Firedac está conversando com seu SGDB.

E você deve estar muito interessado né, porque quem nunca passou por problemas com banco de dados e não tinham como monitorar e saber em que momento está ocorrendo esse tipo de problemas.

Vamos em nosso exemplo da nossa série, e vamos utilizar de exemplo o nossa DDL que utilizamos em post anteriores.

Nós temos alguns recursos de monitoramento, alguns componentes para o monitoramento com o Firedac.

E esses componentes são FDMoniRemoteClientLink, FDMoniCustomClientLink, FDMoniFlatFileClientLink.

São esses três tipos de monitoramento existentes dentro do Firedac.

Primeiro vamos trabalhar com o FDMoniCustomClientLink.

O FDMoniCustomClientLink serve para que você receba essas informações do monitoramento, e fazer o que você quiser com ela.

Esse componente possui apenas um método que é o OnOutput, que é onde iremos implementar.

Ele recebe algumas informações, como por exemplo, o nome da classe, o objeto que está executando a ação, e a mensagem.

procedure TForm1.FDMoniCustomClienteLinkOutput(ASender: TObject; const AClasseName, AObjName, FDMoniCustomClientLink: String);
begin
Memo1.Lines.Add(FDMoniCustomClientLink);
end;

Só fazendo isso já está pronto para que o Firedac passe as informações para dentro do Memo.

Mas não é só isso, se executarmos a aplicação e clicar em um dos botões não iremos receber nenhuma informações.

Isso não acontece porque ainda temos que realizar algumas configurações na nossa conexão, para que ele jogo para nós os dados no monitoramento.

Com um duplo clique na conexão, temos as opções de configuração do banco de dados, e nessas configurações temos o Monitorby, ou seja, quem irá monitorar essa minha conexão, ai eu digo se ela irá ser por FlatFile, Remote ou Custom.

E como estamos usando o FDMoniCustomClientLink, iremos informar que é um monitoramento customizado, e nas propriedades do FDMoniCustomClientLink tenho que habilitar o Tracing.

Agora vamos rodar essa nossa aplicação e ver como irá se comportar.

Observe que o simples ato de executar a aplicação e ao fazer a conexão ao banco de dados o Firedac já passou todas as informações para o memo, monitorando tudo conforme queremos.

E ao executar o ResultSet ele executa as ações, tudo que é feito dentro do Firedac é repassado para o nosso monitoramento.

Muito legal não é pessoal?

Agora com essa opção você pode fazer diversas coisas, seja jogar num banco de logs, em arquivos, não importa, o legal que você terá acesso a tudo que é feito com a aplicação e banco de dados.

E inclusive já existe o FDMoniFlatFileClientLink que ele salva esses logs em arquivos.

Só que dentro das configurações da conexão não será mais Custom, mas sim FlatFile.

E observe dentro da pasta do projeto.

E observe o conteúdo desse arquivo.

--- new start of FireDAC Trace ---
30994210001 12:16:45.296 -=#!!! FireDAC Tracer started !!!#=-
31188900001 12:17:04.767 TFDPhysFBConnection(  . CreateConnection [ConnectionDef=""]
31188900001 12:17:04.767 TFDPhysFBConnection(  . CreateTransaction [ConnectionDef=""]
31188900001 12:17:04.767 TFDPhysFBConnection(  . CreateTransaction [ConnectionDef=""]
31188900001 12:17:04.767 FDConnection1        >> Open [ConnectionDef=""]
31188900001 12:17:04.767 $0362C288                >> Definition [Name=""]
31188900001 12:17:04.767 $0362C288                     . Database=C:\lixo\PDVUPDATES.FDB
31188900001 12:17:04.767 $0362C288                     . User_Name=SYSDBA
31188900001 12:17:04.767 $0362C288                     . Password=*****
31188900001 12:17:04.767 $0362C288                     . MonitorBy=FlatFile
31188900001 12:17:04.767 $0362C288                     . DriverID=FB
31188900001 12:17:04.767 $0362C288                << Definition [Name=""]
31188900001 12:17:04.767 FDConnection1            >> FireDAC info
31188900001 12:17:04.767 FDConnection1                 . Tool=RAD Studio 10.3
31188900001 12:17:04.767 FDConnection1                 . FireDAC=17.0.0 (Build 93731)
31188900001 12:17:04.767 FDConnection1                 . Platform=Windows 32 bit
31188900001 12:17:04.767 FDConnection1                 . Defines=FireDAC_NOLOCALE_META;FireDAC_MONITOR
31188900001 12:17:04.767 FDConnection1            << FireDAC info
31189680001 12:17:04.834 FDConnection1             . isc_attach_database [dbname="C:\lixo\PDVUPDATES.FDB", params="user_name=SYSDBA,password=*********,sql_dialect=3,utf8_filename"]
31190000001 12:17:04.876 FDConnection1             . isc_database_info [db_handle=$00000001, info=103]
31190150001 12:17:04.891 FDConnection1            >> Driver log
31190150001 12:17:04.891 FDConnection1                 . Loading driver FB ...
31190150001 12:17:04.891 FDConnection1            << Driver log
31190150001 12:17:04.891 FDConnection1             . isc_database_info [db_handle=$00000001, info=103]
31190150001 12:17:04.891 FDConnection1            >> Client info
31190150001 12:17:04.891 FDConnection1                 . Brand=Firebird
31190150001 12:17:04.891 FDConnection1                 . Client version=205099900
31190150001 12:17:04.891 FDConnection1                 . Client DLL name=C:\WINDOWS\SYSTEM32\fbclient.dll
31190150001 12:17:04.891 FDConnection1            << Client info
31190150001 12:17:04.891 FDConnection1             . isc_database_info [db_handle=$00000001, info=103]
31190150001 12:17:04.891 FDConnection1            >> Session info
31190150001 12:17:04.891 FDConnection1                 . Current catalog=
31190150001 12:17:04.891 FDConnection1                 . Current schema=
31190150001 12:17:04.891 FDConnection1                 . Server version=WI-V2.5.9.27139 Firebird 2.5
WI-V2.5.9.27139 Firebird 2.5/XNet (DESKTOP-MLL3RQU)/P12
WI-V2.5.9.27139 Firebird 2.5/XNet (DESKTOP-MLL3RQU)/P12
31190310001 12:17:04.906 $0353B2E0                    >> TFDCustomCommand.Unprepare [Command="SELECT * FROM CLIENTE"]
31190310001 12:17:04.906 $0353B2E0                    << TFDCustomCommand.Unprepare [Command="SELECT * FROM CLIENTE"]
31190310001 12:17:04.906 FDConnection1                 . isc_commit_transaction [tra_handle=$00000002]
31190310001 12:17:04.906 FDConnection1            << Commit [ConnectionDef="", Retaining=False]
31190310001 12:17:04.906 FDConnection1        << Close [Command="SELECT * FROM CLIENTE"]
31190310001 12:17:04.906 $0353B2E0             . TFDCustomCommand.FetchFinished [Command="SELECT * FROM CLIENTE", AState=2, FRowsAffected=2]
31190310001 12:17:04.906 TFDQuery($03542AC0)   . Destroy [Command="SELECT * FROM CLIENTE"]
31190310001 12:17:04.906 $0353B2E0            << TFDCustomCommand.Fetch [Command="SELECT * FROM CLIENTE", AAll=False, ABlocked=True]
31222810001 12:17:08.158 -=#!!! FireDAC Tracer stopped !!!#=-

Observe que da mesma forma que foi feito com o custo, agora com o flatfile também foi possível, e tudo que aconteceu entre o firedac e o banco de dados está salvo no arquivo.

Com isso se você possui um cliente específico que está ocorrendo alguns problemas seja de conexão, dados que estão sumindo, onde isso sempre acontece, é legal que você habilite essa opção e comece a monitorar o que está acontecendo.

E você pode fazer esse monitoramento também, inclusive de forma remota, ou seja, lá no seu cliente está rodando e você na sua empresa receber esses tracing para poder estar monitorando.

Isso é possível graças ao FDMoniRemoteClientLink, onde você configura o endereço host e uma porta, e no FDConnection habilitamos o monitoramento remoto.

E basta você utilizar um aplicativo do próprio firedac que pouco utilizam que está no menu do Delphi, Tools>Firedac Monitor.

Ele irá fazer todo o monitoramento do que está acontecendo possivelmente nesse cliente específico que você habilitou esse monitoramento remoto.

De forma simples e prática você já consegue ter maior controle de sua aplicação e monitoramento de tudo que estiver acontecendo dentro do sistema com o banco de dados.

E caso você tenha interesse de conhecer mais sobre PPL acessa o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI, onde você não só terá conteúdos relacionados aos generics, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.

CLIQUE AQUI E SAIBA MAIS SOBRE O CLUBE DOS PROGRAMADORES DELPHI