Browse Source
feat(TaskProcessingApi): Add endpoint for getting the next task
feat(TaskProcessingApi): Add endpoint for getting the next task
Signed-off-by: provokateurin <kate@provokateurin.de>pull/45391/head
Failed to extract signature
10 changed files with 9759 additions and 410 deletions
-
183core/Controller/TaskProcessingApiController.php
-
844core/openapi-administration.json
-
2core/openapi-administration.json.license
-
8701core/openapi-full.json
-
2core/openapi-full.json.license
-
338core/openapi.json
-
33lib/private/TaskProcessing/Db/TaskMapper.php
-
40lib/private/TaskProcessing/Manager.php
-
4lib/private/TaskProcessing/SynchronousBackgroundJob.php
-
22lib/public/TaskProcessing/IManager.php
@ -0,0 +1,844 @@ |
|||
{ |
|||
"openapi": "3.0.3", |
|||
"info": { |
|||
"title": "core-administration", |
|||
"version": "0.0.1", |
|||
"description": "Core functionality of Nextcloud", |
|||
"license": { |
|||
"name": "agpl" |
|||
} |
|||
}, |
|||
"components": { |
|||
"securitySchemes": { |
|||
"basic_auth": { |
|||
"type": "http", |
|||
"scheme": "basic" |
|||
}, |
|||
"bearer_auth": { |
|||
"type": "http", |
|||
"scheme": "bearer" |
|||
} |
|||
}, |
|||
"schemas": { |
|||
"Capabilities": { |
|||
"type": "object", |
|||
"required": [ |
|||
"core" |
|||
], |
|||
"properties": { |
|||
"core": { |
|||
"type": "object", |
|||
"required": [ |
|||
"pollinterval", |
|||
"webdav-root", |
|||
"reference-api", |
|||
"reference-regex", |
|||
"mod-rewrite-working" |
|||
], |
|||
"properties": { |
|||
"pollinterval": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
}, |
|||
"webdav-root": { |
|||
"type": "string" |
|||
}, |
|||
"reference-api": { |
|||
"type": "boolean" |
|||
}, |
|||
"reference-regex": { |
|||
"type": "string" |
|||
}, |
|||
"mod-rewrite-working": { |
|||
"type": "boolean" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"OCSMeta": { |
|||
"type": "object", |
|||
"required": [ |
|||
"status", |
|||
"statuscode" |
|||
], |
|||
"properties": { |
|||
"status": { |
|||
"type": "string" |
|||
}, |
|||
"statuscode": { |
|||
"type": "integer" |
|||
}, |
|||
"message": { |
|||
"type": "string" |
|||
}, |
|||
"totalitems": { |
|||
"type": "string" |
|||
}, |
|||
"itemsperpage": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
}, |
|||
"PublicCapabilities": { |
|||
"type": "object", |
|||
"required": [ |
|||
"bruteforce" |
|||
], |
|||
"properties": { |
|||
"bruteforce": { |
|||
"type": "object", |
|||
"required": [ |
|||
"delay", |
|||
"allow-listed" |
|||
], |
|||
"properties": { |
|||
"delay": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
}, |
|||
"allow-listed": { |
|||
"type": "boolean" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"TaskProcessingIO": { |
|||
"type": "object", |
|||
"additionalProperties": { |
|||
"anyOf": [ |
|||
{ |
|||
"type": "number" |
|||
}, |
|||
{ |
|||
"type": "array", |
|||
"items": { |
|||
"type": "number" |
|||
} |
|||
}, |
|||
{ |
|||
"type": "string" |
|||
}, |
|||
{ |
|||
"type": "array", |
|||
"items": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
] |
|||
} |
|||
}, |
|||
"TaskProcessingTask": { |
|||
"type": "object", |
|||
"required": [ |
|||
"id", |
|||
"lastUpdated", |
|||
"type", |
|||
"status", |
|||
"userId", |
|||
"appId", |
|||
"input", |
|||
"output", |
|||
"customId", |
|||
"completionExpectedAt", |
|||
"progress" |
|||
], |
|||
"properties": { |
|||
"id": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
}, |
|||
"lastUpdated": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
}, |
|||
"type": { |
|||
"type": "string" |
|||
}, |
|||
"status": { |
|||
"type": "string", |
|||
"enum": [ |
|||
"STATUS_CANCELLED", |
|||
"STATUS_FAILED", |
|||
"STATUS_SUCCESSFUL", |
|||
"STATUS_RUNNING", |
|||
"STATUS_SCHEDULED", |
|||
"STATUS_UNKNOWN" |
|||
] |
|||
}, |
|||
"userId": { |
|||
"type": "string", |
|||
"nullable": true |
|||
}, |
|||
"appId": { |
|||
"type": "string" |
|||
}, |
|||
"input": { |
|||
"$ref": "#/components/schemas/TaskProcessingIO" |
|||
}, |
|||
"output": { |
|||
"$ref": "#/components/schemas/TaskProcessingIO", |
|||
"nullable": true |
|||
}, |
|||
"customId": { |
|||
"type": "string", |
|||
"nullable": true |
|||
}, |
|||
"completionExpectedAt": { |
|||
"type": "integer", |
|||
"format": "int64", |
|||
"nullable": true |
|||
}, |
|||
"progress": { |
|||
"type": "number", |
|||
"format": "double", |
|||
"nullable": true |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"paths": { |
|||
"/ocs/v2.php/taskprocessing/tasks_provider/{taskId}/file/{fileId}": { |
|||
"get": { |
|||
"operationId": "task_processing_api-get-file-contents-ex-app", |
|||
"summary": "Returns the contents of a file referenced in a task(ExApp route version)", |
|||
"description": "This endpoint requires admin access", |
|||
"tags": [ |
|||
"task_processing_api" |
|||
], |
|||
"security": [ |
|||
{ |
|||
"bearer_auth": [] |
|||
}, |
|||
{ |
|||
"basic_auth": [] |
|||
} |
|||
], |
|||
"parameters": [ |
|||
{ |
|||
"name": "taskId", |
|||
"in": "path", |
|||
"description": "The id of the task", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "fileId", |
|||
"in": "path", |
|||
"description": "The file id of the file to retrieve", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "OCS-APIRequest", |
|||
"in": "header", |
|||
"description": "Required to be true for the API request to pass", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "boolean", |
|||
"default": true |
|||
} |
|||
} |
|||
], |
|||
"responses": { |
|||
"200": { |
|||
"description": "File content returned", |
|||
"content": { |
|||
"*/*": { |
|||
"schema": { |
|||
"type": "string", |
|||
"format": "binary" |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"500": { |
|||
"description": "", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"message" |
|||
], |
|||
"properties": { |
|||
"message": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"404": { |
|||
"description": "Task or file not found", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"message" |
|||
], |
|||
"properties": { |
|||
"message": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"/ocs/v2.php/taskprocessing/tasks_provider/{taskId}/progress": { |
|||
"post": { |
|||
"operationId": "task_processing_api-set-progress", |
|||
"summary": "Sets the task progress", |
|||
"description": "This endpoint requires admin access", |
|||
"tags": [ |
|||
"task_processing_api" |
|||
], |
|||
"security": [ |
|||
{ |
|||
"bearer_auth": [] |
|||
}, |
|||
{ |
|||
"basic_auth": [] |
|||
} |
|||
], |
|||
"parameters": [ |
|||
{ |
|||
"name": "progress", |
|||
"in": "query", |
|||
"description": "The progress", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "number", |
|||
"format": "double" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "taskId", |
|||
"in": "path", |
|||
"description": "The id of the task", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "OCS-APIRequest", |
|||
"in": "header", |
|||
"description": "Required to be true for the API request to pass", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "boolean", |
|||
"default": true |
|||
} |
|||
} |
|||
], |
|||
"responses": { |
|||
"200": { |
|||
"description": "Progress updated successfully", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"task" |
|||
], |
|||
"properties": { |
|||
"task": { |
|||
"$ref": "#/components/schemas/TaskProcessingTask" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"500": { |
|||
"description": "", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"message" |
|||
], |
|||
"properties": { |
|||
"message": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"404": { |
|||
"description": "Task not found", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"message" |
|||
], |
|||
"properties": { |
|||
"message": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"/ocs/v2.php/taskprocessing/tasks_provider/{taskId}/result": { |
|||
"post": { |
|||
"operationId": "task_processing_api-set-result", |
|||
"summary": "Sets the task result", |
|||
"description": "This endpoint requires admin access", |
|||
"tags": [ |
|||
"task_processing_api" |
|||
], |
|||
"security": [ |
|||
{ |
|||
"bearer_auth": [] |
|||
}, |
|||
{ |
|||
"basic_auth": [] |
|||
} |
|||
], |
|||
"parameters": [ |
|||
{ |
|||
"name": "output", |
|||
"in": "query", |
|||
"description": "The resulting task output", |
|||
"schema": { |
|||
"type": "string", |
|||
"nullable": true |
|||
} |
|||
}, |
|||
{ |
|||
"name": "errorMessage", |
|||
"in": "query", |
|||
"description": "An error message if the task failed", |
|||
"schema": { |
|||
"type": "string", |
|||
"nullable": true |
|||
} |
|||
}, |
|||
{ |
|||
"name": "taskId", |
|||
"in": "path", |
|||
"description": "The id of the task", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "integer", |
|||
"format": "int64" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "OCS-APIRequest", |
|||
"in": "header", |
|||
"description": "Required to be true for the API request to pass", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "boolean", |
|||
"default": true |
|||
} |
|||
} |
|||
], |
|||
"responses": { |
|||
"200": { |
|||
"description": "Result updated successfully", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"task" |
|||
], |
|||
"properties": { |
|||
"task": { |
|||
"$ref": "#/components/schemas/TaskProcessingTask" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"500": { |
|||
"description": "", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"message" |
|||
], |
|||
"properties": { |
|||
"message": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"404": { |
|||
"description": "Task not found", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"message" |
|||
], |
|||
"properties": { |
|||
"message": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"/ocs/v2.php/taskprocessing/tasks_provider/next": { |
|||
"get": { |
|||
"operationId": "task_processing_api-get-next-scheduled-task", |
|||
"summary": "Returns the next scheduled task for the taskTypeId", |
|||
"description": "This endpoint requires admin access", |
|||
"tags": [ |
|||
"task_processing_api" |
|||
], |
|||
"security": [ |
|||
{ |
|||
"bearer_auth": [] |
|||
}, |
|||
{ |
|||
"basic_auth": [] |
|||
} |
|||
], |
|||
"parameters": [ |
|||
{ |
|||
"name": "providerIds[]", |
|||
"in": "query", |
|||
"description": "The ids of the providers", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "array", |
|||
"items": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
"name": "taskTypeIds[]", |
|||
"in": "query", |
|||
"description": "The ids of the task types", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "array", |
|||
"items": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
"name": "OCS-APIRequest", |
|||
"in": "header", |
|||
"description": "Required to be true for the API request to pass", |
|||
"required": true, |
|||
"schema": { |
|||
"type": "boolean", |
|||
"default": true |
|||
} |
|||
} |
|||
], |
|||
"responses": { |
|||
"200": { |
|||
"description": "Task returned", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"task", |
|||
"provider" |
|||
], |
|||
"properties": { |
|||
"task": { |
|||
"$ref": "#/components/schemas/TaskProcessingTask" |
|||
}, |
|||
"provider": { |
|||
"type": "object", |
|||
"required": [ |
|||
"name" |
|||
], |
|||
"properties": { |
|||
"name": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"204": { |
|||
"description": "No task found" |
|||
}, |
|||
"500": { |
|||
"description": "", |
|||
"content": { |
|||
"application/json": { |
|||
"schema": { |
|||
"type": "object", |
|||
"required": [ |
|||
"ocs" |
|||
], |
|||
"properties": { |
|||
"ocs": { |
|||
"type": "object", |
|||
"required": [ |
|||
"meta", |
|||
"data" |
|||
], |
|||
"properties": { |
|||
"meta": { |
|||
"$ref": "#/components/schemas/OCSMeta" |
|||
}, |
|||
"data": { |
|||
"type": "object", |
|||
"required": [ |
|||
"message" |
|||
], |
|||
"properties": { |
|||
"message": { |
|||
"type": "string" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"tags": [ |
|||
{ |
|||
"name": "avatar", |
|||
"description": "Class AvatarController" |
|||
}, |
|||
{ |
|||
"name": "guest_avatar", |
|||
"description": "This controller handles guest avatar requests." |
|||
}, |
|||
{ |
|||
"name": "ocm", |
|||
"description": "Controller about the endpoint /ocm-provider/" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,2 @@ |
|||
SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors |
|||
SPDX-License-Identifier: AGPL-3.0-or-later |
|||
8701
core/openapi-full.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,2 @@ |
|||
SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors |
|||
SPDX-License-Identifier: AGPL-3.0-or-later |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue