From: Michael Tremer Date: Tue, 6 Jan 2026 11:43:00 +0000 (+0000) Subject: reports: Update stats immediately after closing a report X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01fe8182d193a78fb0809341a33893f4e3677042;p=dbl.git reports: Update stats immediately after closing a report Signed-off-by: Michael Tremer --- diff --git a/src/dnsbl/lists.py b/src/dnsbl/lists.py index e67caa2..f192eda 100644 --- a/src/dnsbl/lists.py +++ b/src/dnsbl/lists.py @@ -355,6 +355,39 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): return self.backend.db.fetch_one(stmt) + def get_sources_by_domain(self, name): + """ + Returns all sources that list the given domain + """ + stmt = ( + sqlmodel + .select( + sources.Source, + ) + .select_from( + domains.Domain, + ) + .join( + sources.Source, + sources.Source.id == domains.Domain.source_id, + ) + .where( + # The domain must be on this list + domains.Domain.list == self, + + # The name must match + domains.Domain.name == name, + + # The domain cannot be removed + domains.Domain.removed_at == None, + + # The domain must come from a source + domains.Domain.source_id != None, + ) + ) + + return self.backend.db.fetch_as_set(stmt) + # Total Domains total_domains : int = 0 diff --git a/src/dnsbl/reports.py b/src/dnsbl/reports.py index f50dc84..ba93e77 100644 --- a/src/dnsbl/reports.py +++ b/src/dnsbl/reports.py @@ -124,7 +124,7 @@ class Report(sqlmodel.SQLModel, database.BackendMixin, table=True): # Close! - def close(self, closed_by=None, accept=True): + def close(self, closed_by=None, accept=True, update_stats=True): """ Called when a moderator has made a decision """ @@ -154,3 +154,12 @@ class Report(sqlmodel.SQLModel, database.BackendMixin, table=True): # Log action log.info("Report %s has been closed by %s" % (self, self.closed_by)) + + # Update list stats + if update_stats: + # Update stats for all sources that list this domain + for source in self.list.get_sources_by_domain(self.name): + source.update_stats() + + # Update the list's stats + self.list.update_stats()