diff --git a/cron.py b/cron.py index 7e05e652..38655c9a 100644 --- a/cron.py +++ b/cron.py @@ -1,7 +1,9 @@ import arrow +from app import email_utils +from app.extensions import db from app.log import LOG -from app.models import Subscription +from app.models import Subscription, User, GenEmail, ForwardEmailLog, ForwardEmail from server import create_app @@ -13,9 +15,67 @@ def late_payment(): LOG.error(f"user {sub.user.email} has late payment. {sub}") +_ignored_emails = ["nguyenkims", "mbpcmeo"] + + +def stats(): + """send admin stats everyday""" + # nb user + q = User.query + for ie in _ignored_emails: + q = q.filter(~User.email.contains(ie)) + + nb_user = q.count() + + LOG.d("total number user %s", nb_user) + + # nb gen emails + q = db.session.query(GenEmail, User).filter(GenEmail.user_id == User.id) + for ie in _ignored_emails: + q = q.filter(~User.email.contains(ie)) + + nb_gen_email = q.count() + LOG.d("total number alias %s", nb_gen_email) + + # nb mails forwarded + q = db.session.query(ForwardEmailLog, ForwardEmail, GenEmail, User).filter( + ForwardEmailLog.forward_id == ForwardEmail.id, + ForwardEmail.gen_email_id == GenEmail.id, + GenEmail.user_id == User.id, + ) + for ie in _ignored_emails: + q = q.filter(~User.email.contains(ie)) + + nb_forward = nb_block = nb_reply = 0 + for fel, _, _, _ in q: + if fel.is_reply: + nb_reply += 1 + elif fel.blocked: + nb_block += 1 + else: + nb_forward += 1 + + LOG.d("nb forward %s, nb block %s, nb reply %s", nb_forward, nb_block, nb_reply) + + today = arrow.now().format() + + email_utils.notify_admin( + f"Stats for {today}", + f""" +Stats for {today}
+nb_user: {nb_user}
+nb_alias: {nb_gen_email}
+nb_forward: {nb_forward}
+nb_reply: {nb_reply}
+nb_block: {nb_block}
+ """, + ) + + if __name__ == "__main__": LOG.d("Start running cronjob") app = create_app() with app.app_context(): late_payment() + stats()