diff --git a/react/data/schema.graphql b/react/data/schema.graphql index cfdf9a29ea..ef6082a94b 100644 --- a/react/data/schema.graphql +++ b/react/data/schema.graphql @@ -170,7 +170,9 @@ type Queries { """Added in 24.09.0.""" compute_session_nodes( - """Added in 24.12.0.""" + """ + Added in 24.12.0. Default value `system` queries across the entire system. + """ scope_id: ScopeField """Added in 24.09.0.""" @@ -606,6 +608,14 @@ type KernelNode implements Node { cluster_hostname: String session_id: UUID image: ImageNode + + """Added in 24.12.0.""" + image_reference: String + + """ + Added in 24.12.0. The architecture that the image of this kernel requires + """ + architecture: String status: String status_changed: DateTime status_info: String @@ -1221,6 +1231,12 @@ type ComputeSessionNode implements Node { vfolder_mounts: [String] occupied_slots: JSONString requested_slots: JSONString + + """Added in 24.12.0.""" + image_references: [String] + + """Added in 24.12.0.""" + vfolder_nodes(filter: String, order: String, offset: Int, before: String, after: String, first: Int, last: Int): VirtualFolderConnection num_queries: BigInt inference_metrics: JSONString kernel_nodes(filter: String, order: String, offset: Int, before: String, after: String, first: Int, last: Int): KernelConnection @@ -1471,6 +1487,7 @@ type QuotaDetails { hard_limit_bytes: BigInt } +"""Deprecated since 24.09.0. use `ContainerRegistryNode` instead""" type ContainerRegistry implements Node { """The ID of the object""" id: ID! @@ -1478,6 +1495,7 @@ type ContainerRegistry implements Node { config: ContainerRegistryConfig } +"""Deprecated since 24.09.0.""" type ContainerRegistryConfig { url: String! type: String! @@ -1848,8 +1866,14 @@ type Mutations { """Object id. Can be either global id or object id. Added in 24.09.0.""" id: String! ): DeleteContainerRegistryNode + + """Deprecated since 24.09.0. use `CreateContainerRegistryNode` instead""" create_container_registry(hostname: String!, props: CreateContainerRegistryInput!): CreateContainerRegistry + + """Deprecated since 24.09.0. use `ModifyContainerRegistryNode` instead""" modify_container_registry(hostname: String!, props: ModifyContainerRegistryInput!): ModifyContainerRegistry + + """Deprecated since 24.09.0. use `DeleteContainerRegistryNode` instead""" delete_container_registry(hostname: String!): DeleteContainerRegistry modify_endpoint(endpoint_id: UUID!, props: ModifyEndpointInput!): ModifyEndpoint @@ -2581,10 +2605,12 @@ type DeleteContainerRegistryNode { container_registry: ContainerRegistryNode } +"""Deprecated since 24.09.0. use `CreateContainerRegistryNode` instead""" type CreateContainerRegistry { container_registry: ContainerRegistry } +"""Deprecated since 24.09.0.""" input CreateContainerRegistryInput { url: String! type: String! @@ -2597,10 +2623,12 @@ input CreateContainerRegistryInput { is_global: Boolean } +"""Deprecated since 24.09.0. use `ModifyContainerRegistryNode` instead""" type ModifyContainerRegistry { container_registry: ContainerRegistry } +"""Deprecated since 24.09.0.""" input ModifyContainerRegistryInput { url: String type: String @@ -2613,6 +2641,7 @@ input ModifyContainerRegistryInput { is_global: Boolean } +"""Deprecated since 24.09.0. use `DeleteContainerRegistryNode` instead""" type DeleteContainerRegistry { container_registry: ContainerRegistry } diff --git a/react/src/components/SessionDetailContent.tsx b/react/src/components/SessionDetailContent.tsx index 7e1ff331a4..9b798a116e 100644 --- a/react/src/components/SessionDetailContent.tsx +++ b/react/src/components/SessionDetailContent.tsx @@ -1,5 +1,6 @@ import SessionKernelTags from '../components/ImageTags'; import { toGlobalId } from '../helper'; +import { useSuspendedBackendaiClient } from '../hooks'; import { useCurrentUserRole } from '../hooks/backendai'; import { useCurrentProjectValue } from '../hooks/useCurrentProject'; import { ResourceNumbersOfSession } from '../pages/SessionLauncherPage'; @@ -40,6 +41,7 @@ const SessionDetailContent: React.FC<{ const { open } = useFolderExplorerOpener(); const currentProject = useCurrentProjectValue(); const userRole = useCurrentUserRole(); + const baiClient = useSuspendedBackendaiClient(); const { md } = Grid.useBreakpoint(); // TODO: remove and refactor this waterfall request after v24.12.0 @@ -91,6 +93,16 @@ const SessionDetailContent: React.FC<{ } } vfolder_mounts + vfolder_nodes @since(version: "24.12.0") { + edges { + node { + id + row_id + name + } + } + count + } created_at @required(action: NONE) terminated_at scaling_group @@ -193,25 +205,44 @@ const SessionDetailContent: React.FC<{ )} - {_.map( - _.zip(legacy_session?.mounts, session?.vfolder_mounts), - (mountInfo) => { - const [name, id] = mountInfo; - return ( - - ); - }, - )} + {baiClient.supports('vfolder-nodes') + ? _.map(session?.vfolder_nodes?.edges, (vfolder) => { + return ( + + ); + }) + : _.map( + // compute_session_node query's vfolder_mounts is not include name. + // To provide vfolder name in compute_session_node, schema must be changed. + // legacy_session.mounts (name) and session.vfolder_mounts (id) give vfolder information in same order. + _.zip(legacy_session?.mounts, session?.vfolder_mounts), + (mountInfo) => { + const [name, id] = mountInfo; + return ( + + ); + }, + )} diff --git a/src/lib/backend.ai-client-esm.ts b/src/lib/backend.ai-client-esm.ts index 0418f6fced..bee026d534 100644 --- a/src/lib/backend.ai-client-esm.ts +++ b/src/lib/backend.ai-client-esm.ts @@ -733,6 +733,7 @@ class Client { this._features['creating-session-status'] = true; this._features['max_network_count'] = true; this._features['replicas'] = true; + this._features['vfolder-nodes'] = true; } if (this.isManagerVersionCompatibleWith(['25.1.0', '24.09.6', '24.03.12'])) { this._features['vfolder-id-based'] = true;