diff --git a/modoboa/extensions/stats/graphics.py b/modoboa/extensions/stats/graphics.py index 80ca0af88..13a943085 100644 --- a/modoboa/extensions/stats/graphics.py +++ b/modoboa/extensions/stats/graphics.py @@ -109,8 +109,10 @@ class AverageTraffic(Graphic): recv = Curve("recv", "steelblue", ugettext_lazy("received messages")) bounced = Curve("bounced", "yellow", ugettext_lazy("bounced messages")) reject = Curve("reject", "tomato", ugettext_lazy("rejected messages")) + virus = Curve("virus", "orange", ugettext_lazy("virus messages")) + spam = Curve("spam", "silver", ugettext_lazy("spam messages")) - order = ['reject', 'bounced', 'recv', 'sent'] + order = ['reject', 'bounced', 'recv', 'sent', 'virus', 'spam'] class AverageTrafficSize(Graphic): diff --git a/modoboa/extensions/stats/management/commands/logparser.py b/modoboa/extensions/stats/management/commands/logparser.py index e898d338c..7af07fa18 100644 --- a/modoboa/extensions/stats/management/commands/logparser.py +++ b/modoboa/extensions/stats/management/commands/logparser.py @@ -297,6 +297,14 @@ class LogParser(object): if not m: return host, prog, pid, log = m.groups() + m = re.search("(INFECTED|SPAMMY) .* <[^>]+> -> <[^@]+@([^>]+)>.*", log) + if m is not None: + if m.group(2) in self.domains: + if m.group(1) == 'INFECTED': + self.inc_counter(m.group(2), 'virus') + elif m.group(1) == 'SPAMMY': + self.inc_counter(m.group(2), 'spam') + return m = self._id_expr.match(log) if m is None: self._dprint("Unknown line format: %s" % log)