Skip to content

Commit 6eb93db

Browse files
authored
Merge branch 'master' into add_wbserver_functions_rest
2 parents 6efb10a + 3595349 commit 6eb93db

File tree

27 files changed

+304
-73
lines changed

27 files changed

+304
-73
lines changed

packages/models-library/src/models_library/api_schemas_dynamic_sidecar/containers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ class ActivityInfo(BaseModel):
1616

1717

1818
ActivityInfoOrNone: TypeAlias = ActivityInfo | None
19+
20+
DockerComposeYamlStr: TypeAlias = str
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from models_library.projects_nodes_io import NodeID
2+
from models_library.rabbitmq_basic_types import RPCNamespace
3+
4+
5+
def get_rpc_namespace(node_id: NodeID) -> RPCNamespace:
6+
return RPCNamespace.from_entries({"service": "dy-sidecar", "node_id": f"{node_id}"})
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import logging
2+
3+
from models_library.projects_nodes_io import NodeID
4+
from models_library.rabbitmq_basic_types import RPCMethodName
5+
from pydantic import TypeAdapter
6+
7+
from ....logging_utils import log_decorator
8+
from ... import RabbitMQRPCClient
9+
from ._utils import get_rpc_namespace
10+
11+
_logger = logging.getLogger(__name__)
12+
13+
14+
@log_decorator(_logger, level=logging.DEBUG)
15+
async def free_reserved_disk_space(
16+
rabbitmq_rpc_client: RabbitMQRPCClient,
17+
*,
18+
node_id: NodeID,
19+
) -> None:
20+
rpc_namespace = get_rpc_namespace(node_id)
21+
result = await rabbitmq_rpc_client.request(
22+
rpc_namespace,
23+
TypeAdapter(RPCMethodName).validate_python("free_reserved_disk_space"),
24+
)
25+
assert result is None # nosec
Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
import logging
2-
from typing import Final
32

43
from models_library.api_schemas_dynamic_sidecar.telemetry import DiskUsage
54
from models_library.projects_nodes_io import NodeID
6-
from models_library.rabbitmq_basic_types import RPCMethodName, RPCNamespace
5+
from models_library.rabbitmq_basic_types import RPCMethodName
76
from pydantic import TypeAdapter
87

98
from ....logging_utils import log_decorator
109
from ... import RabbitMQRPCClient
10+
from ._utils import get_rpc_namespace
1111

1212
_logger = logging.getLogger(__name__)
1313

14-
_UPDATE_DISK_USAGE: Final[RPCMethodName] = TypeAdapter(RPCMethodName).validate_python(
15-
"update_disk_usage"
16-
)
17-
1814

