From 0b93a2fadc4ad70f2b855c426ace1749efb58dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Mon, 19 May 2025 10:19:05 +0200 Subject: [PATCH] --stats i dry run dla wysylki maili --- app.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/app.py b/app.py index 11b0f2f..0b448ea 100644 --- a/app.py +++ b/app.py @@ -424,6 +424,8 @@ def main(): parser.add_argument('--bad-name', action='store_true', help='Oznacz użytkowników z losowymi lub bezużytecznymi nazwami jako kandydatów do usunięcia') + parser.add_argument('--stats', action='store_true', + help='Wyświetl statystyki: aktywność, rok rejestracji, domeny') args = parser.parse_args() @@ -523,6 +525,48 @@ def main(): final_candidates = [u for u in final_candidates if (u.get('points') or 0) == 0] + if args.stats: + from collections import Counter + + def bucket_days(days): + if days < 365: return "<1 rok" + if days < 730: return "1–2 lata" + if days < 1095: return "2–3 lata" + return "3+ lata" + + access_buckets = Counter() + created_years = Counter() + email_domains = Counter() + + for u in users: + last = u.get("access") or 0 + days_inactive = (now_ts - last) / 86400 + access_buckets[bucket_days(days_inactive)] += 1 + + if u.get("created"): + y = datetime.fromtimestamp(u["created"]).year + created_years[y] += 1 + + try: + domain = u["mail"].split("@")[1].lower() + email_domains[domain] += 1 + except: + pass + + print("\n📊 Statystyki:") + print("- Rozkład nieaktywności:") + for k, v in sorted(access_buckets.items()): + print(f" {k}: {v}") + + print("- Rok rejestracji:") + for k in sorted(created_years): + print(f" {k}: {created_years[k]}") + + print("- Top domeny:") + for dom, cnt in email_domains.most_common(10): + print(f" {dom}: {cnt}") + + if args.report_domains: domain_report(final_candidates) @@ -545,10 +589,11 @@ def main(): if args.send_mails: send_email_batch( - [u for u in final_candidates if u['inactive']], # Tylko nieaktywni - smtp_config, - args.mails_per_pack, - args.time_per_pack + [u for u in final_candidates if u['inactive']], + smtp_config, + args.mails_per_pack, + args.time_per_pack, + dry_run=args.dry_run ) print("\n📋 Parametry filtrowania:")