openapi: 3.0.0
info:
  title: WebFaceSimulator API scheme
  version: 0.0.0
servers:
  - url: /api
    description: main server endpoint
    variables: {}
paths:
  /cron:
    get:
      description: "Advances the task queue. Executes any runnable processes and updates their state. Should be called periodically, e.g., every minute."
      operationId: Background_cron
      responses:
        '204':
          description: >-
            There is no content to send for this request, but the headers may be
            useful. 
  /image:
    get:
      description: "Lists docker images that can be specified as a job runner. FaceSimulator is one of them."
      operationId: Images_list
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
  /job:
    get:
      description: "Returns a list of jobs."
      operationId: Jobs_list
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Job'
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
    post:
      description: "Starts a new job.\n\t- filedata (required): List of files required for execution, to be uploaded. Can be empty if not needed.\n\t- filepath (required): Paths for filedata, extracted according to these paths.\n\t- image (required): Docker image to execute the job.\n\t- config: JSON file for configuration. If not specified, inferred from file (top-level file with .json extension)."
      operationId: Jobs_push
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                filedata:
                  type: array
                  items:
                    type: string
                    format: binary
                filepath:
                  type: array
                  items:
                    type: string
                image:
                  type: string
                config:
                  type: string
              required:
                - filedata
                - filepath
                - image
            encoding:
              filedata:
                contentType: '*/*'
              filepath:
                contentType: text/plain
        required: true
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
  '/job/{id}':
    delete:
      description: "Deletes a job."
      operationId: Jobs_delete
      parameters:
        - in: path
          name: id
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
          style: simple
      responses:
        '204':
          description: >-
            There is no content to send for this request, but the headers may be
            useful. 
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
        '404':
          description: The server cannot find the requested resource.
          content:
            text/plain:
              schema:
                type: string
  '/job/{id}/files':
    get:
      description: "Returns a list of files for the job."
      operationId: Jobs_filelist
      parameters:
        - in: path
          name: id
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
          style: simple
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
        '404':
          description: The server cannot find the requested resource.
          content:
            text/plain:
              schema:
                type: string
  '/job/{id}/files/{path_file}':
    get:
      description: "Delivers a file for the job. path_file can include / (slashes)."
      operationId: Jobs_file
      parameters:
        - in: path
          name: id
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
          style: simple
        - in: path
          name: path_file
          required: true
          schema:
            type: string
          style: simple
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
        '404':
          description: The server cannot find the requested resource.
          content:
            text/plain:
              schema:
                type: string
  '/job/{id}/tasks':
    get:
      description: "Returns a list of tasks for the job."
      operationId: Jobs_tasklist
      parameters:
        - in: path
          name: id
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
          style: simple
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
        '404':
          description: The server cannot find the requested resource.
          content:
            text/plain:
              schema:
                type: string
  /status:
    get:
      description: "Retrieves system information (GPU usage status) and running tasks."
      operationId: StatusInterface_status
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
  /task:
    get:
      operationId: Tasks_list
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
  '/task/{id}':
    delete:
      operationId: Tasks_stop
      parameters:
        - in: path
          name: id
          required: true
          schema:
            $ref: '#/components/schemas/UUID'
          style: simple
      responses:
        '204':
          description: >-
            There is no content to send for this request, but the headers may be
            useful. 
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            text/plain:
              schema:
                type: string
        '404':
          description: The server cannot find the requested resource.
          content:
            text/plain:
              schema:
                type: string
components:
  schemas:
    Device:
      type: object
      properties:
        name:
          type: string
        memory_used_megabytes:
          type: integer
          format: int32
        memory_size_megabytes:
          type: integer
          format: int32
      required:
        - name
        - memory_used_megabytes
        - memory_size_megabytes
    Job:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/UUID'
        id_owner:
          $ref: '#/components/schemas/UUID'
        id_point:
          $ref: '#/components/schemas/UUID'
        string_name:
          type: string
        string_main:
          type: string
        string_kind:
          type: string
        string_tags:
          type: array
          items:
            type: string
        file_path:
          type: string
        file_name:
          type: string
          format: byte
        file_main:
          type: string
          format: byte
        time_generate:
          type: string
          format: date-time
        time_deploy:
          type: string
          format: date-time
        time_update:
          type: string
          format: date-time
        count_watch:
          type: integer
          format: int32
        count_comment:
          type: integer
          format: int32
        count_bookmark:
          type: integer
          format: int32
        float_progress_generate:
          type: number
          format: float
        float_progress_deploy:
          type: number
          format: float
        json_conf:
          type: string
        json_logs:
          type: string
      required:
        - id
        - id_owner
        - id_point
        - string_name
        - string_main
        - string_kind
        - string_tags
        - file_path
        - file_name
        - file_main
        - time_generate
        - time_deploy
        - time_update
        - count_watch
        - count_comment
        - count_bookmark
        - float_progress_generate
        - float_progress_deploy
        - json_conf
        - json_logs
    Status:
      type: object
      properties:
        device:
          type: array
          items:
            $ref: '#/components/schemas/Device'
      required:
        - device
    Task:
      type: object
      properties:
        job:
          $ref: '#/components/schemas/UUID'
        target:
          type: string
        code:
          type: integer
          format: int32
        is_running:
          type: boolean
        is_completed:
          type: boolean
      required:
        - job
        - target
        - code
        - is_running
        - is_completed
    UUID:
      type: string
      format: uuid
