Skip to content

Commit da7ba29

Browse files
♻️ start jobs via webserver (#4926)
1 parent 0e1da26 commit da7ba29

File tree

14 files changed

+529
-141
lines changed

14 files changed

+529
-141
lines changed

api/specs/web-server/_computations.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from fastapi import APIRouter, status
2+
from models_library.api_schemas_webserver.computations import ComputationStart
23
from models_library.generics import Envelope
34
from models_library.projects import ProjectID
45
from simcore_service_webserver._meta import API_VTAG
56
from simcore_service_webserver.director_v2._handlers import (
67
ComputationTaskGet,
7-
_ComputationStart,
88
_ComputationStarted,
99
)
1010

@@ -29,7 +29,7 @@ async def get_computation(project_id: ProjectID):
2929
"/computations/{project_id}:start",
3030
response_model=Envelope[_ComputationStarted],
3131
)
32-
async def start_computation(project_id: ProjectID, _start: _ComputationStart):
32+
async def start_computation(project_id: ProjectID, _start: ComputationStart):
3333
...
3434

3535

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from models_library.clusters import ClusterID
2+
from pydantic import BaseModel
3+
4+
5+
class ComputationStart(BaseModel):
6+
force_restart: bool = False
7+
cluster_id: ClusterID = 0
8+
subgraph: set[str] = set()
9+
10+
11+
__all__: tuple[str, ...] = ("ComputationStart",)

