Skip to content

Commit 88dc316

Browse files
partial work
1 parent 24636ee commit 88dc316

File tree

5 files changed

+68
-5
lines changed

5 files changed

+68
-5
lines changed

packages/models-library/src/models_library/rabbitmq_messages.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ class RabbitResourceTrackingProjectSyncMessage(RabbitMessageBase):
199199
default="io.simcore.service.tracking-project-sync", const=True
200200
)
201201

202-
project_id: ProjectID
202+
project_id: ProjectID | None = None
203203
project_name: str | None = None
204204
project_tags: list[tuple[int, str]] | None = None
205205
created_at: datetime.datetime = Field(
@@ -210,6 +210,8 @@ class RabbitResourceTrackingProjectSyncMessage(RabbitMessageBase):
210210
def routing_key(self) -> str | None:
211211
return None
212212

213+
# MD: Add validation ...
214+
213215

214216
class DynamicServiceRunningMessage(RabbitMessageBase):
215217
channel_name: Literal["io.simcore.service.dynamic-service-running"] = Field(

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/services/modules/db/repositories/resource_tracker.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,9 @@ async def export_service_runs_table_to_s3(
476476
resource_tracker_service_runs.c.service_run_id,
477477
resource_tracker_service_runs.c.wallet_name,
478478
resource_tracker_service_runs.c.user_email,
479-
resource_tracker_service_runs.c.project_name,
479+
resource_tracker_service_runs.c.root_parent_project_name.label(
480+
"project_name"
481+
),
480482
resource_tracker_service_runs.c.node_name,
481483
resource_tracker_service_runs.c.service_key,
482484
resource_tracker_service_runs.c.service_version,
@@ -485,13 +487,19 @@ async def export_service_runs_table_to_s3(
485487
resource_tracker_service_runs.c.stopped_at,
486488
resource_tracker_credit_transactions.c.osparc_credits,
487489
resource_tracker_credit_transactions.c.transaction_status,
490+
resource_tracker_project_metadata.c.project_tags,
488491
)
489492
.select_from(
490493
resource_tracker_service_runs.join(
491494
resource_tracker_credit_transactions,
492495
resource_tracker_service_runs.c.service_run_id
493496
== resource_tracker_credit_transactions.c.service_run_id,
494497
isouter=True,
498+
).join(
499+
resource_tracker_project_metadata,
500+
resource_tracker_service_runs.c.project_id
501+
== resource_tracker_project_metadata.c.project_id,
502+
isouter=True,
495503
)
496504
)
497505
.where(resource_tracker_service_runs.c.product_name == product_name)

services/web/server/src/simcore_service_webserver/projects/_tags_api.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66

77
from aiohttp import web
88
from models_library.projects import ProjectID
9+
from models_library.rabbitmq_messages import RabbitResourceTrackingProjectSyncMessage
910
from models_library.users import UserID
1011
from models_library.workspaces import UserWorkspaceAccessRightsDB
12+
from servicelib.aiohttp.db_asyncpg_engine import get_async_engine
13+
from simcore_postgres_database.utils_tags import TagsRepo
14+
from simcore_service_webserver.rabbitmq import get_rabbitmq_client
15+
from sqlalchemy.ext.asyncio import AsyncEngine
1116

1217
from ..workspaces import _workspaces_db as workspaces_db
1318
from ._access_rights_api import check_user_project_permission
@@ -28,13 +33,29 @@ async def add_tag(
2833
project_id=project_uuid,
2934
user_id=user_id,
3035
product_name=product_name,
31-
permission="write", # NOTE: before there was only read access necessary
36+
permission="write",
3237
)
3338

3439
project: ProjectDict = await db.add_tag(
3540
project_uuid=f"{project_uuid}", user_id=user_id, tag_id=int(tag_id)
3641
)
3742

43+
# Inform RUT about tag change
44+
engine: AsyncEngine = get_async_engine(app)
45+
tags_repo = TagsRepo(engine)
46+
project_tags = await tags_repo.list_tag_ids_and_names_by_project_uuid(
47+
project_uuid=project_uuid
48+
)
49+
50+
rabbit_client = get_rabbitmq_client(app)
51+
await rabbit_client.publish(
52+
RabbitResourceTrackingProjectSyncMessage.channel_name,
53+
RabbitResourceTrackingProjectSyncMessage(
54+
project_id=project_uuid, project_tags=project_tags
55+
),
56+
)
57+
58+
# Override project access rights
3859
if project["workspaceId"] is not None:
3960
workspace_db: UserWorkspaceAccessRightsDB = (
4061
await workspaces_db.get_workspace_for_user(
@@ -62,7 +83,7 @@ async def remove_tag(
6283
project_id=project_uuid,
6384
user_id=user_id,
6485
product_name=product_name,
65-
permission="write", # NOTE: before there was only read access necessary
86+
permission="write",
6687
)
6788

6889
project: ProjectDict = await db.remove_tag(

services/web/server/src/simcore_service_webserver/projects/db.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,7 @@ async def list_projects_uuids(self, user_id: int) -> list[str]:
645645
)
646646
]
647647

648+
# NOTE: MD: Do not use this function anymore.
648649
async def get_project(
649650
self,
650651
project_uuid: str,
@@ -780,6 +781,7 @@ async def get_pure_project_access_rights_without_workspace(
780781
)
781782
return UserProjectAccessRightsDB.from_orm(row)
782783

784+
# NOTE: MD: Do not use this function anymore (currently used only in some unit tests)
783785
async def replace_project(
784786
self,
785787
new_project_data: ProjectDict,

services/web/server/src/simcore_service_webserver/tags/_api.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
from aiohttp import web
55
from models_library.basic_types import IdInt
6+
from models_library.projects import ProjectID
7+
from models_library.rabbitmq_messages import RabbitResourceTrackingProjectSyncMessage
68
from models_library.users import UserID
79
from servicelib.aiohttp.db_asyncpg_engine import get_async_engine
810
from simcore_postgres_database.utils_tags import TagsRepo
@@ -11,6 +13,24 @@
1113
from .schemas import TagCreate, TagGet, TagUpdate
1214

1315

16+
async def inform_rut_about_tag_change(tags_repo: TagsRepo, rabbit_client, project_id: ProjectID | None, ):
17+
# Inform RUT about tag change
18+
19+
20+
if project_id:
21+
project_tags = await tags_repo.list_tag_ids_and_names_by_project_uuid(
22+
project_uuid=project_id
23+
)
24+
25+
26+
await rabbit_client.publish(
27+
RabbitResourceTrackingProjectSyncMessage.channel_name,
28+
RabbitResourceTrackingProjectSyncMessage(
29+
project_tags=project_tags
30+
),
31+
)
32+
33+
1434
async def create_tag(
1535
app: web.Application, user_id: UserID, new_tag: TagCreate
1636
) -> TagGet:
@@ -43,16 +63,26 @@ async def update_tag(
4363
engine: AsyncEngine = get_async_engine(app)
4464

4565
repo = TagsRepo(engine)
66+
_tags_updates_exclude_unset = tag_updates.dict(exclude_unset=True)
4667
tag = await repo.update(
4768
user_id=user_id,
4869
tag_id=tag_id,
49-
**tag_updates.dict(exclude_unset=True),
70+
**_tags_updates_exclude_unset,
5071
)
72+
73+
# If tag_updates name
74+
if _tags_updates_exclude_unset.get("name") is not None:
75+
await inform_rut_about_tag_change(tags_repo=repo, rabbit_client=)
76+
5177
return TagGet.from_db(tag)
5278

5379

5480
async def delete_tag(app: web.Application, user_id: UserID, tag_id: IdInt):
5581
engine: AsyncEngine = get_async_engine(app)
5682

5783
repo = TagsRepo(engine)
84+
85+
# Sync with RUT
86+
# NOTE: Careful this will delete all the tags also historitically in the RUT
87+
5888
await repo.delete(user_id=user_id, tag_id=tag_id)

0 commit comments

Comments
 (0)