mail-in-a-box / mailinabox

Mail-in-a-Box helps individuals take back control of their email by defining a one-click, easy-to-deploy SMTP+everything else server: a mail server in a box.
https://mailinabox.email/
Creative Commons Zero v1.0 Universal
13.98k stars 1.44k forks source link

Empty email log scan #2402

Closed psiwray closed 3 months ago

psiwray commented 3 months ago

The periodic message delineating the incoming/outgoing email traffic for each configured account is empty:

Scanning logs from 2024-06-17 03:20:01 to 2024-06-24 03:20:01
397957 Log lines scanned, 7411 lines parsed in 7.68 seconds

Sent email
══════════

Trying to run the script manually yields this error:

Scanning logs from 2024-06-27 00:00:00 to 2024-06-27 12:38:13
404891 Log lines scanned, 584 lines parsed in 4.98 seconds

Received email
══════════════

Traceback (most recent call last):
  File "/root/mailinabox/./management/mail_log.py", line 869, in <module>
    scan_mail_log(env_vars)
  File "/root/mailinabox/./management/mail_log.py", line 181, in scan_mail_log
    print_user_table(
  File "/root/mailinabox/./management/mail_log.py", line 682, in print_user_table
    if None not in {latest, earliest}:
TypeError: unhashable type: 'list'

I'm on v68.

psiwray commented 3 months ago

Seems like this patch could be a potential fix:

diff --git a/management/mail_log.py b/management/mail_log.py
index e127af3..4de7d9d 100755
--- a/management/mail_log.py
+++ b/management/mail_log.py
@@ -679,7 +679,7 @@ def print_user_table(users, data=None, sub_data=None, activity=None, latest=None
                 data_accum[col] += d[row]

         try:
-            if None not in {latest, earliest}:
+            if None not in {*latest, *earliest}:
                 vert_pos = len(line)
                 e = earliest[row]
                 l = latest[row]
@@ -732,7 +732,7 @@ def print_user_table(users, data=None, sub_data=None, activity=None, latest=None
         else:
             header += l.rjust(max(5, len(l) + 1, col_widths[col]))

-    if None not in {latest, earliest}:
+    if None not in {*latest, *earliest}:
         header += " │ timespan   "

     lines.insert(0, header.rstrip())
@@ -757,7 +757,7 @@ def print_user_table(users, data=None, sub_data=None, activity=None, latest=None
         footer += temp.format(data_accum[row])

     try:
-        if None not in {latest, earliest}:
+        if None not in {*latest, *earliest}:
             max_l = max(latest)
             min_e = min(earliest)
             timespan = relativedelta(max_l, min_e)
themew commented 3 months ago

https://github.com/mail-in-a-box/mailinabox/pull/2378/files/5778ec339a3ae1aafa3c1657a8704631697a9826..83652851f77c7097ad376c12078ea8c751b2c3ee

Fixes it until next release.