From 2de33eed098fcf8feec99655a0fa757dd8f1e350 Mon Sep 17 00:00:00 2001 From: Eric Menezes Noronha Date: Sun, 29 Jun 2014 19:29:10 -0300 Subject: [PATCH] Configuração para patrimônio, mudança de versão, atualização do timer de 10 minutos para 1 hora, ativado dailylog no mapa, adicionado mapa ao chksis, etc. --- MapaTesteProj/MapaCACIC.dpr | 2 +- MapaTesteProj/MapaCACIC.dproj | 2 +- MapaTesteProj/MapaCACIC.res | Bin 4188 -> 0 bytes MapaTesteProj/MapaTeste.dcu | Bin 30359 -> 0 bytes MapaTesteProj/MapaTeste.pas | 69 ++++++++++++++++++++++++++++++++++++++++++++------------------------- cacic280.dproj | 2 +- cacic280.res | Bin 4872 -> 0 bytes chksis/chksis.dpr | 9 +++++++++ chksis/chksis.dproj | 2 +- chksis/chksis.res | Bin 5084 -> 0 bytes gercols/gercols.dpr | 1 + main.dfm | 2 +- main.pas | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++--------- 13 files changed, 110 insertions(+), 39 deletions(-) diff --git a/MapaTesteProj/MapaCACIC.dpr b/MapaTesteProj/MapaCACIC.dpr index 21d2d13..94e6fc5 100644 --- a/MapaTesteProj/MapaCACIC.dpr +++ b/MapaTesteProj/MapaCACIC.dpr @@ -49,7 +49,7 @@ begin Application.Initialize; Application.Title := 'Mapa Cacic'; Application.CreateForm(TfrmMapaCacic, frmMapaCacic); - Application.Run; + Application.Run; end; oCacic.Free(); end. diff --git a/MapaTesteProj/MapaCACIC.dproj b/MapaTesteProj/MapaCACIC.dproj index f429ed2..d9ee6c8 100644 --- a/MapaTesteProj/MapaCACIC.dproj +++ b/MapaTesteProj/MapaCACIC.dproj @@ -24,7 +24,7 @@ Delphi.Personality -FalseTrueFalseTrueFalse2815TrueFalseFalseFalseFalse10461252Dataprev - Emp. de TI da Prev Social - URES/SESSSistema CACIC - Módulo para Verificação e Instalação de Estrutura Básica do Sistema CACIC2.8.1.53.0Licença: GNU/LGPLmapacacic.dprFalse +FalseTrueFalseTrueFalse2817TrueFalseFalseFalseFalse10461252Dataprev - Emp. de TI da Prev Social - URES/SESSSistema CACIC - Módulo para Verificação e Instalação de Estrutura Básica do Sistema CACIC2.8.1.73.0Licença: GNU/LGPLmapacacic.dprFalse diff --git a/MapaTesteProj/MapaCACIC.res b/MapaTesteProj/MapaCACIC.res index 0b9149e..cbe2c8d 100644 Binary files a/MapaTesteProj/MapaCACIC.res and b/MapaTesteProj/MapaCACIC.res differ diff --git a/MapaTesteProj/MapaTeste.dcu b/MapaTesteProj/MapaTeste.dcu index 50cb01c..c89d495 100644 Binary files a/MapaTesteProj/MapaTeste.dcu and b/MapaTesteProj/MapaTeste.dcu differ diff --git a/MapaTesteProj/MapaTeste.pas b/MapaTesteProj/MapaTeste.pas index fd7a191..86dc107 100644 --- a/MapaTesteProj/MapaTeste.pas +++ b/MapaTesteProj/MapaTeste.pas @@ -143,7 +143,7 @@ type strChkSisInfFileName, strGerColsInfFileName : String; - procedure Finalizar(p_pausa:boolean); + procedure Finalizar; end; @@ -161,10 +161,13 @@ Begin Application.Terminate; End; -procedure TfrmMapaCacic.Finalizar(p_pausa:boolean); +procedure TfrmMapaCacic.Finalizar; Begin Visible := false; + reset(textFileAguarde); + objCACIC.deleteFileOrFolder(objCacic.getLocalFolderName + + '\temp\aguarde_MAPACACIC.txt'); Application.ProcessMessages; Sair; @@ -296,7 +299,7 @@ var teste : string; Begin btCombosUpdate.Enabled := false; - + objCACIC.writeDailyLog('getConfigs: Invocando getConfigs...'); Result := Comm(objCacic.getWebManagerAddress + objCacic.getWebServicesFolderName + 'get/config', strFieldsAndValuesToRequest, objCacic.getLocalFolderName); objCacic.setBoolCipher(not objCacic.isInDebugMode); @@ -304,6 +307,7 @@ Begin if (Result <> '0') then Begin + objCACIC.writeDailyLog('getConfigs: Comunicação realizada com sucesso!'); objCacic.setValueToFile('Configs' ,'modulo_patr' , objCacic.getValueFromTags('modPatrimonio' , Result, '<>'), strGerColsInfFileName); objCacic.setValueToFile('Configs' ,'servidor_autenticacao', objCacic.getValueFromTags('dados_ldap' , Result), strGerColsInfFileName); objCacic.setValueToFile('Configs' ,'Patrimonio_Combos' , objCacic.getValueFromTags('Configs_Patrimonio_Combos' , Result), strGerColsInfFileName); @@ -323,6 +327,7 @@ End; procedure TfrmMapaCacic.RecuperaValoresAnteriores; var strCollectsPatrimonioLast : String; begin + objCACIC.writeDailyLog('RecuperaValoresAnteriores: Início.'); btCombosUpdate.Enabled := false; strCollectsPatrimonioLast := objCacic.deCrypt( objCacic.GetValueFromFile @@ -362,6 +367,7 @@ begin End; btCombosUpdate.Enabled := true; Application.ProcessMessages; + objCACIC.writeDailyLog('RecuperaValoresAnteriores: Fim.'); end; procedure TfrmMapaCacic.AtualizaPatrimonio(Sender: TObject); @@ -372,6 +378,7 @@ if edTeInfoPatrimonio5.text <> '' then begin btGravarInformacoes.Enabled := false; btGravarInformacoes.Caption := 'Enviando informações...'; + objCACIC.writeDailyLog('Preparando para o envio das informações...'); strFieldsAndValuesToRequest := 'CollectType=' + objCacic.replaceInvalidHTTPChars(objCacic.enCrypt('col_patr')) ; strColetaAtual := StringReplace('[IDPatrimonio]' + edTeInfoPatrimonio1.Text + '[/IDPatrimonio]' + @@ -396,11 +403,12 @@ if edTeInfoPatrimonio5.text <> '' then if (strRetorno = '0') then begin btGravarInformacoes.caption := 'Problema ao enviar informações...'; - MessageDLG(#13#10+'Atenção!'+ #13#10 + 'Problema ao enviar as informações!' - + #13#10 + 'Se o problema persistir contate o adminsitrador.',mtError,[mbOK],0); + Application.messagebox(Pchar('Atenção!'+ #13#10 + 'Problema ao enviar as informações!' + + #13#10 + 'Se o problema persistir contate o adminsitrador.'), 'Erro!',MB_ICONERROR + mb_ok); end else Begin + objCACIC.writeDailyLog('Envio realizado com sucesso.'); btGravarInformacoes.Caption := 'Informações enviadas com sucesso...'; objCacic.setValueToFile('Collects','col_patr_last' , objCacic.enCrypt(strColetaAtual), strGerColsInfFileName); @@ -414,7 +422,7 @@ if edTeInfoPatrimonio5.text <> '' then objCacic.writeDebugLog(#13#10 + 'AtualizaPatrimonio: Dados Enviados ao Servidor!'); Application.ProcessMessages; - Finalizar(true); + Finalizar; end else Application.messagebox(Pchar('Por favor, é necessário digitar seu nome!'), 'Atenção!',MB_ICONEXCLAMATION + mb_ok); @@ -481,7 +489,6 @@ Begin // end; //-------------------------------NOME USUARIO----------------------------------- - strNomeLDAP := LDAPName; strNomeLDAP := getLastValue(LDAPName, 'Attribute:', 'cn'+#$D#$A); @@ -552,6 +559,7 @@ Begin btGravarInformacoes.Visible := true; btCombosUpdate.Enabled := true; Application.ProcessMessages; + objCACIC.writeDailyLog('Interface criada com sucesso.'); end; procedure TfrmMapaCacic.FormClose(Sender: TObject; var Action: TCloseAction); @@ -563,7 +571,7 @@ begin Action := caFree; formSecondMonitor:=nil; objCacic.writeDebugLog('FormClose: ' + Sender.ClassName); - Finalizar(true); + Finalizar; end; end; @@ -576,10 +584,10 @@ begin Except on E:Exception do Begin - MessageDlg(#13#13+'Problemas ao gerar formulário.',mtError, [mbOK], 0); + Application.messagebox(Pchar('Problemas ao gerar formulário.'), 'Erro!',MB_ICONERROR + mb_ok); // EstadoBarraTarefa(TRUE); objCacic.writeExceptionLog(E.Message,e.ClassName); - Sair; + Finalizar; End; End; End; @@ -657,26 +665,30 @@ begin if getConfigs <> '0' then begin + objCACIC.writeDailyLog('Iniciando formulário.'); mapa; FormSetFocus(foco) end else - Sair; - end - else - Begin - frmMapaCacic.boolAcessoOK := false; - MessageDLG(#13#10+'Atenção! É necessário reinstalar o CACIC nesta estação.' + #13#10 + #13#10 + - 'A escctrutura encontra-se corrompida.' + #13#10,mtError,[mbOK],0); - Application.ProcessMessages; - frmMapaCacic.Finalizar(false); - End; + begin + objCACIC.writeDailyLog('Falha!!!!.'); + Finalizar; + end; + end + else + Begin + frmMapaCacic.boolAcessoOK := false; + MessageDLG(#13#10+'Atenção! É necessário reinstalar o CACIC nesta estação.' + #13#10 + #13#10 + + 'A escctrutura encontra-se corrompida.' + #13#10,mtError,[mbOK],0); + Application.ProcessMessages; + frmMapaCacic.Finalizar; + End; end else Begin // Se NT/2000/XP/... - MessageDLG(#13#10+'ATENÇÃO! Essa aplicação requer execução com nível administrativo.',mtError,[mbOK],0); + Application.messagebox(Pchar('ATENÇÃO! Essa aplicação requer execução com nível administrativo.'), 'Erro!',MB_ICONERROR + mb_ok); objCacic.writeDailyLog('SEM PRIVILÉGIOS: Necessário ser administrador "local" ou de Domínio!'); - Sair + Finalizar; End; Finally End; @@ -704,7 +716,7 @@ end; procedure TfrmMapaCacic.btKonamiCodeClick(Sender: TObject); begin - sair; + finalizar; end; //------------------------------------------------------------------------------ @@ -752,7 +764,7 @@ begin end; -//CODE PRA FECHAR O MAPA SEM PRESSIONAR NADA. (/\ + /\ + V + V + <- + -> + <- + -> + A + B) +//CODE PRA FECHAR O MAPA SEM PRESSIONAR NADA. (up + up + down + down + <- + -> + <- + -> + B + A) procedure TfrmMapaCacic.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -899,14 +911,18 @@ begin begin try try + objCACIC.writeDailyLog('Nome Usuário: Estabelecendo conexão.'); ldap.TargetHost := host; ldap.UserName := username; ldap.Password := psswd; ldap.Timeout := 5000; if ldap.Login and ldap.Bind then //Loga no LDAP e autentica no LDAP com Usuário e senha repassado. (BindSasl é mais seguro que Bind) begin + // 41680200020 + ldap.Search(base, False, identificador+ '=' + strTeInfoPatrimonio2, retorno); //Faz a pesquisa, com o CPF repassado. result := LDAPResultdump(ldap.SearchResult); + objCACIC.writeDailyLog('Nome Usuário: Conexão estabelecida, pesquisa realizada.'); ldap.Logout; end; finally @@ -919,10 +935,13 @@ begin MessageDlg(#13#13+'Problemas para pegar nome do usuário.'+#13#13+ 'Por favor, digite seu nome no campo solicitado',mtError, [mbOK], 0); objCacic.writeExceptionLog(E.Message,e.ClassName); + objCACIC.writeDailyLog('Nome Usuário: Falha ao tentar recuperar o nome.'); End; //on E:Exception do end; // Try end; // if (host<>'') or (base<>'') or (retorno.count=0) then - end; //if strDadosLDAP<>'' then + end //if strDadosLDAP<>'' then + else + objCACIC.writeDailyLog('Nome Usuário: Dados do servidor de autenticação inexistentes.'); end; diff --git a/cacic280.dproj b/cacic280.dproj index 9486723..0f76b3a 100644 --- a/cacic280.dproj +++ b/cacic280.dproj @@ -40,7 +40,7 @@ Delphi.Personality VCLApplication -FalseTrueFalseTrueFalse2816FalseFalseFalseFalseFalse10461252Dataprev - Emp. de TI da Prev.Social - URES/SESSSistema CACIC - Módulo Agente Principal2.8.1.6Baseado na licença GNU/LGPLCacic - Configurador Automático e Coletor de Informações Computacionais3.0cacic280.dpr +FalseTrueFalseTrueFalse2818FalseFalseFalseFalseFalse10461252Dataprev - Emp. de TI da Prev.Social - URES/SESSSistema CACIC - Módulo Agente Principal2.8.1.8Baseado na licença GNU/LGPLCacic - Configurador Automático e Coletor de Informações Computacionais3.0cacic280.dpr diff --git a/cacic280.res b/cacic280.res index 685c01b..38796f8 100644 Binary files a/cacic280.res and b/cacic280.res differ diff --git a/chksis/chksis.dpr b/chksis/chksis.dpr index d540d5a..ad2048b 100755 --- a/chksis/chksis.dpr +++ b/chksis/chksis.dpr @@ -118,6 +118,7 @@ begin objCacic.setValueToFile('Hash-Codes','CACICSERVICE.EXE' , objCacic.getValueFromTags('CACICSERVICE.EXE_HASH' , strCommResponse, '<>'), strChkSisInfFileName); objCacic.setValueToFile('Hash-Codes','CHKSIS.EXE' , objCacic.getValueFromTags('CHKSIS.EXE_HASH' , strCommResponse, '<>'), strChkSisInfFileName); objCacic.setValueToFile('Hash-Codes','GERCOLS.EXE' , objCacic.getValueFromTags('GERCOLS.EXE_HASH' , strCommResponse, '<>'), strChkSisInfFileName); + objCacic.setValueToFile('Hash-Codes','MAPACACIC.EXE' , objCacic.getValueFromTags('MAPACACIC.EXE_HASH' , strCommResponse, '<>'), strChkSisInfFileName); objCacic.setValueToFile('Hash-Codes',objCacic.getMainProgramName, objCacic.getValueFromTags(objCacic.getMainProgramName + '_HASH', strCommResponse, '<>'), strChkSisInfFileName); // Crio/Recrio/Atualizo o arquivo de configurações do Agente Principal @@ -174,6 +175,14 @@ begin objCacic, strChkSisInfFileName); + // Verificação de versão do Mapa Cacic + verifyAndGetModules('mapacacic.exe', + objCacic.deCrypt(objCacic.getValueFromTags('MAPACACIC.EXE_HASH', strCommResponse, '<>'),true,true), + objCacic.getLocalFolderName + 'Modules', + objCacic.getLocalFolderName, + objCacic, + strChkSisInfFileName); + // 5 segundos para espera de possível FTP em andamento... Sleep(5000); End; diff --git a/chksis/chksis.dproj b/chksis/chksis.dproj index 7edfaf2..b0784ba 100755 --- a/chksis/chksis.dproj +++ b/chksis/chksis.dproj @@ -29,7 +29,7 @@ Delphi.Personality VCLApplication -C:\Arquivos de programas\Borland\Delphi7\Mitec\D7FalseTrueFalseC:\Arquivos de programas\Borland\Delphi7\Bin\TrueFalse2815FalseFalseFalseFalseFalse10461252Dataprev - Emp. de TI da Prev.Social - URES/SESSSistema CACIC - Módulo Verificador de Integridade2.8.1.5ChkSIS3.0Licença: GNU/LGPLchksis.dpr +C:\Arquivos de programas\Borland\Delphi7\Mitec\D7FalseTrueFalseC:\Arquivos de programas\Borland\Delphi7\Bin\TrueFalse2817FalseFalseFalseFalseFalse10461252Dataprev - Emp. de TI da Prev.Social - URES/SESSSistema CACIC - Módulo Verificador de Integridade2.8.1.7ChkSIS3.0Licença: GNU/LGPLchksis.dpr diff --git a/chksis/chksis.res b/chksis/chksis.res index ab7164e..6ba8940 100755 Binary files a/chksis/chksis.res and b/chksis/chksis.res differ diff --git a/gercols/gercols.dpr b/gercols/gercols.dpr index d3e20c7..7fb7a9f 100644 --- a/gercols/gercols.dpr +++ b/gercols/gercols.dpr @@ -348,6 +348,7 @@ Begin objCacic.setValueToFile('Hash-Codes','GERCOLS.EXE' ,objCacic.getValueFromTags('GERCOLS.EXE_HASH' , strRetorno, '<>'), strChkSisInfFileName); objCacic.setValueToFile('Hash-Codes','SRCACICSRV.EXE' ,objCacic.getValueFromTags('SRCACICSRV.EXE_HASH' , strRetorno, '<>'), strChkSisInfFileName); objCacic.setValueToFile('Hash-Codes','CACICSERVICE.EXE' ,objCacic.getValueFromTags('CACICSERVICE.EXE_HASH' , strRetorno, '<>'), strChkSisInfFileName); + objCacic.setValueToFile('Hash-Codes','MAPACACIC.EXE' ,objCacic.getValueFromTags('MAPACACIC.EXE_HASH' , strRetorno, '<>'), strChkSisInfFileName); objCacic.setValueToFile('Configs' ,'InExibeErrosCriticos' ,objCacic.getValueFromTags('in_exibe_erros_criticos' , strRetorno, '<>'), strMainProgramInfFileName); objCacic.setValueToFile('Configs' ,'TeSenhaAdmAgente' ,objCacic.getValueFromTags('te_senha_adm_agente' , strRetorno, '<>'), strMainProgramInfFileName); objCacic.setValueToFile('Configs' ,'NuIntervaloExec' ,objCacic.getValueFromTags('nu_intervalo_exec' , strRetorno, '<>'), strMainProgramInfFileName); diff --git a/main.dfm b/main.dfm index a76dde9..bdd4480 100755 --- a/main.dfm +++ b/main.dfm @@ -1771,7 +1771,7 @@ object FormularioGeral: TFormularioGeral Top = 568 end object CheckForcaColeta: TTimer - Interval = 60000 + Interval = 3600000 OnTimer = CheckForcaColetaTimer Left = 392 Top = 568 diff --git a/main.pas b/main.pas index 965dbb8..8f53f72 100755 --- a/main.pas +++ b/main.pas @@ -194,6 +194,7 @@ type procedure Bt_Fechar_InfosGeraisClick(Sender: TObject); function ChecaGERCOLS : boolean; + function ChecaMAPACACIC : boolean; function FindWindowByTitle(WindowTitle: string): Hwnd; function ActualActivity : integer; function Posso_Rodar : boolean; @@ -797,6 +798,44 @@ begin end; // Verifico a existência do Gerente de Coletas, caso não exista, o chksis.exe fará download! +function TFormularioGeral.ChecaMAPACACIC : boolean; +var strFileSize : String; +Begin + Result := true; + + objCACIC.writeDebugLog('ChecaMAPA: Verificando existência e tamanho do Gerente de Coletas...'); + + strFileSize := objCACIC.getFileSize(objCACIC.getLocalFolderName + 'Modules\mapacacic.exe',true); + + Result := false; + + objCACIC.deleteFileOrFolder(objCACIC.getLocalFolderName + 'Modules\mapacacic.exe'); + + InicializaTray; + + objCACIC.writeDailyLog('Acionando Recuperador de Mapa Cacic.'); + objCACIC.writeDebugLog('ChecaMAPACACIC: Acionando Recuperador de Módulo Gerente de Coletas: '+objCACIC.getWinDir + 'chksis.exe'); + objCACIC.createOneProcess(objCACIC.getWinDir + 'chksis.exe',false,SW_HIDE); + + sleep(30000); // 30 segundos de espera para download do gercols.exe + objCacic.setBoolCipher(not objCacic.isInDebugMode); + strFileSize := objCACIC.getFileSize(objCACIC.getLocalFolderName + '\Modules\mapacacic.exe',true); + if not(strFileSize = '0') and not(strFileSize = '-1') then + Begin + objCACIC.writeDailyLog('Módulo Mapa Cacic RECUPERADO COM SUCESSO!'); + objCACIC.writeDebugLog('ChecaMAPACACIC: Módulo Gerente de Coletas RECUPERADO COM SUCESSO!'); + InicializaTray; + Result := True; + End + else + Begin + objCACIC.writeDailyLog('Módulo Mapa Cacic NÃO RECUPERADO!'); + objCACIC.writeDebugLog('ChecaMAPACACIC: Módulo Gerente de Coletas NÃO RECUPERADO!'); + End; + objCACIC.writeDebugLog('ChecaMAPACACIC: ' + DupeString('=',100)); +End; + +// Verifico a existência do Gerente de Coletas, caso não exista, o chksis.exe fará download! function TFormularioGeral.ChecaGERCOLS : boolean; var strFileSize : String; Begin @@ -1207,7 +1246,7 @@ begin objCACIC.writeDebugLog('Invoca_GerCols: Invocando Gerente de Coletas com ação: "'+p_acao+'"'); if boolShowInfo and not (p_acao = 'getTest') then - objCACIC.writeDailyLog('Invocando Gerente de Coletas com ação: "'+p_acao+'"'); + objCACIC.writeDebugLog('Invocando Gerente de Coletas com ação: "'+p_acao+'"'); timerNuExecApos.Enabled := False; objCACIC.writeDebugLog('Invoca_GerCols: Criando Processo GerCols => "'+objCACIC.getLocalFolderName + 'Modules\gercols.exe /'+p_acao+' /WebServicesFolderName='+objCACIC.getWebServicesFolderName +' /LocalFolderName='+objCACIC.getLocalFolderName + ' /WebManagerAddress=' + objCACIC.getWebManagerAddress + '"'); @@ -1239,19 +1278,23 @@ procedure TFormularioGeral.Invoca_MapaCacic; begin if ActualActivity = 0 then Begin + if ChecaMAPACACIC then + begin // Caso exista o Mapa Cacic será verificada a versão e excluída caso antiga(Uma forma de ação pró-ativa) if FileExists(objCACIC.getLocalFolderName + 'Modules\mapacacic.exe') then Begin ChecaCONFIGS; timerNuExecApos.Enabled := False; + objCacic.writeDailyLog('Invoca_MapaCacic: Criando processo mapa.'); objCACIC.writeDebugLog('Invoca_MapaCacic: Criando Processo Mapa => "'+objCACIC.getLocalFolderName + 'Modules\MapaCACIC.exe'); - objCACIC.createOneProcess(objCACIC.getLocalFolderName + 'Modules\mapacacic.exe',true,SW_SHOW); + objCACIC.createOneProcess(objCACIC.getLocalFolderName + 'Modules\mapacacic.exe',false,SW_SHOW); g_intStatus := 1; objCacic.setBoolCipher(not objCacic.isInDebugMode); End else objCACIC.writeDailyLog('Não foi possível invocar o Mapa Cacic!'); + End; End; end; @@ -1320,22 +1363,21 @@ begin objCACIC.writeDebugLog('ExecutaCACIC: Primeira chamada ao Gerente de Coletas...'); Invoca_GerCols('getConfigs'); + sleep(3000); // Pausa para início do Gerente de Coletas e criação do arquivo temp\aguarde_GER.txt + + Application.ProcessMessages; + InicializaTray; + //////////////////////////////////////////////////////////////////////////////// // CRIADO PARA TESTAR A CHAMADA DO MAPA CACIC // //////////////////////////////////////////////////////////////////////////////// if (trim(objCACIC.getValueFromFile('Configs','col_patr_exe', strGerColsInfFileName))<>'s') - and (ActualActivity<>4) + and not (FileExists(objCacic.getLocalFolderName + 'Temp\aguarde_MAPACACIC.txt')) and (objCACIC.getValueFromFile('Configs', 'modulo_patr', strGerColsInfFileName) = 'S') then begin objCACIC.writeDebugLog('ExecutaCACIC: Executa chamada ao Mapa Cacic...'); Invoca_MapaCacic; end; - sleep(3000); // Pausa para início do Gerente de Coletas e criação do arquivo temp\aguarde_GER.txt - - - Application.ProcessMessages; - InicializaTray; - // Pausas de 15 segundos para o caso de ser(em) baixada(s) nova(s) versão(ões) de GerCols e/ou Cacic280. // Serão 4 tentativas por minuto // Serão 30 minutos no máximo de tentativas, totalizando 120 -- libgit2 0.21.2