1915
@log_decorator(_logger, level=logging.DEBUG)
2016
async def update_disk_usage(
@@ -23,12 +19,10 @@ async def update_disk_usage(
2319
node_id: NodeID,
2420
usage: dict[str, DiskUsage],
2521
) -> None:
26-
rpc_namespace = RPCNamespace.from_entries(
27-
{"service": "dy-sidecar", "node_id": f"{node_id}"}
28-
)
22+
rpc_namespace = get_rpc_namespace(node_id)
2923
result = await rabbitmq_rpc_client.request(
3024
rpc_namespace,
31-
_UPDATE_DISK_USAGE,
25+
TypeAdapter(RPCMethodName).validate_python("update_disk_usage"),
3226
usage=usage,
3327
)
3428
assert result is None # nosec
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import logging
2+
3+
from models_library.projects_nodes_io import NodeID
4+
from models_library.rabbitmq_basic_types import RPCMethodName
5+
from models_library.sidecar_volumes import VolumeCategory, VolumeStatus
6+
from pydantic import TypeAdapter
7+
8+
from ....logging_utils import log_decorator
9+
from ... import RabbitMQRPCClient
10+
from ._utils import get_rpc_namespace
11+
12+
_logger = logging.getLogger(__name__)
13+
14+
15+
@log_decorator(_logger, level=logging.DEBUG)
16+
async def save_volume_state(
17+
rabbitmq_rpc_client: RabbitMQRPCClient,
18+
*,
19+
node_id: NodeID,
20+
status: VolumeStatus,
21+
category: VolumeCategory,
22+
) -> None:
23+
rpc_namespace = get_rpc_namespace(node_id)
24+
result = await rabbitmq_rpc_client.request(
25+
rpc_namespace,
26+
TypeAdapter(RPCMethodName).validate_python("save_volume_state"),
27+
status=status,
28+
category=category,
29+
)
30+
assert result is None # nosec

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/api/rest/containers.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
from ...core.settings import ApplicationSettings
2525
from ...core.validation import (
2626
ComposeSpecValidation,
27+
get_and_validate_compose_spec,
2728
parse_compose_spec,
28-
validate_compose_spec,
2929
)
3030
from ...models.schemas.containers import ContainersComposeSpec
3131
from ...models.shared_store import SharedStore
@@ -76,10 +76,12 @@ async def store_compose_spec(
7676
_ = request
7777

7878
async with shared_store:
79-
compose_spec_validation: ComposeSpecValidation = await validate_compose_spec(
80-
settings=settings,
81-
compose_file_content=containers_compose_spec.docker_compose_yaml,
82-
mounted_volumes=mounted_volumes,
79+
compose_spec_validation: ComposeSpecValidation = (
80+
await get_and_validate_compose_spec(
81+
settings=settings,
82+
compose_file_content=containers_compose_spec.docker_compose_yaml,
83+
mounted_volumes=mounted_volumes,
84+
)
8385
)
8486
shared_store.compose_spec = compose_spec_validation.compose_spec
8587
shared_store.container_names = compose_spec_validation.current_container_names

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/api/rest/disk.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from fastapi import APIRouter, status
22

3-
from ...core.reserved_space import remove_reserved_disk_space
3+
from ...services import disk
44

55
router = APIRouter()
66

@@ -11,4 +11,4 @@
1111
status_code=status.HTTP_204_NO_CONTENT,
1212
)
1313
async def free_reserved_disk_space() -> None:
14-
remove_reserved_disk_space()
14+
disk.remove_reserved_disk_space()
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
from fastapi import APIRouter, Depends
1+
from typing import Annotated
2+
3+
from fastapi import APIRouter, Depends, FastAPI
24
from fastapi import Path as PathParam
35
from fastapi import status
4-
from models_library.sidecar_volumes import VolumeCategory, VolumeState, VolumeStatus
6+
from models_library.sidecar_volumes import VolumeCategory, VolumeStatus
57
from pydantic import BaseModel
68

7-
from ...models.shared_store import SharedStore
8-
from ._dependencies import get_shared_store
9+
from ...services import volumes
10+
from ._dependencies import get_application
911

1012
router = APIRouter()
1113

@@ -21,8 +23,7 @@ class PutVolumeItem(BaseModel):
2123
)
2224
async def put_volume_state(
2325
item: PutVolumeItem,
24-
volume_category: VolumeCategory = PathParam(..., alias="id"),
25-
shared_store: SharedStore = Depends(get_shared_store),
26+
app: Annotated[FastAPI, Depends(get_application)],
27+
volume_category: Annotated[VolumeCategory, PathParam(..., alias="id")],
2628
) -> None:
27-
async with shared_store:
28-
shared_store.volume_states[volume_category] = VolumeState(status=item.status)
29+
await volumes.save_volume_state(app, status=item.status, category=volume_category)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from fastapi import FastAPI
2+
from servicelib.rabbitmq import RPCRouter
3+
4+
from ...services import disk
5+
6+
router = RPCRouter()
7+
8+
9+
@router.expose()
10+
async def free_reserved_disk_space(_: FastAPI) -> None:
11+
disk.remove_reserved_disk_space()

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/api/rpc/_disk_usage.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from fastapi import FastAPI
22
from models_library.api_schemas_dynamic_sidecar.telemetry import DiskUsage
3+
from pydantic import validate_call
34
from servicelib.rabbitmq import RPCRouter
45

56
from ...modules.system_monitor import get_disk_usage_monitor
@@ -8,5 +9,6 @@
89

910

1011
@router.expose()
12+
@validate_call(config={"arbitrary_types_allowed": True})
1113
async def update_disk_usage(app: FastAPI, *, usage: dict[str, DiskUsage]) -> None:
1214
get_disk_usage_monitor(app).set_disk_usage_for_path(usage)

0 commit comments

Comments
 (0)