Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -751,6 +751,79 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/edge_worker/ui/worker/{worker_name}/queues/{queue_name}:
put:
tags:
- UI
summary: Add Worker Queue
description: Add a queue to a worker.
operationId: add_worker_queue
security:
- OAuth2PasswordBearer: []
- HTTPBearer: []
parameters:
- name: worker_name
in: path
required: true
schema:
type: string
title: Worker Name
- name: queue_name
in: path
required: true
schema:
type: string
title: Queue Name
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: 'null'
title: Response Add Worker Queue
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- UI
summary: Remove Worker Queue
description: Remove a queue from a worker.
operationId: remove_worker_queue
security:
- OAuth2PasswordBearer: []
- HTTPBearer: []
parameters:
- name: worker_name
in: path
required: true
schema:
type: string
title: Worker Name
- name: queue_name
in: path
required: true
schema:
type: string
title: Queue Name
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: 'null'
title: Response Remove Worker Queue
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
BundleInfo:
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ export type LogsServicePushLogsMutationResult = Awaited<ReturnType<typeof LogsSe
export type WorkerServiceRegisterMutationResult = Awaited<ReturnType<typeof WorkerService.register>>;
export type UiServiceRequestWorkerMaintenanceMutationResult = Awaited<ReturnType<typeof UiService.requestWorkerMaintenance>>;
export type UiServiceRequestWorkerShutdownMutationResult = Awaited<ReturnType<typeof UiService.requestWorkerShutdown>>;
export type UiServiceAddWorkerQueueMutationResult = Awaited<ReturnType<typeof UiService.addWorkerQueue>>;
export type JobsServiceStateMutationResult = Awaited<ReturnType<typeof JobsService.state>>;
export type WorkerServiceSetStateMutationResult = Awaited<ReturnType<typeof WorkerService.setState>>;
export type WorkerServiceUpdateQueuesMutationResult = Awaited<ReturnType<typeof WorkerService.updateQueues>>;
export type UiServiceUpdateWorkerMaintenanceMutationResult = Awaited<ReturnType<typeof UiService.updateWorkerMaintenance>>;
export type UiServiceExitWorkerMaintenanceMutationResult = Awaited<ReturnType<typeof UiService.exitWorkerMaintenance>>;
export type UiServiceDeleteWorkerMutationResult = Awaited<ReturnType<typeof UiService.deleteWorker>>;
export type UiServiceRemoveWorkerQueueMutationResult = Awaited<ReturnType<typeof UiService.removeWorkerQueue>>;
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ export const useUiServiceRequestWorkerShutdown = <TData = Common.UiServiceReques
}, TContext>, "mutationFn">) => useMutation<TData, TError, {
workerName: string;
}, TContext>({ mutationFn: ({ workerName }) => UiService.requestWorkerShutdown({ workerName }) as unknown as Promise<TData>, ...options });
export const useUiServiceAddWorkerQueue = <TData = Common.UiServiceAddWorkerQueueMutationResult, TError = unknown, TContext = unknown>(options?: Omit<UseMutationOptions<TData, TError, {
queueName: string;
workerName: string;
}, TContext>, "mutationFn">) => useMutation<TData, TError, {
queueName: string;
workerName: string;
}, TContext>({ mutationFn: ({ queueName, workerName }) => UiService.addWorkerQueue({ queueName, workerName }) as unknown as Promise<TData>, ...options });
export const useJobsServiceState = <TData = Common.JobsServiceStateMutationResult, TError = unknown, TContext = unknown>(options?: Omit<UseMutationOptions<TData, TError, {
authorization: string;
dagId: string;
Expand Down Expand Up @@ -114,3 +121,10 @@ export const useUiServiceDeleteWorker = <TData = Common.UiServiceDeleteWorkerMut
}, TContext>, "mutationFn">) => useMutation<TData, TError, {
workerName: string;
}, TContext>({ mutationFn: ({ workerName }) => UiService.deleteWorker({ workerName }) as unknown as Promise<TData>, ...options });
export const useUiServiceRemoveWorkerQueue = <TData = Common.UiServiceRemoveWorkerQueueMutationResult, TError = unknown, TContext = unknown>(options?: Omit<UseMutationOptions<TData, TError, {
queueName: string;
workerName: string;
}, TContext>, "mutationFn">) => useMutation<TData, TError, {
queueName: string;
workerName: string;
}, TContext>({ mutationFn: ({ queueName, workerName }) => UiService.removeWorkerQueue({ queueName, workerName }) as unknown as Promise<TData>, ...options });
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import type { CancelablePromise } from './core/CancelablePromise';
import { OpenAPI } from './core/OpenAPI';
import { request as __request } from './core/request';
import type { FetchData, FetchResponse, StateData, StateResponse, LogfilePathData, LogfilePathResponse, PushLogsData, PushLogsResponse, RegisterData, RegisterResponse, SetStateData, SetStateResponse, UpdateQueuesData, UpdateQueuesResponse, HealthResponse, WorkerResponse, JobsResponse, RequestWorkerMaintenanceData, RequestWorkerMaintenanceResponse, UpdateWorkerMaintenanceData, UpdateWorkerMaintenanceResponse, ExitWorkerMaintenanceData, ExitWorkerMaintenanceResponse, RequestWorkerShutdownData, RequestWorkerShutdownResponse, DeleteWorkerData, DeleteWorkerResponse } from './types.gen';
import type { FetchData, FetchResponse, StateData, StateResponse, LogfilePathData, LogfilePathResponse, PushLogsData, PushLogsResponse, RegisterData, RegisterResponse, SetStateData, SetStateResponse, UpdateQueuesData, UpdateQueuesResponse, HealthResponse, WorkerResponse, JobsResponse, RequestWorkerMaintenanceData, RequestWorkerMaintenanceResponse, UpdateWorkerMaintenanceData, UpdateWorkerMaintenanceResponse, ExitWorkerMaintenanceData, ExitWorkerMaintenanceResponse, RequestWorkerShutdownData, RequestWorkerShutdownResponse, DeleteWorkerData, DeleteWorkerResponse, AddWorkerQueueData, AddWorkerQueueResponse, RemoveWorkerQueueData, RemoveWorkerQueueResponse } from './types.gen';

