Skip to content

Commit 713ab85

Browse files
committed
periodic task and products
1 parent ae024c9 commit 713ab85

File tree

2 files changed

+38
-30
lines changed

2 files changed

+38
-30
lines changed

services/web/server/src/simcore_service_webserver/garbage_collector/_tasks_trash.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from collections.abc import AsyncIterator, Callable
99

1010
from aiohttp import web
11+
from servicelib.logging_utils import log_context
1112
from tenacity import retry
1213
from tenacity.before_sleep import before_sleep_log
1314
from tenacity.wait import wait_exponential
@@ -28,11 +29,8 @@
2829
before_sleep=before_sleep_log(_logger, logging.WARNING),
2930
)
3031
async def _run_task(app: web.Application):
31-
if deleted := await trash_service.delete_expired_trash_as_admin(app):
32-
for name in deleted:
33-
_logger.info("Trash item %s expired and was deleted", f"{name}")
34-
else:
35-
_logger.info("No trash items expired")
32+
with log_context(_logger, logging.INFO, "Deleting expired trashed items"):
33+
await trash_service.delete_expired_trash_as_admin(app)
3634

3735

3836
async def _run_periodically(app: web.Application, wait_interval_s: float):

services/web/server/src/simcore_service_webserver/trash/_service.py

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from models_library.users import UserID
99
from servicelib.logging_errors import create_troubleshotting_log_kwargs
1010
from servicelib.logging_utils import log_context
11+
from simcore_service_webserver.products import _api as products_service
1112

1213
from ..folders import folders_trash_service
1314
from ..projects import projects_trash_service
@@ -106,34 +107,43 @@ async def empty_trash_safe(
106107
await _empty_explicitly_trashed_folders_and_content(app, product_name, user_id)
107108

108109

109-
async def delete_expired_trash_as_admin(app: web.Application) -> list[str]:
110+
async def delete_expired_trash_as_admin(app: web.Application) -> list:
110111
settings = get_plugin_settings(app)
111-
112-
# app-wide
113112
retention = timedelta(days=settings.TRASH_RETENTION_DAYS)
114113
delete_until = arrow.now().datetime - retention
115114

116-
with log_context(
117-
_logger,
118-
logging.DEBUG,
119-
"CODE PLACEHOLDER: **ALL** items marked as trashed during %s days are deleted (those marked before %s)",
120-
retention,
121-
delete_until,
122-
):
123-
try:
124-
await folders_trash_service.batch_delete_trashed_folders_as_admin(
125-
app, trashed_before=delete_until, product_name="TODO", fail_fast=False
126-
)
127-
except Exception as exc: # pylint: disable=broad-exception-caught
128-
_logger.warning(
129-
**create_troubleshotting_log_kwargs(
130-
"Error deleting a trashed folders (and content) that were expired.",
131-
error=exc,
132-
error_context={
133-
"delete_until": delete_until,
134-
"retention": retention,
135-
},
115+
deleted = [] # TODO: delete count of all items? ids? delete-stats?
116+
for product in products_service.list_products(app):
117+
with log_context(
118+
_logger,
119+
logging.DEBUG,
120+
"Deleting items marked as trashed before %s in %s [retention=%s]",
121+
retention,
122+
product.display_name,
123+
delete_until,
124+
):
125+
try:
126+
127+
await folders_trash_service.batch_delete_trashed_folders_as_admin(
128+
app,
129+
trashed_before=delete_until,
130+
product_name=product.name,
131+
fail_fast=False,
132+
)
133+
134+
except Exception as exc: # pylint: disable=broad-exception-caught
135+
_logger.warning(
136+
**create_troubleshotting_log_kwargs(
137+
"Error batch deleting expired trashed folders as admin.",
138+
error=exc,
139+
error_context={
140+
"delete_until": delete_until,
141+
"retention": retention,
142+
"product_name": product.name,
143+
},
144+
)
136145
)
137-
)
138146

139-
return []
147+
# TODO: batch delete trashed projects here
148+
149+
return deleted

0 commit comments

Comments
 (0)