94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
import sqlite3
|
|
import os
|
|
from pathlib import Path
|
|
|
|
DB_DIR = r"\\tower\JNJEMAILS\db"
|
|
MSG_DIR = r"\\tower\JNJEMAILS"
|
|
|
|
|
|
def find_latest_db(db_dir):
|
|
dbs = sorted(Path(db_dir).glob("*.db"), key=lambda p: p.stat().st_mtime)
|
|
if not dbs:
|
|
raise FileNotFoundError(f"Žádná .db databáze v {db_dir}")
|
|
return dbs[-1]
|
|
|
|
|
|
def count_msg_files(msg_dir):
|
|
return sum(1 for f in Path(msg_dir).iterdir() if f.suffix.lower() == ".msg")
|
|
|
|
|
|
def stats(db_path):
|
|
con = sqlite3.connect(db_path)
|
|
cur = con.cursor()
|
|
|
|
total = cur.execute("SELECT COUNT(*) FROM messages").fetchone()[0]
|
|
|
|
date_range = cur.execute(
|
|
"SELECT MIN(received_at), MAX(received_at) FROM messages WHERE received_at IS NOT NULL"
|
|
).fetchone()
|
|
|
|
top_senders = cur.execute(
|
|
"SELECT sender, COUNT(*) AS n FROM messages GROUP BY sender ORDER BY n DESC LIMIT 10"
|
|
).fetchall()
|
|
|
|
by_folder = cur.execute(
|
|
"SELECT folder, COUNT(*) AS n FROM messages GROUP BY folder ORDER BY n DESC"
|
|
).fetchall()
|
|
|
|
by_source = cur.execute(
|
|
"SELECT source, COUNT(*) AS n FROM messages GROUP BY source ORDER BY n DESC"
|
|
).fetchall()
|
|
|
|
by_month = cur.execute(
|
|
"""SELECT SUBSTR(received_at, 1, 7) AS month, COUNT(*) AS n
|
|
FROM messages WHERE received_at IS NOT NULL
|
|
GROUP BY month ORDER BY month"""
|
|
).fetchall()
|
|
|
|
con.close()
|
|
return total, date_range, top_senders, by_folder, by_source, by_month
|
|
|
|
|
|
def main():
|
|
db_path = find_latest_db(DB_DIR)
|
|
print(f"Databáze: {db_path.name}")
|
|
print(f"Velikost: {db_path.stat().st_size / 1024 / 1024:.1f} MB")
|
|
|
|
msg_count = count_msg_files(MSG_DIR)
|
|
print(f".msg souborů ve složce: {msg_count:,}")
|
|
|
|
total, date_range, top_senders, by_folder, by_source, by_month = stats(db_path)
|
|
|
|
print(f"\n{'-'*50}")
|
|
print(f" Emailu v databazi: {total:,}")
|
|
if date_range[0]:
|
|
print(f" Nejstarsi: {date_range[0]}")
|
|
print(f" Nejnovejsi: {date_range[1]}")
|
|
|
|
if by_folder:
|
|
print(f"\n Slozky:")
|
|
for folder, n in by_folder:
|
|
print(f" {folder or '(bez slozky)':<35} {n:>6,}")
|
|
|
|
if by_source:
|
|
print(f"\n Zdroje (source):")
|
|
for src, n in by_source:
|
|
print(f" {src or '(prazdny)':<35} {n:>6,}")
|
|
|
|
if by_month:
|
|
print(f"\n Emaily po mesicich:")
|
|
for month, n in by_month:
|
|
bar = "#" * min(n // 20, 40)
|
|
print(f" {month} {bar:<40} {n:>5,}")
|
|
|
|
if top_senders:
|
|
print(f"\n Top 10 odesilatelU:")
|
|
for sender, n in top_senders:
|
|
print(f" {(sender or '(neznamy)')[:50]:<52} {n:>5,}")
|
|
|
|
print(f"{'-'*50}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|