Commit f49d691317ffc4334edd0265c77b04fc92e5959a

Authored by Guilherme Andrade Del Cantoni
1 parent 487233bc

[Fixed #99] Reiniciar supervisord quando identificado bloqueio

rn/ProcessarPendenciasRN.php
... ... @@ -7,6 +7,8 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
7 7 private static $instance = null;
8 8 private $objGearmanWorker = null;
9 9  
  10 + const TIMEOUT_PROCESSAMENTO_JOB = 5400;
  11 +
10 12 protected function inicializarObjInfraIBanco()
11 13 {
12 14 return BancoSEI::getInstance();
... ... @@ -72,12 +74,12 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
72 74 // Processamento de pendências envio dos metadados do processo
73 75 $this->objGearmanWorker->addFunction("enviarProcesso", function ($job) {
74 76 $this->gravarLogDebug("Processando envio de processo [enviarComponenteDigital] com IDT " . $job->workload(), 0, true);
75   - });
  77 + }, null, self::TIMEOUT_PROCESSAMENTO_JOB);
76 78  
77 79 // Processamento de pendências envio dos componentes digitais do processo
78 80 $this->objGearmanWorker->addFunction("enviarComponenteDigital", function ($job) {
79 81 $this->gravarLogDebug("Processando envio de componentes digitais [enviarComponenteDigital] com IDT " . $job->workload(), 0, true);
80   - });
  82 + }, null, self::TIMEOUT_PROCESSAMENTO_JOB);
81 83  
82 84 // Processamento de pendências de recebimento do recibo de envio do processo
83 85 $this->objGearmanWorker->addFunction("receberReciboTramite", function ($job) {
... ... @@ -89,13 +91,12 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
89 91 $objReceberReciboTramiteRN = new ReceberReciboTramiteRN();
90 92 $objReceberReciboTramiteRN->receberReciboDeTramite($numIdentificacaoTramite);
91 93 }
92   -
93 94 }
94 95 catch(Exception $e){
95 96 $this->gravarLogDebug(InfraException::inspecionar($e), 0, true);
96 97 LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
97 98 }
98   - });
  99 + }, null, self::TIMEOUT_PROCESSAMENTO_JOB);
99 100  
100 101 //Processamento de pendências de recebimento dos metadados do processo
101 102 $this->objGearmanWorker->addFunction("receberProcedimento", function ($job) {
... ... @@ -121,7 +122,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
121 122 $objProcessoEletronicoRN->recusarTramite($numIdentificacaoTramite, $strMensagem, ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU);
122 123 }
123 124 }
124   - });
  125 + }, null, self::TIMEOUT_PROCESSAMENTO_JOB);
125 126  
126 127 // Verifica no barramento os procedimentos que foram enviados por esta unidade e foram recusados pelas mesmas
127 128 $this->objGearmanWorker->addFunction("receberTramitesRecusados", function ($job) {
... ... @@ -134,13 +135,13 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
134 135 $this->gravarLogDebug(InfraException::inspecionar($e), 0, true);
135 136 LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
136 137 }
137   - });
  138 + }, null, self::TIMEOUT_PROCESSAMENTO_JOB);
138 139  
139 140 //Processamento de pendências de recebimento dos componentes digitais do processo
140 141 $this->objGearmanWorker->addFunction("receberComponenteDigital", function ($job) {
141 142 $this->gravarLogDebug("Processando recebimento de componentes digitais [receberComponenteDigital] com IDT " . $job->workload(), 0, true);
142 143 ProcessarPendenciasRN::processarTarefa("enviarReciboTramiteProcesso", $job->workload());
143   - });
  144 + }, null, self::TIMEOUT_PROCESSAMENTO_JOB);
144 145  
145 146 //Processamento de pendências de envio do recibo de conclusão do trãmite do processo
146 147 $this->objGearmanWorker->addFunction("enviarReciboTramiteProcesso", function ($job) {
... ... @@ -153,7 +154,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
153 154 $this->gravarLogDebug(InfraException::inspecionar($e), 0, true);
154 155 LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
155 156 }
156   - });
  157 + }, null, self::TIMEOUT_PROCESSAMENTO_JOB);
