Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions app/demo_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ def _init_state(self):
current_status=status_models.Status.degraded,
last_modified=day_ago,
resource_type=status_models.ResourceType.compute,
supported_endpoints=[status_models.Endpoint.compute],
)

hpss = status_models.Resource(
Expand All @@ -192,6 +193,7 @@ def _init_state(self):
current_status=status_models.Status.up,
last_modified=day_ago,
resource_type=status_models.ResourceType.storage,
supported_endpoints=[status_models.Endpoint.filesystem],
)

cfs = status_models.Resource(
Expand All @@ -204,6 +206,7 @@ def _init_state(self):
current_status=status_models.Status.up,
last_modified=day_ago,
resource_type=status_models.ResourceType.storage,
supported_endpoints=[status_models.Endpoint.filesystem],
)

login = status_models.Resource(
Expand Down Expand Up @@ -413,6 +416,9 @@ async def get_resources(
async def get_resource(self: "DemoAdapter", id_: str) -> status_models.Resource:
return status_models.Resource.find_by_id(self.resources, id_)

async def get_resources_for_endpoint(self: "DemoAdapter", endpoint: status_models.Endpoint) -> list[status_models.Resource]:
return [r for r in self.resources if endpoint in r.supported_endpoints]

async def get_events(
self: "DemoAdapter",
offset: int,
Expand Down
18 changes: 17 additions & 1 deletion app/routers/compute/compute.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from .. import iri_router
from ..error_handlers import DEFAULT_RESPONSES
from ..iri_meta import iri_meta_dict
from ..status.status import router as status_router
from ..status.status import router as status_router, models as status_models
from . import facility_adapter, models

router = iri_router.IriRouter(
Expand All @@ -18,6 +18,22 @@
)


@router.get(
"/resources",
response_model=list[status_models.Resource],
response_model_exclude_unset=True,
responses=DEFAULT_RESPONSES,
operation_id="getComputeResources",
openapi_extra=iri_meta_dict("planned"),
)
async def get_resources(
request: Request,
_forbid=Depends(forbidExtraQueryParams()),
):
"""Get a list of resources that can be used in this endpoint"""
return await status_router.adapter.get_resources_for_endpoint(status_models.Endpoint.compute)


@router.post(
"/job/{resource_id:str}",
response_model=models.Job,
Expand Down
19 changes: 18 additions & 1 deletion app/routers/filesystem/filesystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import base64
from typing import Annotated
from fastapi import Depends, HTTPException, status, Query, Request, File, UploadFile
from ...types.http import forbidExtraQueryParams
from ...types.user import User
from .. import iri_router
from ..error_handlers import DEFAULT_RESPONSES
Expand All @@ -24,6 +25,22 @@
)


@router.get(
"/resources",
response_model=list[status_models.Resource],
response_model_exclude_unset=True,
responses=DEFAULT_RESPONSES,
operation_id="getFilesystemResources",
openapi_extra=iri_meta_dict("planned"),
)
async def get_resources(
request: Request,
_forbid=Depends(forbidExtraQueryParams()),
):
"""Get a list of resources that can be used in this endpoint"""
return await status_router.adapter.get_resources_for_endpoint(status_models.Endpoint.filesystem)


async def _user_resource(
resource_id: str,
user: User,
Expand Down Expand Up @@ -250,7 +267,7 @@ async def get_ls_async(
user=user,
resource=resource,
task=task_models.TaskCommand(
router=router.get_router_name(),
router=router.get_router_name(),
command="ls",
args={"path": path, "show_hidden": show_hidden, "numeric_uid": numeric_uid, "recursive": recursive, "dereference": dereference}
),
Expand Down
8 changes: 6 additions & 2 deletions app/routers/status/facility_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@ async def get_resources(
description: str | None = None,
group: str | None = None,
modified_since: datetime.datetime | None = None,
resource_type: status_models.ResourceType|None = None,
current_status: status_models.Status|None = None,
resource_type: status_models.ResourceType | None = None,
current_status: status_models.Status | None = None,
capability: Capability | None = None,
site_id: str | None = None,
) -> list[status_models.Resource]:
pass

@abstractmethod
async def get_resources_for_endpoint(self: "FacilityAdapter", endpoint: status_models.Endpoint) -> list[status_models.Resource]:
pass

@abstractmethod
async def get_resource(self: "FacilityAdapter", id_: str) -> status_models.Resource:
pass
Expand Down
6 changes: 6 additions & 0 deletions app/routers/status/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ class ResourceType(enum.Enum):
unknown = "unknown"


class Endpoint(enum.Enum):
compute = "compute"
filesystem = "filesystem"


class Resource(NamedObject):
"""Represents a resource in the system."""
def _self_path(self) -> str:
Expand All @@ -38,6 +43,7 @@ def _self_path(self) -> str:
group: str|None = Field(default=None, description="Logical grouping of the resource", example="frontend")
current_status: Status|None = Field(default=None, description="The current status comes from the status of the last event for this resource", example="up")
resource_type: ResourceType = Field(..., description="Type of the resource", example="service")
supported_endpoints: list[Endpoint] = Field(default_factory=list, description="a list of endpoints where this resource can be used")

@computed_field(description="URI of the site where this resource is located")
@property
Expand Down
Loading