From f49d691317ffc4334edd0265c77b04fc92e5959a Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Del Cantoni Date: Tue, 30 Apr 2019 16:06:09 -0300 Subject: [PATCH] [Fixed #99] Reiniciar supervisord quando identificado bloqueio --- rn/ProcessarPendenciasRN.php | 17 +++++++++-------- verificar-servicos.sh | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 verificar-servicos.sh diff --git a/rn/ProcessarPendenciasRN.php b/rn/ProcessarPendenciasRN.php index cf41303..55260a2 100644 --- a/rn/ProcessarPendenciasRN.php +++ b/rn/ProcessarPendenciasRN.php @@ -7,6 +7,8 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa private static $instance = null; private $objGearmanWorker = null; + const TIMEOUT_PROCESSAMENTO_JOB = 5400; + protected function inicializarObjInfraIBanco() { return BancoSEI::getInstance(); @@ -72,12 +74,12 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa // Processamento de pendências envio dos metadados do processo $this->objGearmanWorker->addFunction("enviarProcesso", function ($job) { $this->gravarLogDebug("Processando envio de processo [enviarComponenteDigital] com IDT " . $job->workload(), 0, true); - }); + }, null, self::TIMEOUT_PROCESSAMENTO_JOB); // Processamento de pendências envio dos componentes digitais do processo $this->objGearmanWorker->addFunction("enviarComponenteDigital", function ($job) { $this->gravarLogDebug("Processando envio de componentes digitais [enviarComponenteDigital] com IDT " . $job->workload(), 0, true); - }); + }, null, self::TIMEOUT_PROCESSAMENTO_JOB); // Processamento de pendências de recebimento do recibo de envio do processo $this->objGearmanWorker->addFunction("receberReciboTramite", function ($job) { @@ -89,13 +91,12 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa $objReceberReciboTramiteRN = new ReceberReciboTramiteRN(); $objReceberReciboTramiteRN->receberReciboDeTramite($numIdentificacaoTramite); } - } catch(Exception $e){ $this->gravarLogDebug(InfraException::inspecionar($e), 0, true); LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); } - }); + }, null, self::TIMEOUT_PROCESSAMENTO_JOB); //Processamento de pendências de recebimento dos metadados do processo $this->objGearmanWorker->addFunction("receberProcedimento", function ($job) { @@ -121,7 +122,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa $objProcessoEletronicoRN->recusarTramite($numIdentificacaoTramite, $strMensagem, ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); } } - }); + }, null, self::TIMEOUT_PROCESSAMENTO_JOB); // Verifica no barramento os procedimentos que foram enviados por esta unidade e foram recusados pelas mesmas $this->objGearmanWorker->addFunction("receberTramitesRecusados", function ($job) { @@ -134,13 +135,13 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa $this->gravarLogDebug(InfraException::inspecionar($e), 0, true); LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); } - }); + }, null, self::TIMEOUT_PROCESSAMENTO_JOB); //Processamento de pendências de recebimento dos componentes digitais do processo $this->objGearmanWorker->addFunction("receberComponenteDigital", function ($job) { $this->gravarLogDebug("Processando recebimento de componentes digitais [receberComponenteDigital] com IDT " . $job->workload(), 0, true); ProcessarPendenciasRN::processarTarefa("enviarReciboTramiteProcesso", $job->workload()); - }); + }, null, self::TIMEOUT_PROCESSAMENTO_JOB); //Processamento de pendências de envio do recibo de conclusão do trãmite do processo $this->objGearmanWorker->addFunction("enviarReciboTramiteProcesso", function ($job) { @@ -153,7 +154,7 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa $this->gravarLogDebug(InfraException::inspecionar($e), 0, true); LogSEI::getInstance()->gravar(InfraException::inspecionar($e)); } - }); + }, null, self::TIMEOUT_PROCESSAMENTO_JOB); } private function gravarLogDebug($strMensagem, $numIdentacao=0, $bolEcho=false) diff --git a/verificar-servicos.sh b/verificar-servicos.sh new file mode 100644 index 0000000..43d1710 --- /dev/null +++ b/verificar-servicos.sh @@ -0,0 +1,81 @@ +#!/bin/bash + +PATH=/usr/bin:/sbin:/bin:/usr/sbin +export PATH + +echo "Iniciando execução dos script"; +GEARMAN=$(ls /etc/init.d | grep -owih gearman.*) +if [[ -z $GEARMAN ]]; then + echo "ERROR: Instalação do Gearman não pode ser localizada." + exit 1 +else + ps cax | grep -ih gearman.* > /dev/null + if [ $? -ne 0 ]; then + echo "Gearman: Iniciando serviço de gerenciamento de fila de tarefas..." + /etc/init.d/$GEARMAN start; + fi +fi + +echo "Verificando supervisor..."; +SUPERVISOR=$(ls /etc/init.d | grep -owih supervisor.*) +if [[ -z $SUPERVISOR ]]; then + echo "ERROR: Instalação do Supervisor não pode ser localizada." + exit 1 +else + ps cax | grep -ih supervisor.* > /dev/null + if [ $? -ne 0 ]; then + echo "Supervisor: Iniciando serviço de monitoramento dos processos de integração..." + /etc/init.d/$SUPERVISOR start; + else + + COMMAND=$(ps -C php -f | grep -o "PendenciasTramiteRN.php"); + if [ -z "$COMMAND" ]; then + echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..." + /etc/init.d/$SUPERVISOR stop; + /etc/init.d/$SUPERVISOR start; + fi + + COMMAND=$(ps -C php -f | grep -o "ProcessarPendenciasRN.php"); + if [ -z "$COMMAND" ]; then + echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..." + /etc/init.d/$SUPERVISOR stop; + /etc/init.d/$SUPERVISOR start; + fi + fi +fi + +echo "Verificando gearman..."; +# Garante que comando grep está disponível +if ! [ -x "$(command -v grep)" ]; then + echo "Error: comando grep não encontrado" >&2 + exit 1 +fi + +# Garante que comando gearadmin está disponível +if ! [ -x "$(command -v gearadmin)" ]; then + echo "Error: comando geardmin não encontrado" >&2 + exit 1 +fi + +#Verifica se existe alguma fila de processamento parada por causa de um worker bloqueado +#Este caso é identificado quando o retorno do gearadmin --status encontra a seguinte situação: +# gearadmin --status +# receberProcedimento 5 0 1 +# | | | +# | | | +# jobs na fila ------------- | | +# jobs em processamento ------------ | +# workers conectados ----------------------- +# +# Quando existe jobs disponíveis para processamento, workers conectados e nunhum trabalho em processamento; +# isto indica que houve algum bloqueio no Worker que está impedindo-o a processar os trabalhos da fila. +# Nesta situação, processos do german precisam ser reiniciados. + +GEARADMIN_STATUS=$(gearadmin --status) +GEARADMIN_REGEX="([1-9]+|[1-9]+[0-9]*)+[[:space:]]+0+[[:space:]]+([1-9]+|[1-9]+[0-9]*)+" + +if echo "$GEARADMIN_STATUS" | grep -Eq "$GEARADMIN_REGEX"; then + echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..." + /etc/init.d/$SUPERVISOR stop; + /etc/init.d/$SUPERVISOR start; +fi -- libgit2 0.21.2