Skip to content

Commit de914c8

Browse files
rokroskarolevski
andauthored
feat: add metrics for copied and migrated projects (#897)
Co-authored-by: Tasko Olevski <olevski90@gmail.com>
1 parent 7f000bf commit de914c8

4 files changed

Lines changed: 21 additions & 6 deletions

File tree

components/renku_data_services/base_models/metrics.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ async def session_launcher_created(
5454
"""Send session launcher created event to metrics."""
5555
...
5656

57-
async def project_created(self, user: APIUser) -> None:
57+
async def project_created(self, user: APIUser, metadata: MetricsMetadata) -> None:
5858
"""Send project created event to metrics."""
5959
...
6060

@@ -93,3 +93,11 @@ async def user_requested_session_launch(self, user: APIUser, metadata: MetricsMe
9393
async def user_requested_session_resume(self, user: APIUser, metadata: MetricsMetadata) -> None:
9494
"""Send event about user requesting session resume."""
9595
...
96+
97+
98+
class ProjectCreationType(StrEnum):
99+
"""The different types of project creation metrics."""
100+
101+
new = "new"
102+
migrated = "migrated"
103+
copied = "copied"

components/renku_data_services/metrics/core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ async def session_launcher_created(
5353
{"environment_kind": environment_kind, "environment_image_source": environment_image_source},
5454
)
5555

56-
async def project_created(self, user: APIUser) -> None:
56+
async def project_created(self, user: APIUser, metadata: MetricsMetadata) -> None:
5757
"""Store project created event in staging table."""
58-
await self._store_event(MetricsEvent.project_created, user)
58+
await self._store_event(MetricsEvent.project_created, user, metadata)
5959

6060
async def code_repo_linked_to_project(self, user: APIUser) -> None:
6161
"""Store code repo linked to project event in staging table."""

components/renku_data_services/project/blueprints.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from renku_data_services.base_api.misc import validate_body_root_model, validate_query
2121
from renku_data_services.base_api.pagination import PaginationRequest, paginate
2222
from renku_data_services.base_models.core import Slug
23-
from renku_data_services.base_models.metrics import MetricsService
23+
from renku_data_services.base_models.metrics import MetricsService, ProjectCreationType
2424
from renku_data_services.base_models.validation import validate_and_dump, validated_json
2525
from renku_data_services.data_connectors.db import DataConnectorRepository
2626
from renku_data_services.errors import errors
@@ -82,7 +82,7 @@ def post(self) -> BlueprintFactoryResponse:
8282
async def _post(_: Request, user: base_models.APIUser, body: apispec.ProjectPost) -> JSONResponse:
8383
new_project = validate_unsaved_project(body, created_by=user.id or "")
8484
result = await self.project_repo.insert_project(user, new_project)
85-
await self.metrics.project_created(user)
85+
await self.metrics.project_created(user, metadata={"project_creation_kind": ProjectCreationType.new.value})
8686
if len(result.repositories) > 0:
8787
await self.metrics.code_repo_linked_to_project(user)
8888
return validated_json(apispec.Project, self._dump_project(result), status=201)
@@ -131,6 +131,9 @@ async def _post_migration(
131131
result = await self.project_migration_repo.migrate_v1_project(
132132
user, project=new_project, project_v1_id=v1_id, session_launcher=body.session_launcher
133133
)
134+
await self.metrics.project_created(
135+
user, metadata={"project_creation_kind": ProjectCreationType.migrated.value}
136+
)
134137
return validated_json(apispec.Project, self._dump_project(result), status=201)
135138

136139
return "/renku_v1_projects/<v1_id:int>/migrations", ["POST"], _post_migration
@@ -181,6 +184,9 @@ async def _copy(
181184
session_repo=self.session_repo,
182185
data_connector_repo=self.data_connector_repo,
183186
)
187+
await self.metrics.project_created(
188+
user, metadata={"project_creation_kind": ProjectCreationType.copied.value}
189+
)
184190
return validated_json(apispec.Project, self._dump_project(project), status=201)
185191

186192
return "/projects/<project_id:ulid>/copies", ["POST"], _copy

test/bases/renku_data_services/data_api/test_metrics.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import pytest_asyncio
88
from sanic_testing.testing import SanicASGITestClient
99

10+
from renku_data_services.base_models.metrics import ProjectCreationType
1011
from renku_data_services.metrics.core import StagingMetricsService
1112

1213

@@ -40,7 +41,7 @@ async def test_metrics_are_stored(sanic_metrics_client, app_manager, create_proj
4041
project_created = events[0]
4142
assert re.match(r"^[0-7][0-9A-HJKMNP-TV-Z]{25}$", str(project_created.id))
4243
assert project_created.event == "project_created"
43-
assert project_created.metadata_ is None
44+
assert project_created.metadata_ == {"project_creation_kind": ProjectCreationType.new.value}
4445

4546
session_launcher_created = events[1]
4647
assert re.match(r"^[0-7][0-9A-HJKMNP-TV-Z]{25}$", str(session_launcher_created.id))

0 commit comments

Comments
 (0)