Browse Source

Melhoria na verificação de serviços ativos

pull/159/head
Sesostris Vieira 3 years ago
parent
commit
7e29edd02f
  1. 3
      sigi/apps/servicos/admin.py
  2. 27
      sigi/apps/servicos/management/commands/atualiza_uso_servico.py
  3. 23
      sigi/apps/servicos/migrations/0012_servico_data_verificacao_and_more.py
  4. 54
      sigi/apps/servicos/models.py

3
sigi/apps/servicos/admin.py

@ -75,6 +75,8 @@ class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
"data_ativacao", "data_ativacao",
"data_desativacao", "data_desativacao",
"getUrl", "getUrl",
"data_verificacao",
"resultado_verificacao",
"data_ultimo_uso", "data_ultimo_uso",
"get_link_erro", "get_link_erro",
) )
@ -94,6 +96,7 @@ class ServicoAdmin(CartExportMixin, admin.ModelAdmin):
"hospedagem_interlegis", "hospedagem_interlegis",
("data_ativacao", DateRangeFilter), ("data_ativacao", DateRangeFilter),
("data_desativacao", ServicoAtivoFilter), ("data_desativacao", ServicoAtivoFilter),
"resultado_verificacao",
DataUtimoUsoFilter, DataUtimoUsoFilter,
("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter), ("casa_legislativa__gerentes_interlegis", GerentesInterlegisFilter),
"casa_legislativa__municipio__uf", "casa_legislativa__municipio__uf",

27
sigi/apps/servicos/management/commands/atualiza_uso_servico.py

@ -1,26 +1,3 @@
# -*- coding: utf-8 -*-
#
# sigi.apps.servicos.management.commands.atualiza_uso_servico
#
# Copyright (c) 2012 by Interlegis
#
# GNU General Public License (GPL)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
@ -43,6 +20,6 @@ class Command(BaseCommand):
verbosity > 1 verbosity > 1
): ):
self.stdout.write( self.stdout.write(
"%s \t %s \t %s\n" f"{obj.url} \t {obj.data_ultimo_uso} \t "
% (obj.url, obj.data_ultimo_uso, obj.erro_atualizacao) f"{obj.erro_atualizacao}"
) )

23
sigi/apps/servicos/migrations/0012_servico_data_verificacao_and_more.py

@ -0,0 +1,23 @@
# Generated by Django 4.0.4 on 2022-05-16 19:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('servicos', '0011_remove_servico_contato_administrativo_and_more'),
]
operations = [
migrations.AddField(
model_name='servico',
name='data_verificacao',
field=models.DateTimeField(blank=True, null=True, verbose_name='data da última verificação'),
),
migrations.AddField(
model_name='servico',
name='resultado_verificacao',
field=models.CharField(choices=[('N', 'Não verificado'), ('F', 'Funcionando'), ('U', 'Nunca foi usado'), ('D', 'Acesso negado'), ('O', 'Fora do ar'), ('I', 'Dados imcompatíveis - não é serviço Interlegis')], default='N', max_length=1, verbose_name='resultado da verificação'),
),
]

54
sigi/apps/servicos/models.py

