mirror of
https://github.com/quay/quay.git
synced 2026-01-26 06:21:37 +03:00
* chore: drop deprecated tables and remove unused code * isort imports * migration: check for table existence before drop
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
import logging
|
|
import time
|
|
from datetime import datetime, timedelta
|
|
|
|
from app import app
|
|
from data.database import AccessToken, RepositoryBuild
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
BATCH_SIZE = 1000
|
|
|
|
|
|
def delete_temporary_access_tokens(older_than):
|
|
# Find the highest ID up to which we should delete
|
|
up_to_id = (
|
|
AccessToken.select(AccessToken.id)
|
|
.where(AccessToken.created < older_than)
|
|
.limit(1)
|
|
.order_by(AccessToken.id.desc())
|
|
.get()
|
|
.id
|
|
)
|
|
logger.debug("Deleting temporary access tokens with ids lower than: %s", up_to_id)
|
|
|
|
access_tokens_in_builds = RepositoryBuild.select(RepositoryBuild.access_token).distinct()
|
|
|
|
while up_to_id > 0:
|
|
starting_at_id = max(up_to_id - BATCH_SIZE, 0)
|
|
logger.debug("Deleting tokens with ids between %s and %s", starting_at_id, up_to_id)
|
|
start_time = datetime.utcnow()
|
|
(
|
|
AccessToken.delete()
|
|
.where(
|
|
AccessToken.id >= starting_at_id,
|
|
AccessToken.id < up_to_id,
|
|
AccessToken.temporary == True,
|
|
~(AccessToken.id << access_tokens_in_builds),
|
|
)
|
|
.execute()
|
|
)
|
|
|
|
time_to_delete = datetime.utcnow() - start_time
|
|
|
|
up_to_id -= BATCH_SIZE
|
|
|
|
logger.debug("Sleeping for %s seconds", time_to_delete.total_seconds())
|
|
time.sleep(time_to_delete.total_seconds())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
delete_temporary_access_tokens(datetime.utcnow() - timedelta(days=2))
|