157 158 }
158 159  
159 160 private function gravarLogDebug($strMensagem, $numIdentacao=0, $bolEcho=false)
... ...
verificar-servicos.sh 0 → 100644
... ... @@ -0,0 +1,81 @@
  1 +#!/bin/bash
  2 +
  3 +PATH=/usr/bin:/sbin:/bin:/usr/sbin
  4 +export PATH
  5 +
  6 +echo "Iniciando execução dos script";
  7 +GEARMAN=$(ls /etc/init.d | grep -owih gearman.*)
  8 +if [[ -z $GEARMAN ]]; then
  9 + echo "ERROR: Instalação do Gearman não pode ser localizada."
  10 + exit 1
  11 +else
  12 + ps cax | grep -ih gearman.* > /dev/null
  13 + if [ $? -ne 0 ]; then
  14 + echo "Gearman: Iniciando serviço de gerenciamento de fila de tarefas..."
  15 + /etc/init.d/$GEARMAN start;
  16 + fi
  17 +fi
  18 +
  19 +echo "Verificando supervisor...";
  20 +SUPERVISOR=$(ls /etc/init.d | grep -owih supervisor.*)
  21 +if [[ -z $SUPERVISOR ]]; then
  22 + echo "ERROR: Instalação do Supervisor não pode ser localizada."
  23 + exit 1
  24 +else
  25 + ps cax | grep -ih supervisor.* > /dev/null
  26 + if [ $? -ne 0 ]; then
  27 + echo "Supervisor: Iniciando serviço de monitoramento dos processos de integração..."
  28 + /etc/init.d/$SUPERVISOR start;
  29 + else
  30 +
  31 + COMMAND=$(ps -C php -f | grep -o "PendenciasTramiteRN.php");
  32 + if [ -z "$COMMAND" ]; then
  33 + echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..."
  34 + /etc/init.d/$SUPERVISOR stop;
  35 + /etc/init.d/$SUPERVISOR start;
  36 + fi
  37 +
  38 + COMMAND=$(ps -C php -f | grep -o "ProcessarPendenciasRN.php");
  39 + if [ -z "$COMMAND" ]; then
  40 + echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..."
  41 + /etc/init.d/$SUPERVISOR stop;
  42 + /etc/init.d/$SUPERVISOR start;
  43 + fi
  44 + fi
  45 +fi
  46 +
  47 +echo "Verificando gearman...";
  48 +# Garante que comando grep está disponível
  49 +if ! [ -x "$(command -v grep)" ]; then
  50 + echo "Error: comando grep não encontrado" >&2
  51 + exit 1
  52 +fi
  53 +
  54 +# Garante que comando gearadmin está disponível
  55 +if ! [ -x "$(command -v gearadmin)" ]; then
  56 + echo "Error: comando geardmin não encontrado" >&2
  57 + exit 1
  58 +fi
  59 +
  60 +#Verifica se existe alguma fila de processamento parada por causa de um worker bloqueado
  61 +#Este caso é identificado quando o retorno do gearadmin --status encontra a seguinte situação:
  62 +# gearadmin --status
  63 +# receberProcedimento 5 0 1
  64 +# | | |
  65 +# | | |
  66 +# jobs na fila ------------- | |
  67 +# jobs em processamento ------------ |
  68 +# workers conectados -----------------------
  69 +#
  70 +# Quando existe jobs disponíveis para processamento, workers conectados e nunhum trabalho em processamento;
  71 +# isto indica que houve algum bloqueio no Worker que está impedindo-o a processar os trabalhos da fila.
  72 +# Nesta situação, processos do german precisam ser reiniciados.
  73 +
  74 +GEARADMIN_STATUS=$(gearadmin --status)
  75 +GEARADMIN_REGEX="([1-9]+|[1-9]+[0-9]*)+[[:space:]]+0+[[:space:]]+([1-9]+|[1-9]+[0-9]*)+"
  76 +
  77 +if echo "$GEARADMIN_STATUS" | grep -Eq "$GEARADMIN_REGEX"; then
  78 + echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..."
  79 + /etc/init.d/$SUPERVISOR stop;
  80 + /etc/init.d/$SUPERVISOR start;
  81 +fi
... ...