simplify and beautify formatting and sizes

This commit is contained in:
holger krekel
2025-10-20 20:46:14 +02:00
parent 5c8afb377e
commit c1f08a9afe

View File

@@ -26,27 +26,14 @@ DAYSECONDS = 24 * 60 * 60
MONTHSECONDS = DAYSECONDS * 30
def D(timestamp, now=datetime.utcnow().timestamp()):
diff_seconds = int(now) - int(timestamp)
# assert diff_seconds >= 0, (int(timestamp), int(now))
return f"{int(diff_seconds / DAYSECONDS):2.0f}d"
def K(size):
def HSize(size: int):
"""Format a size integer as a Human-readable string Kilobyte, Megabyte or Gigabyte"""
if size < 10000:
return f"{size / 1000:5.2f}K"
return f"{size / 1000:5.0f}K"
def M(size):
return f"{int(size / 1000000):5.0f}M"
def H(size):
if size < 1000 * 1000:
return K(size)
return f"{size / 1000:5.0f}K"
if size < 1000 * 1000 * 1000:
return M(size)
return f"{int(size / 1000000):5.0f}M"
return f"{size / 1000000000:5.2f}G"
@@ -92,10 +79,10 @@ class Report:
all_messages = self.size_messages
print()
print("## Mailbox storage use analysis")
print(f"Mailbox data total size: {H(self.size_extra + all_messages)}")
print(f"Messages total size : {H(all_messages)}")
print(f"Mailbox data total size: {HSize(self.size_extra + all_messages)}")
print(f"Messages total size : {HSize(all_messages)}")
percent = self.size_extra / (self.size_extra + all_messages) * 100
print(f"Extra files : {H(self.size_extra)} ({percent:.2f}%)")
print(f"Extra files : {HSize(self.size_extra)} ({percent:.2f}%)")
print()
if self.min_login_age:
@@ -104,7 +91,9 @@ class Report:
pref = f"[{self.mdir}] " if self.mdir else ""
for minsize, sumsize in self.message_buckets.items():
percent = (sumsize / all_messages * 100) if all_messages else 0
print(f"{pref}larger than {H(minsize)}: {H(sumsize)} ({percent:.2f}%)")
print(
f"{pref}larger than {HSize(minsize)}: {HSize(sumsize)} ({percent:.2f}%)"
)
user_logins = self.num_all_logins - self.num_ci_logins
@@ -113,11 +102,11 @@ class Report:
print()
print(f"## Login stats, from date reference {datetime.fromtimestamp(self.now)}")
print(f"all: {H(self.num_all_logins)}")
print(f"non-ci: {H(user_logins)}")
print(f"ci: {H(self.num_ci_logins)}")
print(f"all: {HSize(self.num_all_logins)}")
print(f"non-ci: {HSize(user_logins)}")
print(f"ci: {HSize(self.num_ci_logins)}")
for days, active in self.login_buckets.items():
print(f"last {days:3} days: {H(active)} {p(active)}")
print(f"last {days:3} days: {HSize(active)} {p(active)}")
def main(args=None):