From 2815310c01ee284e76efd72ff6ebf651f504136c Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 23 Feb 2026 15:46:02 +0100 Subject: [PATCH] Added last DNS checks execution date to Domain model. --- .../src/components/admin/domains/DNSDetail.vue | 7 +++++++ modoboa/admin/api/v2/serializers.py | 1 + modoboa/admin/jobs.py | 2 ++ .../0024_domain_last_dns_check_execution.py | 18 ++++++++++++++++++ modoboa/admin/models/domain.py | 1 + modoboa/admin/tests/test_mx.py | 2 ++ 6 files changed, 31 insertions(+) create mode 100644 modoboa/admin/migrations/0024_domain_last_dns_check_execution.py diff --git a/frontend/src/components/admin/domains/DNSDetail.vue b/frontend/src/components/admin/domains/DNSDetail.vue index 0cb73e067..4f3334657 100644 --- a/frontend/src/components/admin/domains/DNSDetail.vue +++ b/frontend/src/components/admin/domains/DNSDetail.vue @@ -10,6 +10,13 @@ density="compact" @click="showConfigHelp = true" > + + ({{ $gettext('Last check:') }} + {{ $date(domain.last_dns_check_execution) }}) + MX records diff --git a/modoboa/admin/api/v2/serializers.py b/modoboa/admin/api/v2/serializers.py index 180d412ab..0d01e25b6 100644 --- a/modoboa/admin/api/v2/serializers.py +++ b/modoboa/admin/api/v2/serializers.py @@ -63,6 +63,7 @@ class DomainSerializer(v1_serializers.DomainSerializer): "opened_alarms_count", "sent_messages", "sent_messages_in_percent", + "last_dns_check_execution", ) def __init__(self, *args, **kwargs): diff --git a/modoboa/admin/jobs.py b/modoboa/admin/jobs.py index f67d16e16..014a55a3c 100644 --- a/modoboa/admin/jobs.py +++ b/modoboa/admin/jobs.py @@ -72,6 +72,8 @@ def handle_mailbox_operations(): def launch_domain_dns_checks(domain_id: int): domain = models.Domain.objects.get(id=domain_id) DNSChecker().run(domain) + domain.last_dns_check_execution = timezone.now() + domain.save() def handle_dns_checks(): diff --git a/modoboa/admin/migrations/0024_domain_last_dns_check_execution.py b/modoboa/admin/migrations/0024_domain_last_dns_check_execution.py new file mode 100644 index 000000000..dd2e595ad --- /dev/null +++ b/modoboa/admin/migrations/0024_domain_last_dns_check_execution.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.11 on 2026-02-23 14:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("admin", "0023_auto_20240320_1037"), + ] + + operations = [ + migrations.AddField( + model_name="domain", + name="last_dns_check_execution", + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 3b0106bbd..98875272b 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -55,6 +55,7 @@ class Domain(mixins.MessageLimitMixin, AdminObject): default=True, help_text=gettext_lazy("Check to enable DNS checks for this domain"), ) + last_dns_check_execution = models.DateTimeField(null=True, blank=True) transport = models.OneToOneField( "transport.Transport", null=True, on_delete=models.SET_NULL diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index ddc563004..78511838d 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -242,7 +242,9 @@ class DNSBLTestCase(ModoTestCase): worker = SimpleWorker([queue], connection=queue.connection) worker.work(burst=True) + self.domain.refresh_from_db() self.assertTrue(models.DNSBLResult.objects.filter(domain=self.domain).exists()) + self.assertIsNot(self.domain.last_dns_check_execution, None) self.assertFalse( models.DNSBLResult.objects.filter(domain=self.domain3).exists() )