mirror of
https://github.com/simple-login/app.git
synced 2024-11-14 04:34:59 +08:00
74b811dd35
* Update oneshot commands * fix * Fix test_load command * Rename to avoid test executing it
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
import argparse
|
|
import time
|
|
|
|
from sqlalchemy import func
|
|
|
|
from app.models import Alias, SLDomain
|
|
from app.db import Session
|
|
|
|
parser = argparse.ArgumentParser(
|
|
prog="Mark partner created aliases with the PARTNER_CREATED flag",
|
|
)
|
|
parser.add_argument(
|
|
"-s", "--start_alias_id", default=0, type=int, help="Initial alias_id"
|
|
)
|
|
parser.add_argument("-e", "--end_alias_id", default=0, type=int, help="Last alias_id")
|
|
|
|
args = parser.parse_args()
|
|
alias_id_start = args.start_alias_id
|
|
max_alias_id = args.end_alias_id
|
|
if max_alias_id == 0:
|
|
max_alias_id = Session.query(func.max(Alias.id)).scalar()
|
|
|
|
print(f"Updating aliases from {alias_id_start} to {max_alias_id}")
|
|
|
|
domains = SLDomain.filter(SLDomain.partner_id.isnot(None)).all()
|
|
cond = [f"email like '%{domain.domain}'" for domain in domains]
|
|
sql_or_cond = " OR ".join(cond)
|
|
sql = f"UPDATE alias set flags = (flags | :flag) WHERE id >= :start and id<:end and flags & :flag = 0 and ({sql_or_cond})"
|
|
print(sql)
|
|
|
|
step = 1000
|
|
updated = 0
|
|
start_time = time.time()
|
|
for batch_start in range(alias_id_start, max_alias_id, step):
|
|
updated += Session.execute(
|
|
sql,
|
|
{
|
|
"start": batch_start,
|
|
"end": batch_start + step,
|
|
"flag": Alias.FLAG_PARTNER_CREATED,
|
|
},
|
|
).rowcount
|
|
elapsed = time.time() - start_time
|
|
time_per_alias = elapsed / (batch_start - alias_id_start + step)
|
|
last_batch_id = batch_start + step
|
|
remaining = max_alias_id - last_batch_id
|
|
time_remaining = (max_alias_id - last_batch_id) * time_per_alias
|
|
hours_remaining = time_remaining / 3600.0
|
|
percent = int(
|
|
((batch_start - alias_id_start) * 100) / (max_alias_id - alias_id_start)
|
|
)
|
|
print(
|
|
f"\rAlias {batch_start}/{max_alias_id} {percent}% {updated} updated {hours_remaining:.2f}hrs remaining"
|
|
)
|
|
print(f"Updated aliases up to {max_alias_id}")
|