Skip to content

Commit bed0225

Browse files
committed
worker: improve storage usage metrics cron job
don't hold the session open whilst calling out to s3
1 parent 01fb637 commit bed0225

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

packages/divbase-api/src/divbase_api/worker/cron_tasks.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from datetime import datetime, timedelta, timezone
88

99
from celery.schedules import crontab
10-
from sqlalchemy import delete, select, text
10+
from sqlalchemy import delete, select, text, update
1111

1212
from divbase_api.models.project_versions import ProjectVersionDB
1313
from divbase_api.models.projects import ProjectDB
@@ -209,19 +209,21 @@ def update_storage_usage_metrics():
209209
"""
210210
s3_file_manager = create_s3_file_manager(url=S3_ENDPOINT_URL)
211211
with SyncSessionLocal() as db:
212-
stmt = select(ProjectDB).where(ProjectDB.is_active == True) # noqa: E712
213-
projects = db.execute(stmt).scalars().all()
212+
stmt = select(ProjectDB.id, ProjectDB.bucket_name).where(ProjectDB.is_active.is_(True))
213+
projects = db.execute(stmt).all()
214214

215-
for project in projects:
216-
storage_used_bytes = s3_file_manager.get_bucket_usage_bytes(bucket_name=project.bucket_name)
217-
project.storage_used_bytes = storage_used_bytes
218-
db.add(project)
215+
project_updates = []
216+
for project_id, bucket_name in projects:
217+
storage_used_bytes = s3_file_manager.get_bucket_usage_bytes(bucket_name=bucket_name)
218+
project_updates.append({"id": project_id, "storage_used_bytes": storage_used_bytes})
219219

220+
with SyncSessionLocal() as db:
221+
db.execute(update(ProjectDB), project_updates)
220222
db.commit()
221223

222224
return {
223225
"status": "completed",
224-
"number_of_projects_updated": len(projects),
226+
"number_of_projects_updated": len(project_updates),
225227
}
226228

227229

0 commit comments

Comments
 (0)