export class JobsService {
/**
Expand Down Expand Up @@ -397,4 +397,50 @@ export class UiService {
});
}

/**
* Add Worker Queue
* Add a queue to a worker.
* @param data The data for the request.
* @param data.workerName
* @param data.queueName
* @returns null Successful Response
* @throws ApiError
*/
public static addWorkerQueue(data: AddWorkerQueueData): CancelablePromise<AddWorkerQueueResponse> {
return __request(OpenAPI, {
method: 'PUT',
url: '/edge_worker/ui/worker/{worker_name}/queues/{queue_name}',
path: {
worker_name: data.workerName,
queue_name: data.queueName
},
errors: {
422: 'Validation Error'
}
});
}

/**
* Remove Worker Queue
* Remove a queue from a worker.
* @param data The data for the request.
* @param data.workerName
* @param data.queueName
* @returns null Successful Response
* @throws ApiError
*/
public static removeWorkerQueue(data: RemoveWorkerQueueData): CancelablePromise<RemoveWorkerQueueResponse> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/edge_worker/ui/worker/{worker_name}/queues/{queue_name}',
path: {
worker_name: data.workerName,
queue_name: data.queueName
},
errors: {
422: 'Validation Error'
}
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,20 @@ export type DeleteWorkerData = {

export type DeleteWorkerResponse = null;

export type AddWorkerQueueData = {
queueName: string;
workerName: string;
};

export type AddWorkerQueueResponse = null;

export type RemoveWorkerQueueData = {
queueName: string;
workerName: string;
};

export type RemoveWorkerQueueResponse = null;

export type $OpenApiTs = {
'/edge_worker/v1/jobs/fetch/{worker_name}': {
post: {
Expand Down Expand Up @@ -765,4 +779,32 @@ export type $OpenApiTs = {
};
};
};
'/edge_worker/ui/worker/{worker_name}/queues/{queue_name}': {
put: {
req: AddWorkerQueueData;
res: {
/**
* Successful Response
*/
200: null;
/**
* Validation Error
*/
422: HTTPValidationError;
};
};
delete: {
req: RemoveWorkerQueueData;
res: {
/**
* Successful Response
*/
200: null;
/**
* Validation Error
*/
422: HTTPValidationError;
};
};
};
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
/*!
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {
Button,
CloseButton,
Dialog,
Input,
IconButton,
Portal,
Text,
useDisclosure,
VStack,
} from "@chakra-ui/react";
import { useUiServiceAddWorkerQueue } from "openapi/queries";
import { useState } from "react";
import { LuListPlus } from "react-icons/lu";

interface AddQueueButtonProps {
onQueueUpdate: (toast: Record<string, string>) => void;
workerName: string;
}

export const AddQueueButton = ({ onQueueUpdate, workerName }: AddQueueButtonProps) => {
const { onClose, onOpen, open } = useDisclosure();
const [queueName, setQueueName] = useState("");

const addQueueMutation = useUiServiceAddWorkerQueue({
onError: (error) => {
onQueueUpdate({
description: `Unable to add queue to worker ${workerName}: ${error}`,
title: "Add Queue Failed",
type: "error",
});
},
onSuccess: () => {
onQueueUpdate({
description: `Queue "${queueName}" was added to worker ${workerName}.`,
title: "Queue Added",
type: "success",
});
onClose();
setQueueName("");
},
});

const handleAddQueue = () => {
if (!queueName.trim()) {
onQueueUpdate({
description: "Please enter a queue name.",
title: "Invalid Input",
type: "error",
});
return;
}

addQueueMutation.mutate({
queueName: queueName.trim(),
workerName,
});
};

return (
<>
<IconButton
size="sm"
variant="ghost"
onClick={onOpen}
aria-label="Add Queue"
title="Add Queue"
colorPalette="success"
>
<LuListPlus />
</IconButton>

<Dialog.Root onOpenChange={onClose} open={open} size="md">
<Portal>
<Dialog.Backdrop />
<Dialog.Positioner>
<Dialog.Content>
<Dialog.Header>
<Dialog.Title>Add Queue to {workerName}</Dialog.Title>
</Dialog.Header>
<Dialog.Body>
<VStack gap={4} align="stretch">
<Text>Enter the name of the queue to add to this worker:</Text>
<Input
placeholder="Queue name"
value={queueName}
onChange={(e) => setQueueName(e.target.value)}
onKeyDown={(e) => {
if (e.key === "Enter") {
handleAddQueue();
}
}}
/>
</VStack>
</Dialog.Body>
<Dialog.Footer>
<Dialog.ActionTrigger asChild>
<Button variant="outline">Cancel</Button>
</Dialog.ActionTrigger>
<Button
onClick={handleAddQueue}
colorPalette="success"
loading={addQueueMutation.isPending}
loadingText="Adding queue..."
disabled={!queueName.trim()}
>
<LuListPlus />
Add Queue
</Button>
</Dialog.Footer>
<Dialog.CloseTrigger asChild>
<CloseButton size="sm" />
</Dialog.CloseTrigger>
</Dialog.Content>
</Dialog.Positioner>
</Portal>
</Dialog.Root>
</>
);
};
Loading