--stats i dry run dla wysylki maili

This commit is contained in:
Mateusz Gruszczyński
2025-05-19 10:19:05 +02:00
parent d8db31be39
commit 0b93a2fadc

53
app.py
View File

@ -424,6 +424,8 @@ def main():
parser.add_argument('--bad-name', action='store_true', 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') 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() 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] 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 "12 lata"
if days < 1095: return "23 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: if args.report_domains:
domain_report(final_candidates) domain_report(final_candidates)
@ -545,10 +589,11 @@ def main():
if args.send_mails: if args.send_mails:
send_email_batch( send_email_batch(
[u for u in final_candidates if u['inactive']], # Tylko nieaktywni [u for u in final_candidates if u['inactive']],
smtp_config, smtp_config,
args.mails_per_pack, args.mails_per_pack,
args.time_per_pack args.time_per_pack,
dry_run=args.dry_run
) )
print("\n📋 Parametry filtrowania:") print("\n📋 Parametry filtrowania:")