Browse Source

Melhorias nos reports de cronjobs.

pull/169/head 3.0.64
Sesóstris Vieira 1 year ago
parent
commit
f6eeadd7d4
  1. 2
      sigi/apps/convenios/jobs/hourly/importa_gescon.py
  2. 19
      sigi/apps/convenios/models.py
  3. 9
      sigi/apps/eventos/admin.py
  4. 9
      sigi/apps/eventos/jobs/sample.py
  5. 21
      sigi/apps/eventos/migrations/0056_evento_origem_sincronizacao.py
  6. 6
      sigi/apps/eventos/models.py
  7. 14
      sigi/apps/utils/management/jobs.py

2
sigi/apps/convenios/jobs/hourly/importa_gescon.py

@ -12,5 +12,5 @@ class Job(JobReportMixin, HourlyJob):
def do_job(self):
gescon = Gescon.load()
gescon.importa_contratos()
self.send_report_mail = gescon.importa_contratos()
self.report_data = gescon.ultima_importacao.splitlines()

19
sigi/apps/convenios/models.py

@ -617,6 +617,12 @@ class Gescon(models.Model):
self.save()
def importa_contratos(self):
"""Importa dados de convênios do GESCON
Returns:
boolean: Indica se o que reportar ao usuário (erro ou dados
importados/atualizados)
"""
self.ultima_importacao = ""
if self.checksums is None:
self.checksums = {}
@ -635,12 +641,13 @@ class Gescon(models.Model):
),
True,
)
return True
if self.subespecies == "":
self.add_message(
_("Nenhuma subespécie definida - processo " "abortado."), True
)
return
return True
if "{s}" not in self.url_gescon:
self.add_message(
@ -651,7 +658,7 @@ class Gescon(models.Model):
),
True,
)
return
return True
palavras = self.palavras.splitlines()
excludentes = self.palavras_excluir.splitlines()
@ -664,6 +671,7 @@ class Gescon(models.Model):
}
requests.packages.urllib3.disable_warnings()
report_user = False
for sigla_gescon, sigla_sigi in subespecies:
self.add_message(_(f"\n**Importando subespécie {sigla_gescon}**"))
@ -675,12 +683,14 @@ class Gescon(models.Model):
response = requests.get(url, verify=False)
except Exception as e:
self.add_message(_(f"\tErro ao acessar {url}: {e.message}"))
report_user = True
continue
if not response.ok:
self.add_message(
_(f"\tErro ao acessar {url}: {response.reason}")
)
report_user = True
continue
if not "application/json" in response.headers.get("Content-Type"):
@ -690,6 +700,7 @@ class Gescon(models.Model):
"retornou dados em formato json"
)
)
report_user = True
continue
md5sum = md5(response.text.encode(response.encoding)).hexdigest()
@ -945,6 +956,9 @@ class Gescon(models.Model):
erros += 1
continue
if novos or erros or alertas or atualizados:
report_user = True
self.add_message(
_(
f"\t{novos} novos convenios adicionados ao SIGI, "
@ -955,6 +969,7 @@ class Gescon(models.Model):
self.checksums[sigla_gescon] = md5sum
self.save()
return report_user
@classmethod
def load(cls):

9
sigi/apps/eventos/admin.py

@ -904,6 +904,7 @@ class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin):
"inscritos_saberes",
"aprovados_saberes",
"data_sincronizacao",
"origem_sincronizacao",
"data_cancelamento",
"motivo_cancelamento",
)
@ -985,6 +986,7 @@ class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin):
"inscritos_saberes",
"aprovados_saberes",
"data_sincronizacao",
"origem_sincronizacao",
)
inlines = (
EquipeInline,
@ -1869,7 +1871,12 @@ class EventoAdmin(AsciifyQParameter, CartExportReportMixin, admin.ModelAdmin):
return redirect(change_url)
try:
evento.sincroniza_saberes()
evento.sincroniza_saberes(
origem=_(
"Sincronizado manualmente por "
f"{request.user.get_full_name()}"
)
)
except Evento.SaberesSyncException as e:
self.message_user(
request,

9
sigi/apps/eventos/jobs/sample.py

@ -1,9 +0,0 @@
from django_extensions.management.jobs import BaseJob
class Job(BaseJob):
help = "My sample job."
def execute(self):
# executing empty sample job
pass

21
sigi/apps/eventos/migrations/0056_evento_origem_sincronizacao.py

@ -0,0 +1,21 @@
# Generated by Django 4.2.4 on 2023-12-18 15:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("eventos", "0055_evento_reserva"),
]
operations = [
migrations.AddField(
model_name="evento",
name="origem_sincronizacao",
field=models.CharField(
blank=True,
max_length=100,
verbose_name="origem da sincronização",
),
),
]

6
sigi/apps/eventos/models.py

@ -414,6 +414,9 @@ class Evento(models.Model):
null=True,
editable=False,
)
origem_sincronizacao = models.CharField(
_("origem da sincronização"), max_length=100, blank=True
)
status = models.CharField(
_("Status"), max_length=1, choices=STATUS_CHOICES
)
@ -545,7 +548,7 @@ class Evento(models.Model):
+ f"/course/view.php?id={self.moodle_courseid}"
)
def sincroniza_saberes(self):
def sincroniza_saberes(self, origem="Cronjob"):
if self.moodle_courseid is None:
raise Evento.SaberesSyncException(
_("Este evento não tem curso associado no Saberes"),
@ -602,6 +605,7 @@ class Evento(models.Model):
self.inscritos_saberes = len(participantes)
self.aprovados_saberes = aprovados
self.data_sincronizacao = timezone.localtime()
self.origem_sincronizacao = origem
# O total de participantes em eventos que possuem curso no Saberes
# é sempre o número de aprovados no Saberes, independente do que o

14
sigi/apps/utils/management/jobs.py

@ -21,6 +21,7 @@ class JobReportMixin:
report_template = "emails/base_report.rst"
report_data = None
sys_user = None
send_report_mail = True
def execute(self):
start_time = datetime.datetime.now()
@ -108,10 +109,11 @@ class JobReportMixin:
"output_encoding": "unicode",
},
)
mail_admins(
subject=f"JOB: {self.help}",
message=rst,
html_message=html,
fail_silently=True,
)
if self.send_report_mail:
mail_admins(
subject=f"JOB: {self.help}",
message=rst,
html_message=html,
fail_silently=True,
)
print(rst)

Loading…
Cancel
Save