services/api-server/src/simcore_service_api_server/api/routes/files.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ async def search_files_page(
325325
stored_files = stored_files[: page_params.limit]
326326
return create_page(
327327
[to_file_api_model(fmd) for fmd in stored_files],
328-
total=len(stored_files),
329-
params=page_params,
328+
len(stored_files),
329+
page_params,
330330
)
331331

332332
except (ValueError, ValidationError) as err:

services/api-server/src/simcore_service_api_server/api/routes/solvers_jobs.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from pydantic.types import PositiveInt
1313
from servicelib.logging_utils import log_context
1414

15-
from ...db.repositories.groups_extra_properties import GroupsExtraPropertiesRepository
1615
from ...models.basic_types import VersionStr
1716
from ...models.schemas.errors import ErrorGet
1817
from ...models.schemas.jobs import (
@@ -35,7 +34,6 @@
3534
from ...services.webserver import ProjectNotFoundError
3635
from ..dependencies.application import get_product_name, get_reverse_url_mapper
3736
from ..dependencies.authentication import get_current_user_id
38-
from ..dependencies.database import get_repository
3937
from ..dependencies.services import get_api_client
4038
from ..dependencies.webserver import AuthSession, get_webserver_session
4139
from ..errors.http_error import create_error_json_response
@@ -172,11 +170,6 @@ async def start_job(
172170
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
173171
director2_api: Annotated[DirectorV2Api, Depends(get_api_client(DirectorV2Api))],
174172
webserver_api: Annotated[AuthSession, Depends(get_webserver_session)],
175-
product_name: Annotated[str, Depends(get_product_name)],
176-
groups_extra_properties_repository: Annotated[
177-
GroupsExtraPropertiesRepository,
178-
Depends(get_repository(GroupsExtraPropertiesRepository)),
179-
],
180173
cluster_id: ClusterID | None = None,
181174
):
182175
"""Starts job job_id created with the solver solver_key:version
@@ -201,15 +194,14 @@ async def start_job(
201194
)
202195

203196
with log_context(_logger, logging.DEBUG, "Starting job"):
204-
task = await director2_api.start_computation(
205-
project_id=job_id,
197+
await webserver_api.start_project(project_id=job_id, cluster_id=cluster_id)
198+
return await inspect_job(
199+
solver_key=solver_key,
200+
version=version,
201+
job_id=job_id,
206202
user_id=user_id,
207-
product_name=product_name,
208-
cluster_id=cluster_id,
209-
groups_extra_properties_repository=groups_extra_properties_repository,
203+
director2_api=director2_api,
210204
)
211-
job_status: JobStatus = create_jobstatus_from_task(task)
212-
return job_status
213205

214206

215207
@router.post(

services/api-server/src/simcore_service_api_server/api/routes/solvers_jobs_getters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ async def get_jobs_page(
126126

127127
return create_page(
128128
jobs,
129-
total=projects_page.meta.total,
130-
params=page_params,
129+
projects_page.meta.total,
130+
page_params,
131131
)
132132

133133

services/api-server/src/simcore_service_api_server/api/routes/studies.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ async def list_studies(
5757

5858
return create_page(
5959
studies,
60-
total=projects_page.meta.total,
61-
params=page_params,
60+
projects_page.meta.total,
61+
page_params,
6262
)
6363

6464

services/api-server/src/simcore_service_api_server/services/webserver.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from cryptography import fernet
1111
from fastapi import FastAPI, HTTPException
1212
from httpx import Response
13+
from models_library.api_schemas_webserver.computations import ComputationStart
1314
from models_library.api_schemas_webserver.projects import ProjectCreateNew, ProjectGet
1415
from models_library.api_schemas_webserver.projects_metadata import (
1516
ProjectMetadataGet,
@@ -23,6 +24,7 @@
2324
WalletGet,
2425
WalletGetWithAvailableCredits,
2526
)
27+
from models_library.clusters import ClusterID
2628
from models_library.generics import Envelope
2729
from models_library.projects import ProjectID
2830
from models_library.rest_pagination import Page
@@ -409,6 +411,21 @@ async def connect_pricing_unit_to_project_node(
409411
)
410412
response.raise_for_status()
411413

414+
async def start_project(
415+
self, project_id: UUID, cluster_id: ClusterID | None = None
416+
) -> None:
417+
with _handle_webserver_api_errors():
418+
body_input: dict[str, Any] = {}
419+
if cluster_id:
420+
body_input["cluster_id"] = cluster_id
421+
body: ComputationStart = ComputationStart(**body_input)
422+
response = await self.client.post(
423+
f"/computations/{project_id}:start",
424+
cookies=self.session_cookies,
425+
json=jsonable_encoder(body, exclude_unset=True, exclude_defaults=True),
426+
)
427+
response.raise_for_status()
428+
412429
# WALLETS -------------------------------------------------
413430

414431
async def get_wallet(self, wallet_id: int) -> WalletGetWithAvailableCredits:
Lines changed: 75 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,99 @@
11
[
22
{
3-
"name": "POST /v2/computations",
4-
"description": "<Request('POST', 'http://director-v2:8000/v2/computations')>",
3+
"name": "POST /computations/48323c7f-e379-4e16-8b58-dc69643f653d:start",
4+
"description": "<Request('POST', 'http://webserver:8080/v0/computations/48323c7f-e379-4e16-8b58-dc69643f653d:start')>",
55
"method": "POST",
6-
"host": "director-v2",
6+
"host": "webserver",
77
"path": {
8-
"path": "/v2/computations",
9-
"path_parameters": []
8+
"path": "/v0/computations/{project_id}:start",
9+
"path_parameters": [
10+
{
11+
"in": "path",
12+
"name": "project_id",
13+
"required": true,
14+
"schema": {
15+
"title": "Project Id",
16+
"type": "str",
17+
"pattern": null,
18+
"format": "uuid",
19+
"exclusiveMinimum": null,
20+
"minimum": null,
21+
"anyOf": null,
22+
"allOf": null,
23+
"oneOf": null
24+
},
25+
"response_value": "computations"
26+
}
27+
]
1028
},
1129
"query": null,
1230
"request_payload": {
13-
"user_id": 1,
14-
"project_id": "6e52228c-6edd-4505-9131-e901fdad5b17",
15-
"start_pipeline": true,
16-
"product_name": "osparc",
17-
"use_on_demand_clusters": false
31+
"force_restart": false,
32+
"cluster_id": 0,
33+
"subgraph": []
34+
},
35+
"response_body": {
36+
"data": {
37+
"pipeline_id": "48323c7f-e379-4e16-8b58-dc69643f653d"
38+
}
39+
},
40+
"status_code": 201
41+
},
42+
{
43+
"name": "GET /v2/computations/48323c7f-e379-4e16-8b58-dc69643f653d",
44+
"description": "<Request('GET', 'http://director-v2:8000/v2/computations/48323c7f-e379-4e16-8b58-dc69643f653d?user_id=1')>",
45+
"method": "GET",
46+
"host": "director-v2",
47+
"path": {
48+
"path": "/v2/computations/{project_id}",
49+
"path_parameters": [
50+
{
51+
"in": "path",
52+
"name": "project_id",
53+
"required": true,
54+
"schema": {
55+
"title": "Project Id",
56+
"type": "str",
57+
"pattern": null,
58+
"format": "uuid",
59+
"exclusiveMinimum": null,
60+
"minimum": null,
61+
"anyOf": null,
62+
"allOf": null,
63+
"oneOf": null
64+
},
65+
"response_value": "computations"
66+
}
67+
]
1868
},
69+
"query": "user_id=1",
70+
"request_payload": null,
1971
"response_body": {
20-
"id": "6e52228c-6edd-4505-9131-e901fdad5b17",
21-
"state": "PUBLISHED",
72+
"id": "48323c7f-e379-4e16-8b58-dc69643f653d",
73+
"state": "STARTED",
2274
"result": null,
2375
"pipeline_details": {
2476
"adjacency_list": {
25-
"97792753-cbda-56a7-b8c0-576f990b21c0": []
77+
"3b0b20e0-c860-51d9-9f82-d6b4bc5c2f24": []
2678
},
2779
"progress": 0.0,
2880
"node_states": {
29-
"97792753-cbda-56a7-b8c0-576f990b21c0": {
81+
"3b0b20e0-c860-51d9-9f82-d6b4bc5c2f24": {
3082
"modified": true,
3183
"dependencies": [],
32-
"currentStatus": "PUBLISHED",
33-
"progress": null
84+
"currentStatus": "STARTED",
85+
"progress": 0.0
3486
}
3587
}
3688
},
37-
"iteration": 9,
89+
"iteration": 1,
3890
"cluster_id": 0,
39-
"started": null,
40-
"stopped": "2023-10-19T12:59:28.719336+00:00",
41-
"submitted": "2023-10-19T12:59:50.999473+00:00",
42-
"url": "http://director-v2:8000/v2/computations/6e52228c-6edd-4505-9131-e901fdad5b17?user_id=1",
43-
"stop_url": "http://director-v2:8000/v2/computations/6e52228c-6edd-4505-9131-e901fdad5b17:stop?user_id=1"
91+
"started": "2023-10-26T14:19:05.389765+00:00",
92+
"stopped": null,
93+
"submitted": "2023-10-26T14:19:05.241935+00:00",
94+
"url": "http://director-v2:8000/v2/computations/48323c7f-e379-4e16-8b58-dc69643f653d?user_id=1",
95+
"stop_url": "http://director-v2:8000/v2/computations/48323c7f-e379-4e16-8b58-dc69643f653d:stop?user_id=1"
4496
},
45-
"status_code": 201
97+
"status_code": 200
4698
}
4799
]

0 commit comments

Comments
 (0)