@ -1,4 +1,4 @@
from datetime import date from django.utils import timezone
from django.db import models from django.db import models
from sigi.apps.casas.models import Orgao, Funcionario from sigi.apps.casas.models import Orgao, Funcionario
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
@ -48,6 +48,14 @@ class TipoServico(models.Model):
class Servico(models.Model): class Servico(models.Model):
RESULTADO_CHOICES = (
("N", _("Não verificado")),
("F", _("Funcionando")),
("U", _("Nunca foi usado")),
("D", _("Acesso negado")),
("O", _("Fora do ar")),
("I", _("Dados imcompatíveis - não é serviço Interlegis")),
)
casa_legislativa = models.ForeignKey( casa_legislativa = models.ForeignKey(
Orgao, on_delete=models.PROTECT, verbose_name=_("Casa Legislativa") Orgao, on_delete=models.PROTECT, verbose_name=_("Casa Legislativa")
) )
@ -58,7 +66,9 @@ class Servico(models.Model):
hospedagem_interlegis = models.BooleanField( hospedagem_interlegis = models.BooleanField(
_("Hospedagem no Interlegis?"), default=False _("Hospedagem no Interlegis?"), default=False
) )
data_ativacao = models.DateField(_("Data de ativação"), default=date.today) data_ativacao = models.DateField(
_("Data de ativação"), default=timezone.localdate
)
data_alteracao = models.DateField( data_alteracao = models.DateField(
_("Data da última alteração"), blank=True, null=True, auto_now=True _("Data da última alteração"), blank=True, null=True, auto_now=True
) )
@ -68,6 +78,15 @@ class Servico(models.Model):
motivo_desativacao = models.TextField( motivo_desativacao = models.TextField(
_("Motivo da desativação"), blank=True _("Motivo da desativação"), blank=True
) )
data_verificacao = models.DateTimeField(
_("data da última verificação"), blank=True, null=True
)
resultado_verificacao = models.CharField(
_("resultado da verificação"),
choices=RESULTADO_CHOICES,
default="N",
max_length=1,
)
data_ultimo_uso = models.DateField( data_ultimo_uso = models.DateField(
_("Data da última utilização"), _("Data da última utilização"),
blank=True, blank=True,
@ -99,6 +118,8 @@ class Servico(models.Model):
def reset(): def reset():
if self.data_ultimo_uso is not None: if self.data_ultimo_uso is not None:
self.data_verificacao = None
self.resultado_verificacao = "N"
self.data_ultimo_uso = None self.data_ultimo_uso = None
self.erro_atualizacao = "" self.erro_atualizacao = ""
self.save() self.save()
@ -109,6 +130,7 @@ class Servico(models.Model):
if len(param_pesquisa) != 3: if len(param_pesquisa) != 3:
return { return {
"data": "", "data": "",
"resultado": "N",
"erro": _("String de pesquisa mal configurada"), "erro": _("String de pesquisa mal configurada"),
"comment": _("Corrija a string de pesquisa"), "comment": _("Corrija a string de pesquisa"),
} }
@ -124,6 +146,7 @@ class Servico(models.Model):
except Exception as e: except Exception as e:
return { return {
"data": "", "data": "",
"resultado": "O",
"erro": str(e), "erro": str(e),
"comment": _( "comment": _(
"Não foi possível conectar com o servidor. " "Não foi possível conectar com o servidor. "
@ -135,6 +158,7 @@ class Servico(models.Model):
if req.status_code != 200: if req.status_code != 200:
return { return {
"data": "", "data": "",
"resultado": "D",
"erro": req.reason, "erro": req.reason,
"comment": _( "comment": _(
"Não foi possível receber os dados do " "Não foi possível receber os dados do "
@ -150,6 +174,7 @@ class Servico(models.Model):
else: else:
return { return {
"data": "", "data": "",
"resultado": "N",
"erro": _("String de pesquisa mal configurada"), "erro": _("String de pesquisa mal configurada"),
"comment": "", "comment": "",
} }
@ -159,6 +184,7 @@ class Servico(models.Model):
if (len(data) - 1) < c: if (len(data) - 1) < c:
return { return {
"data": "", "data": "",
"resultado": "U",
"erro": _("Sem dados para verificação"), "erro": _("Sem dados para verificação"),
"comment": _("Parece que nunca foi usado"), "comment": _("Parece que nunca foi usado"),
} }
@ -173,10 +199,16 @@ class Servico(models.Model):
data = data.firstChild.nodeValue data = data.firstChild.nodeValue
data = data[:10] data = data[:10]
data = data.replace("/", "-") data = data.replace("/", "-")
return {"data": data, "erro": "", "comment": ""} return {
"data": data,
"resultado": "F",
"erro": "",
"comment": "",
}
except Exception as e: except Exception as e:
return { return {
"data": "", "data": "",
"resultado": "I",
"erro": str(e), "erro": str(e),
"comment": _( "comment": _(
"Parece que não é um {tipo}".format( "Parece que não é um {tipo}".format(
@ -194,6 +226,7 @@ class Servico(models.Model):
if not url: if not url:
reset() reset()
self.erro_atualizacao = _("Serviço sem URL") self.erro_atualizacao = _("Serviço sem URL")
self.data_verificacao = timezone.localtime()
self.save() self.save()
return return
@ -206,6 +239,12 @@ class Servico(models.Model):
resultados.append(ultimo_uso(url, string_pesquisa)) resultados.append(ultimo_uso(url, string_pesquisa))
data = max([r["data"] for r in resultados]) data = max([r["data"] for r in resultados])
resultado = {r["resultado"] for r in resultados}
if "F" in resultado:
self.resultado_verificacao = "F"
else:
self.resultado_verificacao = resultado.pop()
if data == "": if data == "":
# Nenhuma busca deu resultado, guardar log de erro # Nenhuma busca deu resultado, guardar log de erro
@ -213,19 +252,18 @@ class Servico(models.Model):
self.erro_atualizacao = "<br/>".join( self.erro_atualizacao = "<br/>".join(
set( set(
[ [
"{erro} ({comment})".format( f"{r['erro']} ({r['comment']})"
erro=r["erro"], comment=r["comment"]
)
for r in resultados for r in resultados
if r["erro"] != "" and r["comment"] != "" if r["erro"] != "" and r["comment"] != ""
] ]
) )
) )
self.save()
else: else:
# Atualiza a maior data de atualização # Atualiza a maior data de atualização
self.data_ultimo_uso = data[:10] # Apenas YYYY-MM-DD self.data_ultimo_uso = data[:10] # Apenas YYYY-MM-DD
self.erro_atualizacao = "" self.erro_atualizacao = ""
self.data_verificacao = timezone.localtime()
self.save() self.save()
return return
@ -287,7 +325,7 @@ class LogServico(models.Model):
Servico, on_delete=models.CASCADE, verbose_name=_("Serviço") Servico, on_delete=models.CASCADE, verbose_name=_("Serviço")
) )
descricao = models.CharField(_("Breve descrição da ação"), max_length=60) descricao = models.CharField(_("Breve descrição da ação"), max_length=60)
data = models.DateField(_("Data da ação"), default=date.today) data = models.DateField(_("Data da ação"), default=timezone.localdate)
log = models.TextField(_("Log da ação")) log = models.TextField(_("Log da ação"))
def __str__(self): def __str__(self):

Loading…
Cancel
Save