mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
the mqs are storing a models.Task, which was not incorporating all the fields that are in a task.Config. I would very much like to merge these two things, but expect to do this in a future restructuring as both are used widely and not cordoned off properly (Config has a channel, stdin, stdout, stderr -- and isn't just a 'config', so to speak, as Task is). Since a task.Config is what is used to actually run a container, the result of the aforementioned deficiency was #193 where tasks are improperly configured and ran (namely, memory wrong). async tasks can still not be hot, they will be reverted to default format. would also like to fix this (also part of restructuring). I actually started doing this, hence the changes to those files (the surface area of the change is small and discourages improper future use, so I've left what I've done). this will: closes #193 closes #195 closes #154 removes many unused fields in models.Task, since we have not implemented retries. priority & delay are left, even though they are not used either, the main goal of this is to resolve #193 and both these fields are strongly plumbed into all the mqs, so punting on those two.
760 lines
20 KiB
YAML
760 lines
20 KiB
YAML
# This is the Oracle Functions API spec
|
|
# If you make changes here, remember to run `go generate` in api/models/ and
|
|
# api/server to make sure you use the changes.
|
|
|
|
swagger: '2.0'
|
|
info:
|
|
title: Oracle Functions
|
|
description: The open source serverless platform.
|
|
version: "0.1.35"
|
|
# the domain of the service
|
|
host: "127.0.0.1:8080"
|
|
# array of all schemes that your API supports
|
|
schemes:
|
|
- https
|
|
- http
|
|
# will be prefixed to all paths
|
|
basePath: /v1
|
|
consumes:
|
|
- application/json
|
|
produces:
|
|
- application/json
|
|
paths:
|
|
/version:
|
|
get:
|
|
summary: "Get daemon version."
|
|
tags:
|
|
- Version
|
|
responses:
|
|
200:
|
|
description: Daemon version.
|
|
schema:
|
|
$ref: '#/definitions/Version'
|
|
/apps:
|
|
get:
|
|
summary: "Get all app names."
|
|
description: "Get a list of all the apps in the system."
|
|
tags:
|
|
- Apps
|
|
responses:
|
|
200:
|
|
description: List of apps.
|
|
schema:
|
|
$ref: '#/definitions/AppsWrapper'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
post:
|
|
summary: "Post new app"
|
|
description: "Insert a new app"
|
|
tags:
|
|
- Apps
|
|
parameters:
|
|
- name: body
|
|
in: body
|
|
description: App to post.
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/AppWrapper'
|
|
responses:
|
|
200:
|
|
description: App details and stats.
|
|
schema:
|
|
$ref: '#/definitions/AppWrapper'
|
|
400:
|
|
description: Parameters are missing or invalid.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
409:
|
|
description: App already exists.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
|
|
/apps/{app}:
|
|
delete:
|
|
summary: "Delete an app."
|
|
description: "Delete an app."
|
|
tags:
|
|
- Apps
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: Name of the app.
|
|
required: true
|
|
type: string
|
|
responses:
|
|
200:
|
|
description: Apps successfully deleted.
|
|
404:
|
|
description: App does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
get:
|
|
summary: "Get information for a app."
|
|
description: "This gives more details about a app, such as statistics."
|
|
tags:
|
|
- Apps
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: name of the app.
|
|
required: true
|
|
type: string
|
|
responses:
|
|
200:
|
|
description: App details and stats.
|
|
schema:
|
|
$ref: '#/definitions/AppWrapper'
|
|
404:
|
|
description: App does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
patch:
|
|
summary: "Updates an app."
|
|
description: "You can set app level settings here. "
|
|
tags:
|
|
- Apps
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: name of the app.
|
|
required: true
|
|
type: string
|
|
- name: body
|
|
in: body
|
|
description: App to post.
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/AppWrapper'
|
|
responses:
|
|
200:
|
|
description: App details and stats.
|
|
schema:
|
|
$ref: '#/definitions/AppWrapper'
|
|
400:
|
|
description: Parameters are missing or invalid.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
404:
|
|
description: App does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
/apps/{app}/routes:
|
|
post:
|
|
summary: Create new Route
|
|
description: Create a new route in an app, if app doesn't exists, it creates the app. Post does not skip validation of zero values.
|
|
tags:
|
|
- Routes
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: name of the app.
|
|
required: true
|
|
type: string
|
|
- name: body
|
|
in: body
|
|
description: One route to post.
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/RouteWrapper'
|
|
responses:
|
|
200:
|
|
description: Route created
|
|
schema:
|
|
$ref: '#/definitions/RouteWrapper'
|
|
400:
|
|
description: Invalid route due to parameters being missing or invalid.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
409:
|
|
description: Route already exists.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
get:
|
|
summary: Get route list by app name.
|
|
description: This will list routes for a particular app.
|
|
tags:
|
|
- Routes
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: Name of app for this set of routes.
|
|
required: true
|
|
type: string
|
|
responses:
|
|
200:
|
|
description: Route information
|
|
schema:
|
|
$ref: '#/definitions/RoutesWrapper'
|
|
404:
|
|
description: App does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
/apps/{app}/routes/{route}:
|
|
put:
|
|
summary: Create a Route if it does not exist. Update if it does. Will also create app if it does not exist. Put does not skip validation of zero values
|
|
description: Update or Create a route
|
|
tags:
|
|
- Routes
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: name of the app.
|
|
required: true
|
|
type: string
|
|
- name: route
|
|
in: path
|
|
description: route path.
|
|
required: true
|
|
type: string
|
|
- name: body
|
|
in: body
|
|
description: One route to post.
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/RouteWrapper'
|
|
responses:
|
|
200:
|
|
description: Route created or updated
|
|
schema:
|
|
$ref: '#/definitions/RouteWrapper'
|
|
400:
|
|
description: Invalid route due to parameters being missing or invalid.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
patch:
|
|
summary: Update a Route, Fails if the route or app does not exist. Accepts partial updates / skips validation of zero values.
|
|
description: Update a route
|
|
tags:
|
|
- Routes
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: name of the app.
|
|
required: true
|
|
type: string
|
|
- name: route
|
|
in: path
|
|
description: route path.
|
|
required: true
|
|
type: string
|
|
- name: body
|
|
in: body
|
|
description: One route to post.
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/RouteWrapper'
|
|
responses:
|
|
200:
|
|
description: Route updated
|
|
schema:
|
|
$ref: '#/definitions/RouteWrapper'
|
|
400:
|
|
description: Invalid route due to parameters being missing or invalid.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
404:
|
|
description: App / Route does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
get:
|
|
summary: Gets route by name
|
|
description: Gets a route by name.
|
|
tags:
|
|
- Routes
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: Name of app for this set of routes.
|
|
required: true
|
|
type: string
|
|
- name: route
|
|
in: path
|
|
description: Route name
|
|
required: true
|
|
type: string
|
|
responses:
|
|
200:
|
|
description: Route information
|
|
schema:
|
|
$ref: '#/definitions/RouteWrapper'
|
|
404:
|
|
description: Route does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
delete:
|
|
summary: Deletes the route
|
|
tags:
|
|
- Routes
|
|
description: Deletes the route.
|
|
parameters:
|
|
- name: app
|
|
in: path
|
|
description: Name of app for this set of routes.
|
|
required: true
|
|
type: string
|
|
- name: route
|
|
in: path
|
|
description: Route name
|
|
required: true
|
|
type: string
|
|
responses:
|
|
200:
|
|
description: Route successfully deleted.
|
|
404:
|
|
description: Route does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
/apps/{app}/calls/{call}/log:
|
|
get:
|
|
summary: Get call logs
|
|
description: Get call logs
|
|
tags:
|
|
- Call
|
|
- Log
|
|
parameters:
|
|
- name: app
|
|
description: App Name
|
|
required: true
|
|
type: string
|
|
in: path
|
|
- name: call
|
|
description: Call ID.
|
|
required: true
|
|
type: string
|
|
in: path
|
|
responses:
|
|
200:
|
|
description: Log found
|
|
schema:
|
|
$ref: '#/definitions/LogWrapper'
|
|
404:
|
|
description: Log not found.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
delete:
|
|
summary: Delete call log entry
|
|
description: Delete call log entry
|
|
tags:
|
|
- Call
|
|
- Log
|
|
parameters:
|
|
- name: call
|
|
description: Call ID.
|
|
required: true
|
|
type: string
|
|
in: path
|
|
- name: app
|
|
description: App name.
|
|
required: true
|
|
type: string
|
|
in: path
|
|
responses:
|
|
202:
|
|
description: Log delete request accepted
|
|
404:
|
|
description: Does not exist.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
/apps/{app}/calls/{call}:
|
|
get:
|
|
summary: Get call information
|
|
description: Get call information
|
|
tags:
|
|
- Call
|
|
parameters:
|
|
- name: app
|
|
description: app name
|
|
required: true
|
|
type: string
|
|
in: path
|
|
- name: call
|
|
description: Call ID.
|
|
required: true
|
|
type: string
|
|
in: path
|
|
responses:
|
|
200:
|
|
description: Call found
|
|
schema:
|
|
$ref: '#/definitions/CallWrapper'
|
|
404:
|
|
description: Call not found.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
/apps/{app}/calls:
|
|
get:
|
|
summary: Get app-bound calls.
|
|
description: Get app-bound calls can filter to route-bound calls.
|
|
tags:
|
|
- Call
|
|
parameters:
|
|
- name: app
|
|
description: App name.
|
|
required: true
|
|
type: string
|
|
in: path
|
|
- name: route
|
|
description: App route.
|
|
required: false
|
|
type: string
|
|
in: query
|
|
responses:
|
|
200:
|
|
description: Calls found
|
|
schema:
|
|
$ref: '#/definitions/CallsWrapper'
|
|
404:
|
|
description: Calls not found.
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
/tasks:
|
|
get:
|
|
summary: Get next task.
|
|
description: Gets the next task in the queue, ready for processing. Consumers should start processing tasks in order. No other consumer can retrieve this task.
|
|
tags:
|
|
- Tasks
|
|
responses:
|
|
200:
|
|
description: Task information
|
|
schema:
|
|
$ref: '#/definitions/TaskWrapper'
|
|
default:
|
|
description: Unexpected error
|
|
schema:
|
|
$ref: '#/definitions/Error'
|
|
|
|
|
|
definitions:
|
|
Route:
|
|
type: object
|
|
properties:
|
|
path:
|
|
type: string
|
|
description: URL path that will be matched to this route
|
|
readOnly: true
|
|
image:
|
|
description: Name of Docker image to use in this route. You should include the image tag, which should be a version number, to be more accurate. Can be overridden on a per route basis with route.image.
|
|
type: string
|
|
headers:
|
|
type: object
|
|
description: Map of http headers that will be sent with the response
|
|
additionalProperties:
|
|
type: array
|
|
items:
|
|
type: string
|
|
memory:
|
|
type: integer
|
|
format: int64
|
|
description: Max usable memory for this route (MiB).
|
|
type:
|
|
enum:
|
|
- sync
|
|
- async
|
|
description: Route type
|
|
type: string
|
|
format:
|
|
enum:
|
|
- default
|
|
- http
|
|
- json
|
|
description: Payload format sent into function.
|
|
type: string
|
|
config:
|
|
type: object
|
|
description: Route configuration - overrides application configuration
|
|
additionalProperties:
|
|
type: string
|
|
timeout:
|
|
type: integer
|
|
default: 30
|
|
format: int32
|
|
description: Timeout for executions of this route. Value in Seconds
|
|
idle_timeout:
|
|
type: integer
|
|
default: 30
|
|
format: int32
|
|
description: Hot functions idle timeout before termination. Value in Seconds
|
|
|
|
App:
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: "Name of this app. Must be different than the image name. Can ony contain alphanumeric, -, and _."
|
|
readOnly: true
|
|
config:
|
|
type: object
|
|
description: Application configuration
|
|
additionalProperties:
|
|
type: string
|
|
|
|
Version:
|
|
type: object
|
|
properties:
|
|
version:
|
|
type: string
|
|
readOnly: true
|
|
|
|
RoutesWrapper:
|
|
type: object
|
|
required:
|
|
- routes
|
|
properties:
|
|
routes:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Route'
|
|
error:
|
|
$ref: '#/definitions/ErrorBody'
|
|
|
|
RouteWrapper:
|
|
type: object
|
|
required:
|
|
- route
|
|
properties:
|
|
message:
|
|
type: string
|
|
error:
|
|
$ref: '#/definitions/ErrorBody'
|
|
route:
|
|
$ref: '#/definitions/Route'
|
|
|
|
AppsWrapper:
|
|
type: object
|
|
required:
|
|
- apps
|
|
properties:
|
|
apps:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/App'
|
|
error:
|
|
$ref: '#/definitions/ErrorBody'
|
|
|
|
AppWrapper:
|
|
type: object
|
|
required:
|
|
- app
|
|
properties:
|
|
app:
|
|
$ref: '#/definitions/App'
|
|
error:
|
|
$ref: '#/definitions/ErrorBody'
|
|
|
|
CallsWrapper:
|
|
type: object
|
|
required:
|
|
- calls
|
|
properties:
|
|
calls:
|
|
type: array
|
|
items:
|
|
$ref: '#/definitions/Call'
|
|
error:
|
|
$ref: '#/definitions/ErrorBody'
|
|
|
|
CallWrapper:
|
|
type: object
|
|
required:
|
|
- call
|
|
properties:
|
|
call:
|
|
$ref: '#/definitions/Call'
|
|
description: "Call object."
|
|
|
|
|
|
LogWrapper:
|
|
type: object
|
|
required:
|
|
- log
|
|
properties:
|
|
log:
|
|
$ref: '#/definitions/Log'
|
|
description: "Call log entry."
|
|
|
|
Log:
|
|
type: object
|
|
properties:
|
|
call_id:
|
|
type: string
|
|
description: Call UUID ID
|
|
log:
|
|
type: string # maybe bytes, long logs wouldn't fit into string type
|
|
|
|
Call:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Call UUID ID.
|
|
readOnly: true
|
|
status:
|
|
type: string
|
|
description: Call execution status.
|
|
readOnly: true
|
|
app_name:
|
|
type: string
|
|
description: App name that is assigned to a route that is being executed.
|
|
readOnly: true
|
|
path:
|
|
type: string
|
|
description: App route that is being executed.
|
|
readOnly: true
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
description: Time when call was submitted. Always in UTC.
|
|
readOnly: true
|
|
started_at:
|
|
type: string
|
|
format: date-time
|
|
description: Time when call started execution. Always in UTC.
|
|
readOnly: true
|
|
completed_at:
|
|
type: string
|
|
format: date-time
|
|
description: Time when call completed, whether it was successul or failed. Always in UTC.
|
|
readOnly: true
|
|
|
|
Task:
|
|
type: object
|
|
required:
|
|
- image
|
|
properties:
|
|
image:
|
|
type: string
|
|
description: Name of Docker image to use. This is optional and can be used to override the image defined at the group level.
|
|
payload:
|
|
type: string
|
|
# 256k
|
|
# maxLength breaks ruby generator too
|
|
# maxLength: 268435456
|
|
description: Payload for the task. This is what you pass into each task to make it do something.
|
|
group_name:
|
|
type: string
|
|
description: "Group this task belongs to."
|
|
readOnly: true
|
|
error:
|
|
type: string
|
|
description: "The error message, if status is 'error'. This is errors due to things outside the task itself. Errors from user code will be found in the log."
|
|
reason:
|
|
type: string
|
|
description: |
|
|
Machine usable reason for task being in this state.
|
|
Valid values for error status are `timeout | killed | bad_exit`.
|
|
Valid values for cancelled status are `client_request`.
|
|
For everything else, this is undefined.
|
|
enum:
|
|
- timeout
|
|
- killed
|
|
- bad_exit
|
|
- client_request
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
description: Time when task was submitted. Always in UTC.
|
|
readOnly: true
|
|
started_at:
|
|
type: string
|
|
format: date-time
|
|
description: Time when task started execution. Always in UTC.
|
|
completed_at:
|
|
type: string
|
|
format: date-time
|
|
description: Time when task completed, whether it was successul or failed. Always in UTC.
|
|
# We maintain a doubly linked list of the retried task to the
|
|
# original task.
|
|
retry_of:
|
|
type: string
|
|
description: If this field is set, then this task is a retry of the ID in this field.
|
|
readOnly: true
|
|
retry_at:
|
|
type: string
|
|
description: If this field is set, then this task was retried by the task referenced in this field.
|
|
readOnly: true
|
|
env_vars:
|
|
# this is a map: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#model-with-mapdictionary-properties
|
|
type: object
|
|
description: Env vars for the task. Comes from the ones set on the Group.
|
|
additionalProperties:
|
|
type: string
|
|
|
|
ErrorBody:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
readOnly: true
|
|
fields:
|
|
type: string
|
|
readOnly: true
|
|
|
|
Error:
|
|
type: object
|
|
properties:
|
|
error:
|
|
$ref: '#/definitions/ErrorBody'
|
|
|
|
TaskWrapper:
|
|
type: object
|
|
required:
|
|
- task
|
|
properties:
|
|
task:
|
|
$ref: '#/definitions/Task'
|