ogrepository/api/swagger.yaml

1721 lines
63 KiB
YAML

swagger: "2.0"
info:
title: "OgRepository API"
version: "1.0"
description: |
API de ogRepository, programada en Flask.
Responde a peticiones HTTP (enviadas desde ogCore) mediante endpoints, que a su vez ejecutan los scripts Python almacenados en ogRepo.
En ciertos casos, transforma los parámetros recibidos desde el portal, para adaptarlos a los que es necesario enviar a los scripts
(por ejemplo, a partir del ID de una imagen obtiene su nombre, su extensión y el subdirectorio de OU).
Librerías Python requeridas:
- flask (se puede instalar con "sudo apt install python3-flask")
- paramiko (se puede instalar con "sudo apt install python3-paramiko")
- requests (se puede instalar con "sudo apt install python3-requests") - No tengo claro que para este paquete sea necesario
- flasgger (se puede instalar con "sudo apt install python3-flasgger")
# -----------------------------------------------------------------------------------------------------------
# Apartado "Estado de ogRepository"
# -----------------------------------------------------------------------------------------------------------
paths:
/ogrepository/v1/status:
get:
summary: "Obtener Información de Estado de ogRepository"
description: >
Este endpoint ejecuta el script "getRepoStatus.py" y devuelve su salida en formato JSON,
incluyendo información sobre la CPU, memoria RAM, disco duro, servicios, y procesos específicos de ogRepository.
tags:
- "Estado de ogRepository"
responses:
"200":
description: "La información de estado se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
properties:
cpu:
type: object
properties:
used_percentage:
type: string
example: "35%"
ram:
type: object
properties:
total:
type: string
example: "7.8GB"
used:
type: string
example: "0.3GB"
available:
type: string
example: "7.2GB"
used_percentage:
type: string
example: "7%"
disk:
type: object
properties:
total:
type: string
example: "11.7GB"
used:
type: string
example: "7.7GB"
available:
type: string
example: "3.4GB"
used_percentage:
type: string
example: "69%"
services:
type: object
properties:
ssh:
type: string
example: "active"
smbd:
type: string
example: "active"
rsync:
type: string
example: "active"
processes:
type: object
properties:
udp-sender:
type: string
example: "stopped"
uftp:
type: string
example: "stopped"
bttrack:
type: string
example: "stopped"
btlaunchmany:
type: string
example: "stopped"
"500 (Error)":
description: "Error al consultar y/o devolver la información de estado."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al consultar y/o devolver la información de estado."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Información de Imágenes"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images:
put:
summary: "Actualizar Información del Repositorio"
description: >
Este endpoint actualiza la información de las imágenes almacenadas en el repositorio, reflejándola en los archivos "repoinfo.json" y "trashinfo.json".
Utiliza el script "updateRepoInfo.py", que también ejecuta "updateTrashInfo.py".
Este proceso se realiza para mantener actualizados los datos del repositorio y la papelera, y debería ser invocado cada vez que se elimine o cree una imagen.
tags:
- "Información de Imágenes"
responses:
"200":
description: "La actualización de la información de las imágenes se realizó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Repository info updated successfully"
"500 (Error)":
description: "Error al actualizar la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al actualizar la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/images:
get:
summary: "Obtener Información de todas las Imágenes"
description: >
Este endpoint ejecuta el script "getRepoInfo.py" con los parámetros "all" y "none" para devolver información
de todas las imágenes almacenadas en el repositorio y en la papelera.
Devuelve detalles como el nombre de la imagen, tipo, nombre del cliente, clonador, compresor, sistema de archivos,
tamaño de los datos, tamaño de la imagen, y hashes MD5.
tags:
- "Información de Imágenes"
responses:
"200":
description: "La información de las imágenes se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
properties:
REPOSITORY:
type: object
properties:
directory:
type: string
example: "/opt/opengnsys/images"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Ubuntu24"
type:
type: string
example: "img"
clientname:
type: string
example: "Ubuntu_24"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "EXTFS"
datasize:
type: integer
example: 9859634200000
size:
type: integer
example: 4505673214
sum:
type: string
example: "065a933c780ab1aaa044435ad5d4bf87"
fullsum:
type: string
example: "33575b9070e4a8043371b8c6ae52b80e"
ous:
type: array
items:
type: object
properties:
subdir:
type: string
example: "OU_subdir"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Ubuntu20"
type:
type: string
example: "img"
clientname:
type: string
example: "Ubuntu_20"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "EXTFS"
datasize:
type: integer
example: 8912896000000
size:
type: integer
example: 3803794535
sum:
type: string
example: "081a933c780ab1aaa044435ad5d4bf56"
fullsum:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
TRASH:
type: object
properties:
directory:
type: string
example: "/opt/opengnsys/images_trash"
images:
type: array
items:
type: object
ous:
type: array
items:
type: object
properties:
subdir:
type: string
example: "CentroVirtual"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Ubuntu20OLD"
type:
type: string
example: "img"
clientname:
type: string
example: "Ubuntu_20"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "EXTFS"
datasize:
type: integer
example: 8912896000000
size:
type: integer
example: 3803794535
sum:
type: string
example: "081a933c780ab1aaa044435ad5d4bf56"
fullsum:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
"500 (Error)":
description: "Error al consultar y/o devolver la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al consultar y/o devolver la información de las imágenes."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images/{imageId}:
get:
summary: "Obtener Información de una Imagen concreta"
description: >
Este endpoint devuelve información de la imagen especificada mediante su ID en formato JSON.
Puede utilizar el script "getRepoInfo.py" que recibe como parámetros el nombre de la imagen con extensión y el subdirectorio correspondiente a la OU (o "none" si no es el caso).
La imagen puede estar en el archivo "/opt/opengnsys/etc/repoinfo.json" (si está almacenada) o en "/opt/opengnsys/etc/trashinfo.json" (si está en la papelera).
tags:
- "Información de Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "El ID de la imagen (corresponde al hash MD5 'fullsum' de la imagen)"
responses:
"200":
description: "La información de la imagen se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
properties:
directory:
type: string
example: "/opt/opengnsys/images"
images:
type: array
items:
type: object
properties:
name:
type: string
example: "Windows10"
type:
type: string
example: "img"
clientname:
type: string
example: "Windows_10"
clonator:
type: string
example: "partclone"
compressor:
type: string
example: "lzop"
filesystem:
type: string
example: "NTFS"
datasize:
type: integer
example: 9859634200000
size:
type: integer
example: 4505673214
sum:
type: string
example: "065a933c780ab1aaa044435ad5d4bf87"
fullsum:
type: string
example: "33575b9070e4a8043371b8c6ae52b80e"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500 (Error)":
description: "Error al consultar y/o devolver la información de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al consultar y/o devolver la información de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/status/images/{imageId}:
get:
summary: "Chequear Integridad de Imagen"
description: >
Este endpoint comprueba la integridad de la imagen especificada como parámetro, comparando el tamaño y el hash MD5 del último MB con los valores almacenados en los archivos ".size" y ".sum".
Utiliza el script "checkImage.py", que recibe el nombre de la imagen (con extensión) y el subdirectorio correspondiente a la OU, si aplica.
tags:
- "Información de Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "El ID de la imagen (corresponde al hash MD5 'fullsum' de la imagen)"
responses:
"200 (Check OK)":
description: "La imagen se ha chequeado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image file passed the Integrity Check correctly"
"200 (Check KO)":
description: "La imagen se ha chequeado exitosamente, pero no ha pasado el test de integridad."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image file didn't pass the Integrity Check"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found (inexistent or deleted)"
"500 (Error)":
description: "Error al chequear la integridad de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al chequear la integridad de la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Eliminar y Recuperar Imágenes"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images/{imageId}?method={method}:
delete:
summary: "Eliminar una Imagen"
description: >
Este endpoint elimina la imagen especificada como parámetro (y todos sus archivos asociados),
moviéndolos a la papelera o eliminándolos permanentemente dependiendo del parámetro "method".
Utiliza el script "deleteImage.py" que recibe el nombre de la imagen (con extensión y subdirectorio correspondiente a la OU, si aplica)
como primer parámetro, y opcionalmente el parámetro "-p" para eliminación permanente.
tags:
- "Eliminar y Recuperar Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "El ID de la imagen (corresponde al hash MD5 'fullsum' de la imagen)"
- name: method
in: query
required: false
type: string
description: "Método de eliminación (puede ser 'trash' para enviar a la papelera o 'permanent' para eliminar definitivamente)"
responses:
"200":
description: "La imagen se eliminó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image deleted successfully"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found (inexistent or deleted)"
"500 (Error)":
description: "Error al eliminar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al eliminar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/trash/images:
post:
summary: "Recuperar una Imagen"
description: >
Este endpoint recupera la imagen especificada, moviéndola desde la papelera al repositorio de imágenes.
Utiliza el script "recoverImage.py", que recibe el nombre de la imagen (con extensión y subdirectorio correspondiente a la OU, si aplica).
tags:
- "Eliminar y Recuperar Imágenes"
parameters:
- name: ID_img
in: body
required: true
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum' asociado)"
schema:
type: object
properties:
ID_img:
type: string
example: "image_id"
responses:
"200":
description: "La imagen se recuperó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image recovered successfully"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found (inexistent or recovered previously)"
"500 (Error)":
description: "Error al recuperar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al recuperar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/trash/images/{imageId}:
delete:
summary: "Eliminar una Imagen de la Papelera"
description: >
Este endpoint elimina permanentemente la imagen especificada desde la papelera.
Utiliza el script "deleteTrashImage.py", que recibe el nombre de la imagen (con extensión y subdirectorio correspondiente a la OU, si aplica).
tags:
- "Eliminar y Recuperar Imágenes"
parameters:
- name: imageId
in: path
required: true
type: string
description: "El ID de la imagen (corresponde al hash MD5 'fullsum' de la imagen en la papelera)"
responses:
"200":
description: "La imagen se eliminó exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image deleted successfully"
"400":
description: "No se ha encontrado la imagen especificada en la papelera."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found at trash"
"500 (Error)":
description: "Error al eliminar la imagen de la papelera."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al eliminar la imagen de la papelera."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Importar y Exportar Imágenes"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/repo/images:
post:
summary: "Importar una Imagen"
description: >
Este endpoint importa la imagen especificada desde un servidor remoto al servidor local.
Utiliza el script "importImage.py", que recibe como parámetros el nombre de la imagen, la IP o hostname del servidor remoto,
el usuario para la conexión, y el subdirectorio correspondiente a la OU (si aplica).
NOTA: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está importando,
y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Importar y Exportar Imágenes"
parameters:
- name: image
in: body
required: true
description: "Nombre de la imagen (con extensión)"
schema:
type: object
properties:
image:
type: string
example: "Windows10.img"
ou_subdir:
type: string
description: "Subdirectorio correspondiente a la OU (o 'none' si no es el caso)"
example: "none"
repo_ip:
type: string
description: "Dirección IP del repositorio remoto"
example: "192.168.56.100"
user:
type: string
description: "Usuario para acceder al repositorio remoto"
example: "user_name"
responses:
"200":
description: "La imagen se está importando."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Importing image..."
"400 (Connection fail)":
description: "Error de conexión con el servidor remoto."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Can't connect to remote server"
"400 (Image not found)":
description: "No se ha encontrado la imagen remota."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Remote image not found"
"400 (Image locked)":
description: "La imagen remota está bloqueada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Remote image is locked"
"500":
description: "Error al importar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image import failed"
"500 (Error)":
description: "Error al importar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al importar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/repo/images:
put:
summary: "Exportar una Imagen"
description: >
Este endpoint exporta la imagen especificada desde el servidor local a un servidor remoto.
Utiliza el script "exportImage.py", que recibe como parámetros el nombre de la imagen, la IP o hostname del servidor remoto,
el usuario para la conexión, y el subdirectorio correspondiente a la OU (si aplica).
NOTA: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está exportando,
y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Importar y Exportar Imágenes"
parameters:
- name: ID_img
in: body
required: true
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum' asociado)"
schema:
type: object
properties:
ID_img:
type: string
example: "image_id"
repo_ip:
type: string
description: "Dirección IP del repositorio remoto"
example: "192.168.56.100"
user:
type: string
description: "Usuario para acceder al repositorio remoto"
example: "user_name"
responses:
"200":
description: "La imagen se está exportando."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Exporting image..."
"400 (Image not found)":
description: "No se ha encontrado la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (Image locked)":
description: "La imagen está bloqueada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image is locked"
"400 (Connection fail)":
description: "Error de conexión con el servidor remoto."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Can't connect to remote server"
"400 (Image present)":
description: "La imagen ya existe en el servidor remoto."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image already exists on remote server"
"500":
description: "Error al exportar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Export image failed"
"500 (Error)":
description: "Error al exportar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al exportar la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Varios"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/images/torrentsum:
post:
summary: "Crear archivos auxiliares"
description: >
Este endpoint crea los archivos ".size", ".sum", ".full.sum" y ".torrent" para la imagen especificada.
Utiliza el script "createTorrentSum.py", que recibe como parámetro el nombre de la imagen (con subdirectorio de OU, si aplica).
NOTA: Este endpoint es asíncrono, ya que puede tardar cierto tiempo, por lo que solo informa de que se están creando los archivos auxiliares,
y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Varios"
parameters:
- name: image
in: body
required: true
description: "Nombre de la imagen (con extensión)"
schema:
type: object
properties:
image:
type: string
example: "Windows10.img"
ou_subdir:
type: string
description: "Subdirectorio correspondiente a la OU (o 'none' si no es el caso)"
example: "none"
responses:
"200":
description: "Los archivos auxiliares se están creando."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Creating auxiliar files..."
"400 (Image not found)":
description: "No se ha encontrado la imagen."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (Image locked)":
description: "La imagen está bloqueada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image is locked"
"500 (Error)":
description: "Error al crear los archivos auxiliares."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al crear los archivos auxiliares."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/wol:
post:
summary: "Enviar paquete Wake On Lan"
description: >
Este endpoint envía un paquete mágico Wake On Lan (WOL) a la dirección MAC especificada, a través de la IP de broadcast especificada.
Utiliza el script "sendWakeOnLan.py", que recibe como parámetros la IP de broadcast y la dirección MAC del equipo a encender.
tags:
- "Varios"
parameters:
- name: broadcast_ip
in: body
required: true
description: "IP de broadcast a la que se enviará el paquete WOL"
schema:
type: object
properties:
broadcast_ip:
type: string
example: "255.255.255.255"
mac:
type: string
description: "Dirección MAC del equipo a encender"
example: "00:19:99:5c:bb:bb"
responses:
"200":
description: "El paquete Wake On Lan se ha enviado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Wake On Lan packet sent successfully"
"500 (Error)":
description: "Error al enviar el paquete Wake On Lan."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al enviar el paquete Wake On Lan."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
# Apartado "Transferencia de Imágenes"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/udpcast:
post:
summary: "Enviar una Imagen mediante UDPcast"
description: >
Este endpoint envía una imagen especificada a través de UDPcast utilizando el script "sendFileMcast.py".
Recibe la imagen y los parámetros de configuración de transferencia, que son usados para construir la cadena de parámetros que se envía al script.
NOTA: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando,
y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Transferencia de Imágenes"
parameters:
- name: ID_img
in: body
required: true
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum' asociado)"
schema:
type: object
properties:
ID_img:
type: string
example: "image_id"
port:
type: string
description: "Puerto Multicast a utilizar para la transmisión"
example: "9000"
method:
type: string
description: "Modalidad de transmisión (puede ser 'half' o 'full' para half-duplex o full-duplex)"
example: "full"
ip:
type: string
description: "IP Multicast a la que se enviará la imagen"
example: "239.194.17.2"
bitrate:
type: string
description: "Velocidad de transmisión en Mbps"
example: "70M"
nclients:
type: integer
description: "Número mínimo de clientes"
example: 20
maxtime:
type: integer
description: "Tiempo máximo de espera en segundos"
example: 120
responses:
"200":
description: "La imagen se está enviando mediante UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Sending image.."
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500 (Error)":
description: "Error al enviar la imagen mediante UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image send failed"
"500 (Exception)":
description: "Excepción inesperada al enviar la imagen mediante UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/udpcast:
get:
summary: "Ver Estado de Transmisiones UDPcast"
description: >
Este endpoint devuelve información sobre los procesos activos de "udp-sender" en formato JSON,
permitiendo comprobar las transferencias UDPcast activas. Utiliza el script "getUDPcastInfo.py" para obtener esta información.
tags:
- "Transferencia de Imágenes"
responses:
"200":
description: "La información de las transmisiones UDPcast activas se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
additionalProperties:
type: object
properties:
image_id:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
image_name:
type: string
example: "Ubuntu20.img"
"400":
description: "No se han encontrado transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UDPCast active transmissions"
"500 (Error)":
description: "Error al comprobar las transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al comprobar las transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/uftp:
post:
summary: "Enviar una Imagen mediante UFTP"
description: >
Este endpoint envía una imagen especificada a través de UFTP, utilizando el script "sendFileUFTP.py".
Requiere que los clientes ogLive estén previamente en escucha con un daemon "UFTPD" ejecutando el script "listenUFTPD.py".
Recibe la imagen y los parámetros de configuración de transferencia, que son usados para construir la cadena de parámetros que se envía al script.
NOTA: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando,
y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Transferencia de Imágenes"
parameters:
- name: ID_img
in: body
required: true
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum' asociado)"
schema:
type: object
properties:
ID_img:
type: string
example: "image_id"
port:
type: string
description: "Puerto para la transmisión UFTP"
example: "9000"
ip:
type: string
description: "IP Unicast o Multicast para la transmisión"
example: "239.194.17.2"
bitrate:
type: string
description: "Velocidad de transmisión (con 'K' para Kbps, 'M' para Mbps, o 'G' para Gbps)"
example: "1G"
responses:
"200":
description: "La imagen se está enviando mediante UFTP."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Sending image..."
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500 (Error)":
description: "Error al enviar la imagen mediante UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image send failed"
"500 (Exception)":
description: "Excepción inesperada al enviar la imagen mediante UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/uftp:
get:
summary: "Ver Estado de Transmisiones UFTP"
description: >
Este endpoint devuelve información sobre los procesos activos de "uftp" en formato JSON,
permitiendo comprobar las transferencias UFTP activas. Utiliza el script "getUFTPInfo.py" para obtener esta información.
tags:
- "Transferencia de Imágenes"
responses:
"200":
description: "La información de las transmisiones UFTP activas se obtuvo exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: object
additionalProperties:
type: object
properties:
image_id:
type: string
example: "22735b9070e4a8043371b8c6ae52b90d"
image_name:
type: string
example: "Ubuntu20.img"
"400":
description: "No se han encontrado transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UFTP active transmissions"
"500 (Error)":
description: "Error al comprobar las transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al comprobar las transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/p2p:
post:
summary: "Enviar una Imagen mediante P2P"
description: >
Este endpoint inicia el tracker y el seeder de torrents para enviar una imagen especificada mediante P2P.
Utiliza los scripts "runTorrentTracker.py" y "runTorrentSeeder.py" para iniciar el tracker y el seeder en el directorio de la imagen.
NOTA: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando,
y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore).
tags:
- "Transferencia de Imágenes"
parameters:
- name: ID_img
in: body
required: true
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum' asociado)"
schema:
type: object
properties:
ID_img:
type: string
example: "image_id"
responses:
"200":
description: "La imagen se está enviando mediante P2P."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Tracker and Seeder serving image correctly"
"400":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Image not found"
"500":
description: "Error al enviar la imagen mediante P2P."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "Tracker or Seeder (or both) not running"
# -----------------------------------------------------------------------------------------------------------
#/ogrepository/v1/p2p:
delete:
summary: "Cancelar Transmisiones P2P"
description: >
Este endpoint cancela todas las transmisiones P2P activas, finalizando los procesos "bttrack" (tracker) y "btlaunchmany.bittornado" (seeder).
Utiliza el script "stopP2P.py" para detener las transmisiones P2P activas en el servidor.
tags:
- "Transferencia de Imágenes"
responses:
"200":
description: "Las transmisiones P2P se han cancelado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "P2P transmissions canceled successfully"
"500 (Error)":
description: "Error al cancelar las transmisiones P2P."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Exception)":
description: "Excepción inesperada al cancelar las transmisiones P2P."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/udpcast/images/{ID_img}:
delete:
summary: "Cancelar Transmisión UDPcast"
description: >
Este endpoint cancela la transmisión UDPcast activa de una imagen especificada, deteniendo el proceso "udp-sender" asociado.
Utiliza el script "stopUDPcast.py" para finalizar la transmisión.
tags:
- "Transferencia de Imágenes"
parameters:
- name: ID_img
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum' asociado)"
example: "image_id"
responses:
"200":
description: "La transmisión UDPcast se ha cancelado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image transmission canceled successfully"
"400 (Image not found)":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (No transmissions for image)":
description: "No hay transmisiones UDPcast activas para la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UDPCast active transmissions for specified image"
"500 (Error)":
description: "Error al cancelar la transmisión UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Check Exception)":
description: "Error al verificar las transmisiones UDPcast activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error checking UDPcast transmissions"
"500 (Finalize Exception)":
description: "Error inesperado al finalizar la transmisión UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error finalizing UDPcast transmission"
"500 (General Exception)":
description: "Excepción inesperada al cancelar la transmisión UDPcast."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------
/ogrepository/v1/uftp/images/{ID_img}:
delete:
summary: "Cancelar Transmisión UFTP"
description: >
Este endpoint cancela la transmisión UFTP activa de una imagen especificada, deteniendo el proceso "uftp" asociado.
Utiliza el script "stopUFTP.py" para finalizar la transmisión.
tags:
- "Transferencia de Imágenes"
parameters:
- name: ID_img
in: path
required: true
type: string
description: "Identificador de la imagen (correspondiente al contenido del archivo 'full.sum' asociado)"
example: "image_id"
responses:
"200":
description: "La transmisión UFTP se ha cancelado exitosamente."
schema:
type: object
properties:
success:
type: boolean
example: true
output:
type: string
example: "Image transmission canceled successfully"
"400 (Image not found)":
description: "No se ha encontrado la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Image not found"
"400 (No transmissions for image)":
description: "No hay transmisiones UFTP activas para la imagen especificada."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "No UFTP active transmissions for specified image"
"500 (Error)":
description: "Error al cancelar la transmisión UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
error:
type: string
example: "(Error description)"
"500 (Check Exception)":
description: "Error al verificar las transmisiones UFTP activas."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error checking UFTP transmissions"
"500 (Finalize Exception)":
description: "Error inesperado al finalizar la transmisión UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "Unexpected error finalizing UFTP transmission"
"500 (General Exception)":
description: "Excepción inesperada al cancelar la transmisión UFTP."
schema:
type: object
properties:
success:
type: boolean
example: false
exception:
type: string
example: "(Exception description)"
# -----------------------------------------------------------------------------------------------------------