mirror of
https://github.com/simple-login/app.git
synced 2025-09-12 17:45:18 +08:00
Send lifetime status also to proton (#2300)
This commit is contained in:
parent
0d7c946ba8
commit
17c0af33e4
2 changed files with 71 additions and 0 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
import arrow
|
||||||
from flask import render_template, flash, redirect, url_for
|
from flask import render_template, flash, redirect, url_for
|
||||||
from flask_login import login_required, current_user
|
from flask_login import login_required, current_user
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
|
@ -7,6 +8,8 @@ from app.config import ADMIN_EMAIL
|
||||||
from app.dashboard.base import dashboard_bp
|
from app.dashboard.base import dashboard_bp
|
||||||
from app.db import Session
|
from app.db import Session
|
||||||
from app.email_utils import send_email
|
from app.email_utils import send_email
|
||||||
|
from app.events.event_dispatcher import EventDispatcher
|
||||||
|
from app.events.generated.event_pb2 import UserPlanChanged, EventContent
|
||||||
from app.models import LifetimeCoupon
|
from app.models import LifetimeCoupon
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,6 +43,14 @@ def lifetime_licence():
|
||||||
current_user.lifetime_coupon_id = coupon.id
|
current_user.lifetime_coupon_id = coupon.id
|
||||||
if coupon.paid:
|
if coupon.paid:
|
||||||
current_user.paid_lifetime = True
|
current_user.paid_lifetime = True
|
||||||
|
EventDispatcher.send_event(
|
||||||
|
user=current_user,
|
||||||
|
content=EventContent(
|
||||||
|
user_plan_change=UserPlanChanged(
|
||||||
|
plan_end_time=arrow.get("2100-01-01")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
Session.commit()
|
Session.commit()
|
||||||
|
|
||||||
# notify admin
|
# notify admin
|
||||||
|
|
60
oneshot/send_lifetime_user_events.py
Normal file
60
oneshot/send_lifetime_user_events.py
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import time
|
||||||
|
|
||||||
|
import arrow
|
||||||
|
from sqlalchemy import func
|
||||||
|
|
||||||
|
from app.events.event_dispatcher import EventDispatcher
|
||||||
|
from app.events.generated.event_pb2 import UserPlanChanged, EventContent
|
||||||
|
from app.models import PartnerUser
|
||||||
|
from app.db import Session
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
prog="Backfill alias", description="Send lifetime users to proton"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-s", "--start_pu_id", default=0, type=int, help="Initial partner_user_id"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-e", "--end_pu_id", default=0, type=int, help="Last partner_user_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
pu_id_start = args.start_pu_id
|
||||||
|
max_pu_id = args.end_pu_id
|
||||||
|
if max_pu_id == 0:
|
||||||
|
max_pu_id = Session.query(func.max(PartnerUser.id)).scalar()
|
||||||
|
|
||||||
|
print(f"Checking partner user {pu_id_start} to {max_pu_id}")
|
||||||
|
step = 100
|
||||||
|
done = 0
|
||||||
|
start_time = time.time()
|
||||||
|
with_lifetime = 0
|
||||||
|
for batch_start in range(pu_id_start, max_pu_id, step):
|
||||||
|
partner_users = (
|
||||||
|
Session.query(PartnerUser).filter(
|
||||||
|
PartnerUser.id >= batch_start, PartnerUser.id < batch_start + step
|
||||||
|
)
|
||||||
|
).all()
|
||||||
|
for partner_user in partner_users:
|
||||||
|
done += 1
|
||||||
|
if not partner_user.user.lifetime:
|
||||||
|
continue
|
||||||
|
with_lifetime += 1
|
||||||
|
event = UserPlanChanged(plan_end_time=arrow.get("2100-01-01"))
|
||||||
|
EventDispatcher.send_event(
|
||||||
|
partner_user.user, EventContent(user_plan_change=event)
|
||||||
|
)
|
||||||
|
Session.flush()
|
||||||
|
Session.commit()
|
||||||
|
elapsed = time.time() - start_time
|
||||||
|
last_batch_id = batch_start + step
|
||||||
|
time_per_alias = elapsed / (last_batch_id)
|
||||||
|
remaining = max_pu_id - last_batch_id
|
||||||
|
time_remaining = remaining / time_per_alias
|
||||||
|
hours_remaining = time_remaining / 60.0
|
||||||
|
print(
|
||||||
|
f"\PartnerUser {batch_start}/{max_pu_id} {done} {hours_remaining:.2f} mins remaining"
|
||||||
|
)
|
||||||
|
print(f"With SL lifetime {with_lifetime}")
|
Loading…
Add table
Reference in a new issue