This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/util/migrate/delete_access_tokens.py

49 lines
1.4 KiB
Python
Raw Permalink Normal View History

2019-11-12 16:09:47 +00:00
import logging
import time
from datetime import datetime, timedelta
from data.database import RepositoryBuild, AccessToken
from app import app
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))