Skip to content

Commit

Permalink
scheduling frontend (#700)
Browse files Browse the repository at this point in the history
* remove usage of `any`

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* add recurring ui to create task form

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* disable scheduling for batch upload; pass schedule to submitTasks cb

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* wip adding calender ui

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* add start_from; remove next_run

next_run is removed because schedule does not support starting from certain time, the workaround used prevent us from finding out the next_run

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* convert recurring days to api schedule

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* add once param

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* use once schedule when it is not recurring

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* use scheduled task endpoint

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* allow schedule if at least 1 job can be run

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* add start_from and until query

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* add start_from and until docs

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* change start_from and until to start_before and until_after

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* fix merge conflicts

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* remove once option

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* use old task dispatch for immediate tasks

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* first successful sending schedule from frontend

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* fix wrong time being returned

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* calendar working but not refreshing when tasks are created/deleted

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* workaround lack of refresh by remounting new instance

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* options for scheduling is now on 2nd view

Signed-off-by: Teo Koon Peng <koonpeng@google.com>

* Separate queue and calendar to be sub tabs under Task microapp

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Fix unsubscribe access vs call

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Resolved conflicted use of Dialog vs ConfirmationDialog

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use Chip instead of Button, refactored submission

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Refreshing task queue table after tasks have been submitted

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Minimal scheduling dialog created

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Debugging scheduling range errors

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Fixed Date assignment as copy

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Using startOfMinute and endOfMinute for schedule start and end time to ignore effects of milliseconds

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Time of scheduled tasks seem to be fixed

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* api-server lint

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* react-components, lint

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Unified task app refresh counter to be used for queue table and scheduler

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Add job tag and fix delete job bug

Signed-off-by: angatupyry <fierrofenix@gmail.com>

* Add return data type in get function

Signed-off-by: angatupyry <fierrofenix@gmail.com>

* Changing delete order

Signed-off-by: angatupyry <fierrofenix@gmail.com>

* Adding getter for protected id member

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Revert use of single global client for tests, as concurrency with client context fails

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Lint and fix e2e test

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Adding aria-label to submit button for e2e test

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

---------

Signed-off-by: Teo Koon Peng <koonpeng@google.com>
Signed-off-by: Aaron Chong <aaronchongth@gmail.com>
Signed-off-by: angatupyry <fierrofenix@gmail.com>
Co-authored-by: Aaron Chong <aaronchongth@gmail.com>
Co-authored-by: angatupyry <fierrofenix@gmail.com>
  • Loading branch information
3 people committed Jul 1, 2023
1 parent 3f563d3 commit bd1b279
Show file tree
Hide file tree
Showing 17 changed files with 5,344 additions and 6,346 deletions.
83 changes: 64 additions & 19 deletions packages/api-client/lib/openapi/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,39 +257,39 @@ export interface ApiServerModelsTortoiseModelsAlertsAlertLeaf {
/**
*
* @export
* @interface ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf
* @interface ApiServerModelsTortoiseModelsScheduledTaskScheduledTask
*/
export interface ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf {
export interface ApiServerModelsTortoiseModelsScheduledTaskScheduledTask {
/**
*
* @type {number}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTask
*/
id: number;
/**
*
* @type {any}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTask
*/
task_request?: any;
/**
*
* @type {string}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTask
*/
created_by: string;
/**
*
* @type {string}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTask
*/
last_ran?: string | null;
/**
*
* @type {string}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf
* @type {Array<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskScheduleLeaf>}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTask
*/
next_run?: string | null;
schedules: Array<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskScheduleLeaf>;
}
/**
* The schedules for a scheduled task request.<br/>A scheduled task may have multiple schedules.
Expand All @@ -305,10 +305,16 @@ export interface ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskSchedule
every?: number | null;
/**
*
* @type {number}
* @type {string}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskScheduleLeaf
*/
start_from?: string | null;
/**
*
* @type {string}
* @memberof ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskScheduleLeaf
*/
to?: number | null;
until?: string | null;
/**
* Monday: monday<br/>Tuesday: tuesday<br/>Wednesday: wednesday<br/>Thursday: thursday<br/>Friday: friday<br/>Saturday: saturday<br/>Sunday: sunday<br/>Day: day<br/>Hour: hour<br/>Minute: minute
* @type {string}
Expand Down Expand Up @@ -7075,18 +7081,26 @@ export const TasksApiAxiosParamCreator = function (configuration?: Configuration
/**
*
* @summary Get Scheduled Tasks
* @param {string} startBefore Only return scheduled tasks that start before given timestamp
* @param {string} untilAfter Only return scheduled tasks that stop after given timestamp
* @param {number} [limit] defaults to 100
* @param {number} [offset] defaults to 0
* @param {string} [orderBy] common separated list of fields to order by, prefix with \&#39;-\&#39; to sort descendingly.
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
getScheduledTasksScheduledTasksGet: async (
startBefore: string,
untilAfter: string,
limit?: number,
offset?: number,
orderBy?: string,
options: AxiosRequestConfig = {},
): Promise<RequestArgs> => {
// verify required parameter 'startBefore' is not null or undefined
assertParamExists('getScheduledTasksScheduledTasksGet', 'startBefore', startBefore);
// verify required parameter 'untilAfter' is not null or undefined
assertParamExists('getScheduledTasksScheduledTasksGet', 'untilAfter', untilAfter);
const localVarPath = `/scheduled_tasks`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
Expand All @@ -7099,6 +7113,16 @@ export const TasksApiAxiosParamCreator = function (configuration?: Configuration
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;

if (startBefore !== undefined) {
localVarQueryParameter['start_before'] =
(startBefore as any) instanceof Date ? (startBefore as any).toISOString() : startBefore;
}

if (untilAfter !== undefined) {
localVarQueryParameter['until_after'] =
(untilAfter as any) instanceof Date ? (untilAfter as any).toISOString() : untilAfter;
}

if (limit !== undefined) {
localVarQueryParameter['limit'] = limit;
}
Expand Down Expand Up @@ -8005,7 +8029,7 @@ export const TasksApiFp = function (configuration?: Configuration) {
(
axios?: AxiosInstance,
basePath?: string,
) => AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf>
) => AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTask>
> {
const localVarAxiosArgs =
await localVarAxiosParamCreator.getScheduledTaskScheduledTasksTaskIdGet(taskId, options);
Expand All @@ -8014,13 +8038,17 @@ export const TasksApiFp = function (configuration?: Configuration) {
/**
*
* @summary Get Scheduled Tasks
* @param {string} startBefore Only return scheduled tasks that start before given timestamp
* @param {string} untilAfter Only return scheduled tasks that stop after given timestamp
* @param {number} [limit] defaults to 100
* @param {number} [offset] defaults to 0
* @param {string} [orderBy] common separated list of fields to order by, prefix with \&#39;-\&#39; to sort descendingly.
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async getScheduledTasksScheduledTasksGet(
startBefore: string,
untilAfter: string,
limit?: number,
offset?: number,
orderBy?: string,
Expand All @@ -8029,9 +8057,11 @@ export const TasksApiFp = function (configuration?: Configuration) {
(
axios?: AxiosInstance,
basePath?: string,
) => AxiosPromise<Array<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf>>
) => AxiosPromise<Array<ApiServerModelsTortoiseModelsScheduledTaskScheduledTask>>
> {
const localVarAxiosArgs = await localVarAxiosParamCreator.getScheduledTasksScheduledTasksGet(
startBefore,
untilAfter,
limit,
offset,
orderBy,
Expand Down Expand Up @@ -8255,7 +8285,7 @@ export const TasksApiFp = function (configuration?: Configuration) {
(
axios?: AxiosInstance,
basePath?: string,
) => AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf>
) => AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTask>
> {
const localVarAxiosArgs = await localVarAxiosParamCreator.postScheduledTaskScheduledTasksPost(
postScheduledTaskRequest,
Expand Down Expand Up @@ -8419,28 +8449,39 @@ export const TasksApiFactory = function (
getScheduledTaskScheduledTasksTaskIdGet(
taskId: number,
options?: any,
): AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf> {
): AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTask> {
return localVarFp
.getScheduledTaskScheduledTasksTaskIdGet(taskId, options)
.then((request) => request(axios, basePath));
},
/**
*
* @summary Get Scheduled Tasks
* @param {string} startBefore Only return scheduled tasks that start before given timestamp
* @param {string} untilAfter Only return scheduled tasks that stop after given timestamp
* @param {number} [limit] defaults to 100
* @param {number} [offset] defaults to 0
* @param {string} [orderBy] common separated list of fields to order by, prefix with \&#39;-\&#39; to sort descendingly.
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
getScheduledTasksScheduledTasksGet(
startBefore: string,
untilAfter: string,
limit?: number,
offset?: number,
orderBy?: string,
options?: any,
): AxiosPromise<Array<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf>> {
): AxiosPromise<Array<ApiServerModelsTortoiseModelsScheduledTaskScheduledTask>> {
return localVarFp
.getScheduledTasksScheduledTasksGet(limit, offset, orderBy, options)
.getScheduledTasksScheduledTasksGet(
startBefore,
untilAfter,
limit,
offset,
orderBy,
options,
)
.then((request) => request(axios, basePath));
},
/**
Expand Down Expand Up @@ -8617,7 +8658,7 @@ export const TasksApiFactory = function (
postScheduledTaskScheduledTasksPost(
postScheduledTaskRequest: PostScheduledTaskRequest,
options?: any,
): AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTaskLeaf> {
): AxiosPromise<ApiServerModelsTortoiseModelsScheduledTaskScheduledTask> {
return localVarFp
.postScheduledTaskScheduledTasksPost(postScheduledTaskRequest, options)
.then((request) => request(axios, basePath));
Expand Down Expand Up @@ -8780,6 +8821,8 @@ export class TasksApi extends BaseAPI {
/**
*
* @summary Get Scheduled Tasks
* @param {string} startBefore Only return scheduled tasks that start before given timestamp
* @param {string} untilAfter Only return scheduled tasks that stop after given timestamp
* @param {number} [limit] defaults to 100
* @param {number} [offset] defaults to 0
* @param {string} [orderBy] common separated list of fields to order by, prefix with \&#39;-\&#39; to sort descendingly.
Expand All @@ -8788,13 +8831,15 @@ export class TasksApi extends BaseAPI {
* @memberof TasksApi
*/
public getScheduledTasksScheduledTasksGet(
startBefore: string,
untilAfter: string,
limit?: number,
offset?: number,
orderBy?: string,
options?: AxiosRequestConfig,
) {
return TasksApiFp(this.configuration)
.getScheduledTasksScheduledTasksGet(limit, offset, orderBy, options)
.getScheduledTasksScheduledTasksGet(startBefore, untilAfter, limit, offset, orderBy, options)
.then((request) => request(this.axios, this.basePath));
}

Expand Down
2 changes: 1 addition & 1 deletion packages/api-client/lib/version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import { version as rmfModelVer } from 'rmf-models';

export const version = {
rmfModels: rmfModelVer,
rmfServer: '30349c85b01862cdfb944bb94e4980065e817e0c',
rmfServer: '3bf607613b024426c272808520a476744fc80f3e',
openapiGenerator: '6.2.1',
};
56 changes: 45 additions & 11 deletions packages/api-client/schema/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -965,6 +965,30 @@ export default {
summary: 'Get Scheduled Tasks',
operationId: 'get_scheduled_tasks_scheduled_tasks_get',
parameters: [
{
description: 'Only return scheduled tasks that start before given timestamp',
required: true,
schema: {
title: 'Start Before',
type: 'string',
description: 'Only return scheduled tasks that start before given timestamp',
format: 'date-time',
},
name: 'start_before',
in: 'query',
},
{
description: 'Only return scheduled tasks that stop after given timestamp',
required: true,
schema: {
title: 'Until After',
type: 'string',
description: 'Only return scheduled tasks that stop after given timestamp',
format: 'date-time',
},
name: 'until_after',
in: 'query',
},
{
description: 'defaults to 100',
required: false,
Expand Down Expand Up @@ -1010,11 +1034,7 @@ export default {
content: {
'application/json': {
schema: {
title: 'Response Get Scheduled Tasks Scheduled Tasks Get',
type: 'array',
items: {
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTask.leaf',
},
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTask_list',
},
},
},
Expand Down Expand Up @@ -1047,7 +1067,7 @@ export default {
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTask.leaf',
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTask',
},
},
},
Expand Down Expand Up @@ -1080,7 +1100,7 @@ export default {
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTask.leaf',
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTask',
},
},
},
Expand Down Expand Up @@ -3500,16 +3520,22 @@ export default {
additionalProperties: false,
description: 'General alert that can be triggered by events.',
},
'api_server.models.tortoise_models.scheduled_task.ScheduledTask.leaf': {
'api_server.models.tortoise_models.scheduled_task.ScheduledTask': {
title: 'ScheduledTask',
required: ['id', 'created_by'],
required: ['id', 'created_by', 'schedules'],
type: 'object',
properties: {
id: { title: 'Id', maximum: 2147483647.0, minimum: 1.0, type: 'integer' },
task_request: { title: 'Task Request' },
created_by: { title: 'Created By', maxLength: 255, type: 'string' },
last_ran: { title: 'Last Ran', type: 'string', format: 'date-time', nullable: true },
next_run: { title: 'Next Run', type: 'string', format: 'date-time', nullable: true },
schedules: {
title: 'Schedules',
type: 'array',
items: {
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTaskSchedule.leaf',
},
},
},
additionalProperties: false,
},
Expand All @@ -3525,7 +3551,8 @@ export default {
type: 'integer',
nullable: true,
},
to: { title: 'To', maximum: 32767.0, minimum: -32768.0, type: 'integer', nullable: true },
start_from: { title: 'Start From', type: 'string', format: 'date-time', nullable: true },
until: { title: 'Until', type: 'string', format: 'date-time', nullable: true },
period: {
title: 'Period',
maxLength: 9,
Expand All @@ -3539,6 +3566,13 @@ export default {
description:
'The schedules for a scheduled task request.<br/>A scheduled task may have multiple schedules.',
},
'api_server.models.tortoise_models.scheduled_task.ScheduledTask_list': {
title: 'ScheduledTask_list',
type: 'array',
items: {
$ref: '#/components/schemas/api_server.models.tortoise_models.scheduled_task.ScheduledTask',
},
},
'api_server.models.tortoise_models.tasks.TaskFavorite.leaf': {
title: 'TaskFavorite',
required: ['id', 'name', 'category', 'user'],
Expand Down
Loading

0 comments on commit bd1b279

Please sign in to comment.