Files
gpustack-ui/src/pages/gpu-service/instances/apis/index.ts
T

183 lines
4.4 KiB
TypeScript

import { request } from '@umijs/max';
import _ from 'lodash';
import { omitPathParams } from '../../utils';
import {
FormData,
InstanceEvents,
InstanceLog,
InstanceLogQueryParams,
InstanceTypeItem,
ListItem
} from '../config/types';
export const GPU_SERVICE_INSTANCES_API = '/gpu-instances';
export const GPU_SERVICE_INSTANCES_TYPE_API = '/gpu-instance-types';
// View logs / events still go through the K8s proxy until the /v2
// /gpu-instances API exposes equivalents. clusterID and namespace come
// per-row from `row.clusterId` and `row.status.namespace`.
export const GPU_SERVICE_INSTANCES_LOG_API = (params: {
namespace: string;
name: string;
clusterID?: number;
}) =>
`/clusters/${params.clusterID}/proxy/apis/worker.gpustack.ai/v1/namespaces/${params.namespace}/instances/${params.name}/log`;
export const GPU_SERVICE_INSTANCES_EVENTS_API = (params: {
namespace: string;
name: string;
clusterID?: number;
}) =>
`/clusters/${params.clusterID}/proxy/apis/worker.gpustack.ai/v1/namespaces/${params.namespace}/instances/${params.name}/events`;
export const GPU_SERVICE_INSTANCE_PV_EVENTS_API = (params: {
namespace: string;
name: string;
clusterID?: number;
}) =>
`/clusters/${params.clusterID}/proxy/apis/worker.gpustack.ai/v1/namespaces/${params.namespace}/instancepersistentvolumes/${params.name}/events`;
// =========== Instances ===========
export async function queryGPUServiceInstances(
params: Global.SearchParams,
options?: any
) {
return request<Global.PageResponse<ListItem>>(GPU_SERVICE_INSTANCES_API, {
method: 'GET',
params,
cancelToken: options?.token
});
}
export async function createGPUServiceInstance(params: { data: FormData }) {
return request<ListItem>(GPU_SERVICE_INSTANCES_API, {
method: 'POST',
data: params.data
});
}
export async function updateGPUServiceInstance(params: {
id: number;
data: Partial<FormData>;
}) {
return request<ListItem>(`${GPU_SERVICE_INSTANCES_API}/${params.id}`, {
method: 'PUT',
data: params.data
});
}
export async function deleteGPUServiceInstance(id: number) {
return request(`${GPU_SERVICE_INSTANCES_API}/${id}`, {
method: 'DELETE'
});
}
export async function stopGPUServiceInstance(id: number) {
return request(`${GPU_SERVICE_INSTANCES_API}/${id}/stop`, {
method: 'PUT'
});
}
export async function startGPUServiceInstance(id: number) {
return request(`${GPU_SERVICE_INSTANCES_API}/${id}/start`, {
method: 'PUT'
});
}
// =========== Instance Types ===========
export async function queryGPUServiceInstanceTypes(
params: Global.SearchParams = { page: 1, perPage: 100 },
options?: any
) {
return request<Global.PageResponse<InstanceTypeItem>>(
GPU_SERVICE_INSTANCES_TYPE_API,
{
method: 'GET',
params,
cancelToken: options?.token
}
);
}
// =========== Logs / Events (K8s proxy) ===========
export async function queryGPUServiceInstanceEvents(
params: {
namespace: string;
name: string;
clusterID?: number;
pretty?: string;
},
options?: any
) {
if (!params.clusterID) {
return;
}
return request<InstanceEvents>(
GPU_SERVICE_INSTANCES_EVENTS_API({
namespace: params.namespace,
clusterID: params.clusterID,
name: params.name
}),
{
method: 'GET',
params: omitPathParams(_.omit(params, ['name'])),
cancelToken: options?.token
}
);
}
export async function queryGPUServiceInstancePVEvents(
params: {
namespace: string;
name: string;
clusterID?: number;
},
options?: any
) {
if (!params.clusterID) {
return;
}
return request<InstanceEvents>(
GPU_SERVICE_INSTANCE_PV_EVENTS_API({
namespace: params.namespace,
clusterID: params.clusterID,
name: params.name
}),
{
method: 'GET',
params: omitPathParams(_.omit(params, ['name'])),
cancelToken: options?.token
}
);
}
export async function queryGPUServiceInstanceLog(
params: InstanceLogQueryParams & {
namespace: string;
name: string;
clusterID?: number;
},
options?: any
) {
if (!params.clusterID) {
return;
}
return request<InstanceLog>(
GPU_SERVICE_INSTANCES_LOG_API({
namespace: params.namespace,
clusterID: params.clusterID,
name: params.name
}),
{
method: 'GET',
params: omitPathParams(_.omit(params, ['name'])),
cancelToken: options?.token
}
);
}