diff --git a/client/src/features/sessionsV2/api/computeResources.generated-api.ts b/client/src/features/sessionsV2/api/computeResources.generated-api.ts index 98c48a1239..4798d43821 100644 --- a/client/src/features/sessionsV2/api/computeResources.generated-api.ts +++ b/client/src/features/sessionsV2/api/computeResources.generated-api.ts @@ -484,7 +484,7 @@ export type GetResourcePoolsByResourcePoolIdUsersAndUserIdApiArg = { userId: string; }; export type DeleteResourcePoolsByResourcePoolIdUsersAndUserIdApiResponse = - /** status 204 The user was removed or it was not part of the pool */ void; + /** status 204 The user was removed, or it was not part of the pool */ void; export type DeleteResourcePoolsByResourcePoolIdUsersAndUserIdApiArg = { resourcePoolId: number; userId: string; @@ -532,12 +532,11 @@ export type PutUsersByUserIdResourcePoolsApiArg = { export type GetVersionApiResponse = /** status 200 The error */ Version; export type GetVersionApiArg = void; export type Name = string; +export type DefaultFlag = boolean; export type Cpu = number; export type Memory = number; export type Gpu = number; export type Storage = number; -export type IntegerId = number; -export type DefaultFlag = boolean; export type K8SLabel = string; export type K8SLabelList = K8SLabel[]; export type NodeAffinity = { @@ -545,17 +544,18 @@ export type NodeAffinity = { required_during_scheduling?: boolean; }; export type NodeAffinityList = NodeAffinity[]; +export type IntegerId = number; export type ResourceClassWithId = { name: Name; + default: DefaultFlag; cpu: Cpu; memory: Memory; gpu: Gpu; max_storage: Storage; default_storage: Storage; - id: IntegerId; - default: DefaultFlag; tolerations?: K8SLabelList; node_affinities?: NodeAffinityList; + id: IntegerId; }; export type ErrorResponse = { error: { @@ -629,18 +629,12 @@ export type QuotaWithId = { gpu: Gpu; id: Name; }; -export type ResourceClassWithIdFiltered = { - name: Name; - cpu: Cpu; - memory: Memory; - gpu: Gpu; - max_storage: Storage; - default_storage: Storage; - id: IntegerId; - default: DefaultFlag; +export type UsageHoursRemaining = number; +export type UsageHoursTotal = number; +export type ResourceClassWithIdFiltered = ResourceClassWithId & { matching?: boolean; - tolerations?: K8SLabelList; - node_affinities?: NodeAffinityList; + usage_hours_remaining?: UsageHoursRemaining; + usage_hours_total?: UsageHoursTotal; }; export type PublicFlag = boolean; export type RemoteConfigurationFirecrestProviderId = string; @@ -669,6 +663,7 @@ export type IdleThreshold = number; export type HibernationThreshold = number; export type HibernationWarningPeriod = number; export type RuntimePlatform = "linux/amd64" | "linux/arm64"; +export type CreditsUsed = number; export type ResourcePoolWithIdFiltered = { quota?: QuotaWithId; classes: ResourceClassWithIdFiltered[]; @@ -682,6 +677,7 @@ export type ResourcePoolWithIdFiltered = { hibernation_warning_period?: HibernationWarningPeriod; cluster_id?: Ulid; platform: RuntimePlatform; + credits_used?: CreditsUsed; }; export type ResourcePoolsWithIdFiltered = ResourcePoolWithIdFiltered[]; export type CpuFilter = number; @@ -711,12 +707,12 @@ export type QuotaWithOptionalId = { }; export type ResourceClass = { name: Name; + default: DefaultFlag; cpu: Cpu; memory: Memory; gpu: Gpu; max_storage: Storage; default_storage: Storage; - default: DefaultFlag; tolerations?: K8SLabelList; node_affinities?: NodeAffinityList; }; @@ -753,21 +749,21 @@ export type QuotaPatch = { memory?: Memory; gpu?: Gpu; }; -export type DefaultFlagPatch = boolean; -export type ResourceClassPatchWithId = { +export type ResourceClassProperties = { name?: Name; + default?: DefaultFlag; cpu?: Cpu; memory?: Memory; gpu?: Gpu; max_storage?: Storage; default_storage?: Storage; - id: IntegerId; - default?: DefaultFlagPatch; tolerations?: K8SLabelList; node_affinities?: NodeAffinityList; }; +export type ResourceClassPatchWithId = ResourceClassProperties & { + id?: IntegerId; +}; export type ResourceClassesPatchWithId = ResourceClassPatchWithId[]; -export type PublicFlagPatch = boolean; export type RemoteConfigurationPatchReset = object; export type RemoteConfigurationFirecrestPatch = { /** Kind of remote resource pool */ @@ -791,8 +787,8 @@ export type ResourcePoolPatch = { quota?: QuotaPatch; classes?: ResourceClassesPatchWithId; name?: Name; - public?: PublicFlagPatch; - default?: DefaultFlagPatch; + public?: PublicFlag; + default?: DefaultFlag; remote?: RemoteConfigurationPatch; idle_threshold?: IdleThreshold; hibernation_threshold?: HibernationThreshold; @@ -801,17 +797,7 @@ export type ResourcePoolPatch = { platform?: RuntimePlatform; }; export type ResourceClassesWithIdResponse = ResourceClassWithId[]; -export type ResourceClassPatch = { - name?: Name; - cpu?: Cpu; - memory?: Memory; - gpu?: Gpu; - max_storage?: Storage; - default_storage?: Storage; - default?: DefaultFlagPatch; - tolerations?: K8SLabelList; - node_affinities?: NodeAffinityList; -}; +export type ResourceClassPatch = ResourceClassProperties; export type NodeAffinityListResponse = NodeAffinity[]; export type UserId = string; export type PoolUserWithId = { diff --git a/client/src/features/sessionsV2/api/computeResources.openapi.json b/client/src/features/sessionsV2/api/computeResources.openapi.json index 13bd95b027..49c011fdd0 100644 --- a/client/src/features/sessionsV2/api/computeResources.openapi.json +++ b/client/src/features/sessionsV2/api/computeResources.openapi.json @@ -295,19 +295,35 @@ "additionalProperties": false, "properties": { "cpu": { - "$ref": "#/components/schemas/CpuFilter", + "allOf": [ + { + "$ref": "#/components/schemas/CpuFilter" + } + ], "default": 0 }, "gpu": { - "$ref": "#/components/schemas/Gpu", + "allOf": [ + { + "$ref": "#/components/schemas/Gpu" + } + ], "default": 0 }, "memory": { - "$ref": "#/components/schemas/MemoryFilter", + "allOf": [ + { + "$ref": "#/components/schemas/MemoryFilter" + } + ], "default": 0 }, "max_storage": { - "$ref": "#/components/schemas/StorageFilter", + "allOf": [ + { + "$ref": "#/components/schemas/StorageFilter" + } + ], "default": 0 } } @@ -1189,7 +1205,7 @@ ], "responses": { "204": { - "description": "The user was removed or it was not part of the pool" + "description": "The user was removed, or it was not part of the pool" }, "default": { "$ref": "#/components/responses/Error" @@ -1677,13 +1693,16 @@ "$ref": "#/components/schemas/ClusterWithId" } }, - "ResourceClass": { + "ResourceClassProperties": { "type": "object", "additionalProperties": false, "properties": { "name": { "$ref": "#/components/schemas/Name" }, + "default": { + "$ref": "#/components/schemas/DefaultFlag" + }, "cpu": { "$ref": "#/components/schemas/Cpu" }, @@ -1699,42 +1718,24 @@ "default_storage": { "$ref": "#/components/schemas/Storage" }, - "default": { - "$ref": "#/components/schemas/DefaultFlag" - }, "tolerations": { "$ref": "#/components/schemas/K8sLabelList" }, "node_affinities": { "$ref": "#/components/schemas/NodeAffinityList" } - }, - "required": [ - "cpu", - "memory", - "gpu", - "max_storage", - "name", - "default", - "default_storage" - ], - "example": { - "name": "resource class", - "cpu": 1.5, - "memory": 2, - "gpu": 0, - "max_storage": 100, - "default": false, - "default_storage": 10 } }, - "ResourceClassPatch": { + "ResourceClass": { "type": "object", "additionalProperties": false, "properties": { "name": { "$ref": "#/components/schemas/Name" }, + "default": { + "$ref": "#/components/schemas/DefaultFlag" + }, "cpu": { "$ref": "#/components/schemas/Cpu" }, @@ -1750,9 +1751,6 @@ "default_storage": { "$ref": "#/components/schemas/Storage" }, - "default": { - "$ref": "#/components/schemas/DefaultFlagPatch" - }, "tolerations": { "$ref": "#/components/schemas/K8sLabelList" }, @@ -1760,46 +1758,50 @@ "$ref": "#/components/schemas/NodeAffinityList" } }, + "required": [ + "name", + "default", + "cpu", + "memory", + "gpu", + "max_storage", + "default_storage" + ], + "example": { + "name": "resource class", + "default": false, + "cpu": 1.5, + "memory": 2, + "gpu": 0, + "max_storage": 100, + "default_storage": 10 + } + }, + "ResourceClassPatch": { + "allOf": [ + { + "$ref": "#/components/schemas/ResourceClassProperties" + } + ], "example": { "name": "resource class", "cpu": 1.5 } }, "ResourceClassPatchWithId": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "$ref": "#/components/schemas/Name" - }, - "cpu": { - "$ref": "#/components/schemas/Cpu" - }, - "memory": { - "$ref": "#/components/schemas/Memory" - }, - "gpu": { - "$ref": "#/components/schemas/Gpu" - }, - "max_storage": { - "$ref": "#/components/schemas/Storage" - }, - "default_storage": { - "$ref": "#/components/schemas/Storage" - }, - "id": { - "$ref": "#/components/schemas/IntegerId" - }, - "default": { - "$ref": "#/components/schemas/DefaultFlagPatch" - }, - "tolerations": { - "$ref": "#/components/schemas/K8sLabelList" + "allOf": [ + { + "$ref": "#/components/schemas/ResourceClassProperties" }, - "node_affinities": { - "$ref": "#/components/schemas/NodeAffinityList" + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/IntegerId" + } + } } - }, + ], "required": ["id"], "example": { "id": 1, @@ -1813,6 +1815,9 @@ "name": { "$ref": "#/components/schemas/Name" }, + "default": { + "$ref": "#/components/schemas/DefaultFlag" + }, "cpu": { "$ref": "#/components/schemas/Cpu" }, @@ -1828,97 +1833,66 @@ "default_storage": { "$ref": "#/components/schemas/Storage" }, - "id": { - "$ref": "#/components/schemas/IntegerId" - }, - "default": { - "$ref": "#/components/schemas/DefaultFlag" - }, "tolerations": { "$ref": "#/components/schemas/K8sLabelList" }, "node_affinities": { "$ref": "#/components/schemas/NodeAffinityList" + }, + "id": { + "$ref": "#/components/schemas/IntegerId" } }, "required": [ + "name", + "default", "cpu", "memory", "gpu", "max_storage", - "name", - "id", - "default", - "default_storage" + "default_storage", + "id" ], "example": { "name": "resource class", + "default": true, "cpu": 1.5, "memory": 2, "gpu": 0, "max_storage": 100, "default_storage": 10, - "id": 1, - "default": true + "id": 1 } }, "ResourceClassWithIdFiltered": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "$ref": "#/components/schemas/Name" - }, - "cpu": { - "$ref": "#/components/schemas/Cpu" - }, - "memory": { - "$ref": "#/components/schemas/Memory" - }, - "gpu": { - "$ref": "#/components/schemas/Gpu" - }, - "max_storage": { - "$ref": "#/components/schemas/Storage" - }, - "default_storage": { - "$ref": "#/components/schemas/Storage" - }, - "id": { - "$ref": "#/components/schemas/IntegerId" - }, - "default": { - "$ref": "#/components/schemas/DefaultFlag" - }, - "matching": { - "type": "boolean" - }, - "tolerations": { - "$ref": "#/components/schemas/K8sLabelList" + "allOf": [ + { + "$ref": "#/components/schemas/ResourceClassWithId" }, - "node_affinities": { - "$ref": "#/components/schemas/NodeAffinityList" + { + "type": "object", + "properties": { + "matching": { + "type": "boolean" + }, + "usage_hours_remaining": { + "$ref": "#/components/schemas/UsageHoursRemaining" + }, + "usage_hours_total": { + "$ref": "#/components/schemas/UsageHoursTotal" + } + } } - }, - "required": [ - "cpu", - "memory", - "gpu", - "max_storage", - "name", - "id", - "default", - "default_storage" ], "example": { "name": "resource class", + "default": true, "cpu": 1.5, "memory": 2, "gpu": 0, "max_storage": 100, "default_storage": 10, "id": 1, - "default": true, "matching": true } }, @@ -1937,23 +1911,23 @@ "example": [ { "name": "resource class 1", + "default": true, "cpu": 1.5, "memory": 2, "gpu": 0, "max_storage": 100, - "id": 1, - "default": true, - "default_storage": 10 + "default_storage": 10, + "id": 1 }, { "name": "resource class 2", + "default": false, "cpu": 4.5, "memory": 10, "gpu": 2, - "default_storage": 10, "max_storage": 10000, - "id": 2, - "default": false + "default_storage": 10, + "id": 2 } ] }, @@ -1966,23 +1940,23 @@ "example": [ { "name": "resource class 1", + "default": true, "cpu": 1.5, "memory": 2, "gpu": 0, "max_storage": 100, - "id": 1, - "default": true, - "default_storage": 10 + "default_storage": 10, + "id": 1 }, { "name": "resource class 2", + "default": false, "cpu": 4.5, "memory": 10, "gpu": 2, - "default_storage": 10, "max_storage": 10000, - "id": 2, - "default": false + "default_storage": 10, + "id": 2 } ] }, @@ -2091,10 +2065,10 @@ "$ref": "#/components/schemas/Name" }, "public": { - "$ref": "#/components/schemas/PublicFlagPatch" + "$ref": "#/components/schemas/PublicFlag" }, "default": { - "$ref": "#/components/schemas/DefaultFlagPatch" + "$ref": "#/components/schemas/DefaultFlag" }, "remote": { "$ref": "#/components/schemas/RemoteConfigurationPatch" @@ -2328,6 +2302,9 @@ }, "platform": { "$ref": "#/components/schemas/RuntimePlatform" + }, + "credits_used": { + "$ref": "#/components/schemas/CreditsUsed" } }, "required": ["classes", "name", "id", "public", "default", "platform"], @@ -2379,33 +2356,6 @@ "$ref": "#/components/schemas/ResourcePoolWithIdFiltered" } }, - "UserPatch": { - "type": "object", - "additionalProperties": false, - "properties": { - "no_default_access": { - "type": "boolean", - "description": "If set to true the user will not be able to use the default resource pool" - } - }, - "example": { - "no_default_access": true - } - }, - "UserPut": { - "type": "object", - "additionalProperties": false, - "properties": { - "no_default_access": { - "type": "boolean", - "description": "If set to true the user will not be able to use the default resource pool" - } - }, - "required": ["no_default_access"], - "example": { - "no_default_access": true - } - }, "PoolUserWithId": { "type": "object", "additionalProperties": false, @@ -2546,6 +2496,27 @@ "minimum": 0, "maximum": 9223372036854776000 }, + "UsageHoursRemaining": { + "type": "number", + "format": "double", + "description": "Number of resource hours remaining for the user", + "example": 3.141, + "minimum": 0 + }, + "UsageHoursTotal": { + "type": "number", + "format": "double", + "description": "Total number of resource hours available to the user", + "example": 10, + "minimum": 0, + "default": null + }, + "CreditsUsed": { + "type": "integer", + "description": "Amount of the resource credits used so far", + "example": 300, + "minimum": 0 + }, "Storage": { "type": "integer", "description": "Number of gigabytes of storage", @@ -2595,23 +2566,11 @@ "example": "a-remote-cluster.yaml" }, "DefaultFlag": { - "type": "boolean", - "description": "A default selection for resource classes or resource pools", - "default": false, - "example": false - }, - "DefaultFlagPatch": { "type": "boolean", "description": "A default selection for resource classes or resource pools", "example": false }, "PublicFlag": { - "type": "boolean", - "description": "A resource pool whose classes can be accessed by anyone", - "default": false, - "example": false - }, - "PublicFlagPatch": { "type": "boolean", "description": "A resource pool whose classes can be accessed by anyone", "example": false diff --git a/client/src/features/sessionsV2/api/sessionsV2.generated-api.ts b/client/src/features/sessionsV2/api/sessionsV2.generated-api.ts index 7e1f4eb78d..1db49dcb5d 100644 --- a/client/src/features/sessionsV2/api/sessionsV2.generated-api.ts +++ b/client/src/features/sessionsV2/api/sessionsV2.generated-api.ts @@ -10,7 +10,10 @@ const injectedRtkApi = api.injectEndpoints({ }), }), getSessions: build.query({ - query: () => ({ url: `/sessions` }), + query: (queryArg) => ({ + url: `/sessions`, + params: { session_type: queryArg.sessionType }, + }), }), getSessionsBySessionId: build.query< GetSessionsBySessionIdApiResponse, @@ -67,7 +70,10 @@ export type PostSessionsApiArg = { }; export type GetSessionsApiResponse = /** status 200 Information about the sessions */ SessionListResponse; -export type GetSessionsApiArg = void; +export type GetSessionsApiArg = { + /** Filter by session mode. */ + sessionType?: SessionType; +}; export type GetSessionsBySessionIdApiResponse = /** status 200 Information about the session */ SessionResponse; export type GetSessionsBySessionIdApiArg = { @@ -117,7 +123,13 @@ export type SessionResources = { }; export type SessionStatus = { message?: string; - state: "running" | "starting" | "stopping" | "failed" | "hibernated"; + state: + | "running" + | "starting" + | "stopping" + | "failed" + | "hibernated" + | "succeeded"; will_hibernate_at?: string | null; will_delete_at?: string | null; ready_containers: number; @@ -166,6 +178,7 @@ export type EnvVarOverride = { value: string; }; export type EnvVariableOverrides = EnvVarOverride[]; +export type SessionType = "interactive" | "non-interactive"; export type SessionPostRequest = { launcher_id: Ulid; /** The size of disk storage for the session, in gigabytes */ @@ -173,6 +186,7 @@ export type SessionPostRequest = { resource_class_id?: number | null; data_connectors_overrides?: SessionDataConnectorsOverrideList; env_variable_overrides?: EnvVariableOverrides; + session_type?: SessionType; }; export type SessionListResponse = SessionResponse[]; export type CurrentTime = "now"; diff --git a/client/src/features/sessionsV2/api/sessionsV2.openapi.json b/client/src/features/sessionsV2/api/sessionsV2.openapi.json index 6172ae8481..5dd066aacc 100644 --- a/client/src/features/sessionsV2/api/sessionsV2.openapi.json +++ b/client/src/features/sessionsV2/api/sessionsV2.openapi.json @@ -53,6 +53,18 @@ }, "get": { "summary": "Get a list of all sessions for a user", + "parameters": [ + { + "description": "Filter by session mode.", + "in": "query", + "name": "session_type", + "required": false, + "default": "interactive", + "schema": { + "$ref": "#/components/schemas/SessionType" + } + } + ], "responses": { "200": { "description": "Information about the sessions", @@ -306,6 +318,10 @@ }, "required": ["error"] }, + "SessionType": { + "type": "string", + "enum": ["interactive", "non-interactive"] + }, "SessionPostRequest": { "properties": { "launcher_id": { @@ -324,6 +340,9 @@ }, "env_variable_overrides": { "$ref": "#/components/schemas/EnvVariableOverrides" + }, + "session_type": { + "$ref": "#/components/schemas/SessionType" } }, "required": ["launcher_id"], @@ -417,7 +436,14 @@ "type": "string" }, "state": { - "enum": ["running", "starting", "stopping", "failed", "hibernated"], + "enum": [ + "running", + "starting", + "stopping", + "failed", + "hibernated", + "succeeded" + ], "type": "string" }, "will_hibernate_at": {