diff --git a/README.md b/README.md index 2bc905c..24e490f 100644 --- a/README.md +++ b/README.md @@ -215,7 +215,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag ``` **Respuestas:** -- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de las imágenes. +- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. - **Código 200 OK:** La información de la imagen se obtuvo exitosamente. - **Contenido:** Información de la imagen en formato JSON. @@ -360,7 +360,8 @@ curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/t Se importará una imagen de un repositorio remoto al repositorio local. Se puede hacer con el script "**importImage.py**", que debe ser llamado por el endpoint. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. Estos parámetros deben enviarse desde ogCore (en el JSON), porque el repositorio local no puede extraer la información de la imagen de un ID almacenado en un repositorio remoto. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. Estos parámetros deben enviarse desde ogCore (en el JSON), porque el repositorio local no puede extraer la información de la imagen de un ID almacenado en un repositorio remoto. +**NOTA2**: 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). **URL:** `/ogrepository/v1/repo/images` **Método HTTP:** POST @@ -379,14 +380,15 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al importar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen y/o el equipo remoto especificados. -- **Código 200 OK:** La imagen se ha importado exitosamente. +- **Código 200 OK:** La imagen se está importando. --- ### Exportar una Imagen Se exportará una imagen del repositorio local a un repositorio remoto. Se puede hacer con el script "**exportImage.py**", que debe ser llamado por el endpoint. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse desde ogCore (en el JSON). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse desde ogCore (en el JSON). +**NOTA2**: 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). **URL:** `/ogrepository/v1/repo/images` **Método HTTP:** PUT @@ -404,14 +406,15 @@ curl -X PUT -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al exportar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen y/o el equipo remoto especificados. -- **Código 200 OK:** La imagen se ha exportado exitosamente. +- **Código 200 OK:** La imagen se está exportando. --- ### Crear archivos auxiliares Se crearán los archivos ".sum", ".full.sum", ".size" y ".torrent", para la imagen especificada como parámetro. Se puede hacer con el script "**createTorrentSum.py**", que debe ser llamado por el endpoint. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como unico parámetro. Este parámetro no puede obtenerse en la API, a partir del ID de imagen (como en otros casos), porque el ID corresponde al contenido del archivo "full.sum" asociado (que no estará creado hasta que no se ejecute este script). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como unico parámetro. Este parámetro no puede obtenerse en la API, a partir del ID de imagen (como en otros casos), porque el ID corresponde al contenido del archivo "full.sum" asociado (que no estará creado hasta que no se ejecute este script). +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar cierto tiempo, por lo que solo informa de que los archivos auxiliares se están creando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore). **URL:** `/ogrepository/v1/images/torrentsum` **Método HTTP:** POST @@ -426,9 +429,9 @@ Se puede hacer con el script "**createTorrentSum.py**", que debe ser llamado por curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"image":"Windows10.img", "ou_subdir":"none"}' http://example.com/ogrepository/v1/images/torrentsum ``` **Respuestas:** -- **Código 500 Internal Server Error:** Ocurrió un error al crear los archivos. +- **Código 500 Internal Server Error:** Ocurrió un error al crear los archivos auxiliares. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** Los archivos se han creado exitosamente. +- **Código 200 OK:** Los archivos auxiliares se están creando. --- ### Enviar paquete Wake On Lan @@ -458,7 +461,8 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d Se enviará la imagen especificada por Multicast, mediante la aplicación UDPcast. Se puede hacer con el script "**sendFileMcast.py**", que a su vez llama al binario "**udp-sender**", que es quien realmente realiza el envío. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA2**: 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). **URL:** `/ogrepository/v1/udpcast` **Método HTTP:** POST @@ -480,14 +484,15 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al enviar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** La imagen se ha enviado exitosamente. +- **Código 200 OK:** La imagen se está enviando mediante UDPcast. --- ### Enviar una Imagen mediante UFTP Se enviará la imagen especificada por Unicast o Multicast, mediante el protocolo "UFTP". Se puede hacer con el script "**sendFileUFTP.py**", que requiere que previamente los clientes ogLive destino se pongan en escucha con un daemon "UFTPD" (ejecutando el script "**listenUFTPD.py**"). Esto funciona al revés que "UDPcast", ya que primero se debe ejecutar un comando en los clientes, y luego en el servidor. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA2**: 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). **URL:** `/ogrepository/v1/uftp` **Método HTTP:** POST @@ -506,14 +511,15 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al enviar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** La imagen se ha enviado exitosamente. +- **Código 200 OK:** La imagen se está enviando mediante UFTP. --- ### Enviar una Imagen mediante P2P Se enviará la imagen especificada mediante "P2P", iniciando el tracker y el seeder (que harán tracking y seed de los torrents contenidos en la raiz del directorio especificado). Se puede hacer con los scripts "**runTorrentTracker.py**" y "**runTorrentSeeder.py**", que deben ser llamados por el endpoint. -**NOTA**: La versión actual de estos scripts requiere que se le pase el directorio en el que está situada la imagen a enviar como único parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). +**NOTA**: Estos scripts requieren que se les pase el directorio en el que está situada la imagen a enviar como único parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). +**NOTA2**: 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). **URL:** `/ogrepository/v1/p2p` @@ -530,7 +536,7 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al intentar enviar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** La imagen se está enviando exitosamente. +- **Código 200 OK:** La imagen se está enviando mediante P2P. --- ### Ver Estado de Transmisiones UDPcast diff --git a/api/README.md b/api/README.md index 5d6deaa..1a05998 100644 --- a/api/README.md +++ b/api/README.md @@ -202,7 +202,7 @@ curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/imag ``` **Respuestas:** -- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de las imágenes. +- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. - **Código 200 OK:** La información de la imagen se obtuvo exitosamente. - **Contenido:** Información de la imagen en formato JSON. @@ -347,7 +347,8 @@ curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/t Se importará una imagen de un repositorio remoto al repositorio local. Se puede hacer con el script "**importImage.py**", que debe ser llamado por el endpoint. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. Estos parámetros deben enviarse desde ogCore (en el JSON), porque el repositorio local no puede extraer la información de la imagen de un ID almacenado en un repositorio remoto. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. Estos parámetros deben enviarse desde ogCore (en el JSON), porque el repositorio local no puede extraer la información de la imagen de un ID almacenado en un repositorio remoto. +**NOTA2**: 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). **URL:** `/ogrepository/v1/repo/images` **Método HTTP:** POST @@ -366,14 +367,15 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al importar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen y/o el equipo remoto especificados. -- **Código 200 OK:** La imagen se ha importado exitosamente. +- **Código 200 OK:** La imagen se está importando. --- ### Exportar una Imagen Se exportará una imagen del repositorio local a un repositorio remoto. Se puede hacer con el script "**exportImage.py**", que debe ser llamado por el endpoint. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse desde ogCore (en el JSON). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto y el usuario remoto deben enviarse desde ogCore (en el JSON). +**NOTA2**: 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). **URL:** `/ogrepository/v1/repo/images` **Método HTTP:** PUT @@ -391,14 +393,15 @@ curl -X PUT -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al exportar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen y/o el equipo remoto especificados. -- **Código 200 OK:** La imagen se ha exportado exitosamente. +- **Código 200 OK:** La imagen se está exportando. --- ### Crear archivos auxiliares Se crearán los archivos ".sum", ".full.sum", ".size" y ".torrent", para la imagen especificada como parámetro. Se puede hacer con el script "**createTorrentSum.py**", que debe ser llamado por el endpoint. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como unico parámetro. Este parámetro no puede obtenerse en la API, a partir del ID de imagen (como en otros casos), porque el ID corresponde al contenido del archivo "full.sum" asociado (que no estará creado hasta que no se ejecute este script). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como unico parámetro. Este parámetro no puede obtenerse en la API, a partir del ID de imagen (como en otros casos), porque el ID corresponde al contenido del archivo "full.sum" asociado (que no estará creado hasta que no se ejecute este script). +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar cierto tiempo, por lo que solo informa de que los archivos auxiliares se están creando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore). **URL:** `/ogrepository/v1/images/torrentsum` **Método HTTP:** POST @@ -413,9 +416,9 @@ Se puede hacer con el script "**createTorrentSum.py**", que debe ser llamado por curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"image":"Windows10.img", "ou_subdir":"none"}' http://example.com/ogrepository/v1/images/torrentsum ``` **Respuestas:** -- **Código 500 Internal Server Error:** Ocurrió un error al crear los archivos. +- **Código 500 Internal Server Error:** Ocurrió un error al crear los archivos auxiliares. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** Los archivos se han creado exitosamente. +- **Código 200 OK:** Los archivos auxiliares se están creando. --- ### Enviar paquete Wake On Lan @@ -445,7 +448,8 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d Se enviará la imagen especificada por Multicast, mediante la aplicación UDPcast. Se puede hacer con el script "**sendFileMcast.py**", que a su vez llama al binario "**udp-sender**", que es quien realmente realiza el envío. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA2**: 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). **URL:** `/ogrepository/v1/udpcast` **Método HTTP:** POST @@ -467,14 +471,15 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al enviar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** La imagen se ha enviado exitosamente. +- **Código 200 OK:** La imagen se está enviando mediante UDPcast. --- ### Enviar una Imagen mediante UFTP Se enviará la imagen especificada por Unicast o Multicast, mediante el protocolo "UFTP". Se puede hacer con el script "**sendFileUFTP.py**", que requiere que previamente los clientes ogLive destino se pongan en escucha con un daemon "UFTPD" (ejecutando el script "**listenUFTPD.py**"). Esto funciona al revés que "UDPcast", ya que primero se debe ejecutar un comando en los clientes, y luego en el servidor. -**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión, e incluyendo el nombre del directorio correspondiente a la OU, si fuera el caso) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA2**: 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). **URL:** `/ogrepository/v1/uftp` **Método HTTP:** POST @@ -493,14 +498,15 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al enviar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** La imagen se ha enviado exitosamente. +- **Código 200 OK:** La imagen se está enviando mediante UFTP. --- ### Enviar una Imagen mediante P2P Se enviará la imagen especificada mediante "P2P", iniciando el tracker y el seeder (que harán tracking y seed de los torrents contenidos en la raiz del directorio especificado). Se puede hacer con los scripts "**runTorrentTracker.py**" y "**runTorrentSeeder.py**", que deben ser llamados por el endpoint. -**NOTA**: La versión actual de estos scripts requiere que se le pase el directorio en el que está situada la imagen a enviar como único parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). +**NOTA**: Estos scripts requieren que se les pase el directorio en el que está situada la imagen a enviar como único parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). +**NOTA2**: 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). **URL:** `/ogrepository/v1/p2p` @@ -517,7 +523,7 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d **Respuestas:** - **Código 500 Internal Server Error:** Ocurrió un error al intentar enviar la imagen. - **Código 400 Bad Request:** No se ha encontrado la imagen especificada. -- **Código 200 OK:** La imagen se está enviando exitosamente. +- **Código 200 OK:** La imagen se está enviando mediante P2P. --- ### Ver Estado de Transmisiones UDPcast diff --git a/api/repo_api.py b/api/repo_api.py index fd7c710..9297628 100644 --- a/api/repo_api.py +++ b/api/repo_api.py @@ -8,10 +8,10 @@ Responde a peticiones HTTP (en principio, enviadas desde ogCore) mediante endpoi 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") +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") """ # -------------------------------------------------------------------------------------------- @@ -230,11 +230,42 @@ def check_aux_files(image_file_path): with open(f"{image_file_path}.full.sum", 'r') as file: image_id = file.read().strip('\n') app.logger.info(f"Image_ID: {image_id}") + + # Almacenamos en un diccionario los datos a enviar a ogCore: + data = { + 'job_id': 222, + 'image_id': image_id + } + # Llamamos al endpoint de ogCore, enviando los datos: + recall_ogcore(data) break # Esperamos 10 segundos para volver a realizar la comprobación: sleep(10) +# --------------------------------------------------------- + + +def recall_ogcore(data): + """ Hace una petición HTTP de tipo POST a un endpoint de ogCore, enviando datos que dependen del caso. + Se utiliza para informar a ogCore del resultado de una tarea asíncrona, + que estaba corriendo en un proceso independiente (no controlado por los endpoints). + """ + # Almacenamos la URL del endpoint de ogCore: + endpoint_url = 'http://192.168.56.101:8006//ogcore/v1/test' + + # Almacenamos los headers, y convertiomos "data" a JSON: + headers = {'content-type': 'application/json'} + data = json.dumps(data) + + # Hacemos una petición POST al endpoint, enviando lo almacenado en "data": + response = requests.post(endpoint_url, data=data, headers=headers) + + # Imprimimos el código de estado de la petición y la respuesta de ogCore: + app.logger.info(f"HTTP Status Code: {response.status_code}") + app.logger.info(f"HTTP Response: {response.text}") + + # -------------------------------------------------------------------------------------------- # ENDPOINTS @@ -710,12 +741,12 @@ def export_image(): # Informamos que la imagen se está exportando, y salimos del endpoint: return jsonify({ "success": True, - "output": "Exporting image" + "output": "Exporting image..." }), 200 else: return jsonify({ "success": False, - "error": result.stderr + "error": "Export image failed" }), 500 except subprocess.CalledProcessError as error: return jsonify({ @@ -1058,11 +1089,6 @@ def get_udpcast_info(): "success": False, "exception": "No UDPCast active transmissions" }), 400 - elif "exit status 2" in str(error_description): - return jsonify({ - "success": False, - "exception": "Unexpected error checking UDPcast transmissions" - }), 500 else: return jsonify({ "success": False, @@ -1101,11 +1127,6 @@ def get_uftp_info(): "success": False, "exception": "No UFTP active transmissions" }), 400 - elif "exit status 2" in str(error_description): - return jsonify({ - "success": False, - "exception": "Unexpected error checking UFTP transmissions" - }), 500 else: return jsonify({ "success": False, diff --git a/api/swagger.yaml b/api/swagger.yaml index ddb3c2e..9e03b87 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -7,9 +7,17 @@ info: 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). + (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"). + 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: @@ -95,8 +103,19 @@ paths: btlaunchmany: type: string example: "stopped" - "500": + "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: @@ -105,9 +124,59 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + 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: > @@ -116,7 +185,7 @@ paths: 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: - - "Imágenes de Repositorio" + - "Información de Imágenes" responses: "200": description: "La información de las imágenes se obtuvo exitosamente." @@ -266,7 +335,7 @@ paths: fullsum: type: string example: "22735b9070e4a8043371b8c6ae52b90d" - "500": + "500 (Error)": description: "Error al consultar y/o devolver la información de las imágenes." schema: type: object @@ -274,32 +343,11 @@ paths: success: type: boolean example: false - exception: + error: type: string - example: "Generic error description for unexpected exceptions." - - 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: - - "Imágenes de Repositorio" - responses: - "200": - description: "La actualización de la información del repositorio se realizó exitosamente." - schema: - type: object - properties: - success: - type: boolean - example: true - output: - type: string - example: "Repository info updated successfully" - "500": - description: "Error al actualizar la información de las imágenes." + 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: @@ -308,7 +356,9 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + example: "(Exception description)" + +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/images/{imageId}: get: @@ -318,7 +368,7 @@ paths: 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: - - "Imágenes de Repositorio" + - "Información de Imágenes" parameters: - name: imageId in: path @@ -386,8 +436,19 @@ paths: error: type: string example: "Image not found" - "500": + "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: @@ -396,7 +457,86 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + 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: > @@ -405,7 +545,7 @@ paths: 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: - - "Imágenes de Repositorio" + - "Eliminar y Recuperar Imágenes" parameters: - name: imageId in: path @@ -440,11 +580,8 @@ paths: error: type: string example: "Image not found (inexistent or deleted)" - "500": - description: > - Error al eliminar la imagen. Puede ocurrir debido a: - - Un error de ejecución del script (con salida no 0). - - Una excepción inesperada durante el proceso. + "500 (Error)": + description: "Error al eliminar la imagen." schema: type: object properties: @@ -453,9 +590,9 @@ paths: example: false error: type: string - example: "Script execution error description." + example: "(Error description)" "500 (Exception)": - description: "Error inesperado durante la eliminación de la imagen." + description: "Excepción inesperada al eliminar la imagen." schema: type: object properties: @@ -464,71 +601,9 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + 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: - - "Integridad 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 imagen se ha chequeado exitosamente. El chequeo puede devolver dos resultados: - - Si pasa la verificación de integridad. - - Si no pasa la verificación de integridad. - schema: - type: object - properties: - success: - type: boolean - example: true - output: - type: string - example: "Image file passed the Integrity Check 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 (inexistent or deleted)" - "500": - description: > - Error al chequear la imagen. Puede ocurrir debido a una excepción inesperada. - schema: - type: object - properties: - success: - type: boolean - example: false - exception: - type: string - example: "Generic error description for unexpected exceptions." - "200 (KO)": - description: "La imagen se ha chequeado correctamente, 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" +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/trash/images: post: @@ -537,7 +612,7 @@ paths: 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: - - "Imágenes de Papelera" + - "Eliminar y Recuperar Imágenes" parameters: - name: ID_img in: body @@ -572,11 +647,8 @@ paths: error: type: string example: "Image not found (inexistent or recovered previously)" - "500": - description: > - Error al recuperar la imagen. Puede ocurrir debido a: - - Un error de ejecución del script (con salida no 0). - - Una excepción inesperada durante el proceso. + "500 (Error)": + description: "Error al recuperar la imagen." schema: type: object properties: @@ -585,9 +657,9 @@ paths: example: false error: type: string - example: "Script execution error description." + example: "(Error description)" "500 (Exception)": - description: "Error inesperado durante la recuperación de la imagen." + description: "Excepción inesperada al recuperar la imagen." schema: type: object properties: @@ -596,7 +668,9 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + example: "(Exception description)" + +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/trash/images/{imageId}: delete: @@ -605,7 +679,7 @@ paths: 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: - - "Imágenes de Papelera" + - "Eliminar y Recuperar Imágenes" parameters: - name: imageId in: path @@ -635,11 +709,8 @@ paths: error: type: string example: "Image not found at trash" - "500": - description: > - Error al eliminar la imagen desde la papelera. Puede ocurrir debido a: - - Un error de ejecución del script (con salida no 0). - - Una excepción inesperada durante el proceso. + "500 (Error)": + description: "Error al eliminar la imagen de la papelera." schema: type: object properties: @@ -648,9 +719,9 @@ paths: example: false error: type: string - example: "Script execution error description." + example: "(Error description)" "500 (Exception)": - description: "Error inesperado durante la eliminación de la imagen desde la papelera." + description: "Excepción inesperada al eliminar la imagen de la papelera." schema: type: object properties: @@ -659,7 +730,11 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + example: "(Exception description)" + +# ----------------------------------------------------------------------------------------------------------- +# Apartado "Importar y Exportar Imágenes" +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/repo/images: post: @@ -668,8 +743,10 @@ paths: 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: - - "Imágenes de Repositorio" + - "Importar y Exportar Imágenes" parameters: - name: image in: body @@ -695,7 +772,7 @@ paths: example: "user_name" responses: "200": - description: "La imagen se ha importado exitosamente." + description: "La imagen se está importando." schema: type: object properties: @@ -704,9 +781,9 @@ paths: example: true output: type: string - example: "Image imported successfully" - "400": - description: "Error de conexión o imagen no disponible en el servidor remoto." + example: "Importing image..." + "400 (Connection fail)": + description: "Error de conexión con el servidor remoto." schema: type: object properties: @@ -715,10 +792,31 @@ paths: example: false exception: type: string - example: "Can't connect to remote server | Remote image not found | Remote image is locked" + 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 interno al importar la imagen. Puede ocurrir debido a un problema en la ejecución del script o una excepción inesperada. + description: "Error al importar la imagen." schema: type: object properties: @@ -727,9 +825,20 @@ paths: example: false error: type: string - example: "Script execution error description." + 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: "Error inesperado durante la importación de la imagen." + description: "Excepción inesperada al importar la imagen." schema: type: object properties: @@ -738,15 +847,21 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + 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: - - "Imágenes de Repositorio" + - "Importar y Exportar Imágenes" parameters: - name: ID_img in: body @@ -768,7 +883,7 @@ paths: example: "user_name" responses: "200": - description: "La imagen se ha exportado exitosamente." + description: "La imagen se está exportando." schema: type: object properties: @@ -777,9 +892,9 @@ paths: example: true output: type: string - example: "Image exported successfully" - "400": - description: "Error de conexión o imagen no disponible en el servidor remoto." + example: "Exporting image..." + "400 (Image not found)": + description: "No se ha encontrado la imagen." schema: type: object properties: @@ -788,10 +903,42 @@ paths: example: false exception: type: string - example: "Image is locked | Can't connect to remote server | Image already exists on remote server" + 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 interno al exportar la imagen. Puede ocurrir debido a un problema en la ejecución del script o una excepción inesperada. + description: "Error al exportar la imagen." schema: type: object properties: @@ -800,9 +947,20 @@ paths: example: false error: type: string - example: "Script execution error description." + 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: "Error inesperado durante la exportación de la imagen." + description: "Excepción inesperada al exportar la imagen." schema: type: object properties: @@ -811,15 +969,22 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + 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: - - "Archivos Auxiliares de Imágenes" + - "Varios" parameters: - name: image in: body @@ -837,7 +1002,7 @@ paths: example: "none" responses: "200": - description: "Los archivos se han creado exitosamente." + description: "Los archivos auxiliares se están creando." schema: type: object properties: @@ -846,9 +1011,9 @@ paths: example: true output: type: string - example: "Files created successfully" - "400": - description: "Error de conexión o imagen no disponible en el servidor remoto." + example: "Creating auxiliar files..." + "400 (Image not found)": + description: "No se ha encontrado la imagen." schema: type: object properties: @@ -857,10 +1022,20 @@ paths: example: false exception: type: string - example: "Image not found | Image is locked" - "500": - description: > - Error interno al crear los archivos auxiliares. Puede ocurrir debido a un problema en la ejecución del script o una excepción inesperada. + 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: @@ -869,9 +1044,9 @@ paths: example: false error: type: string - example: "Script execution error description." + example: "(Error description)" "500 (Exception)": - description: "Error inesperado durante la creación de los archivos auxiliares." + description: "Excepción inesperada al crear los archivos auxiliares." schema: type: object properties: @@ -880,7 +1055,9 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + example: "(Exception description)" + +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/wol: post: @@ -889,7 +1066,7 @@ paths: 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: - - "Wake On Lan" + - "Varios" parameters: - name: broadcast_ip in: body @@ -917,9 +1094,8 @@ paths: output: type: string example: "Wake On Lan packet sent successfully" - "500": - description: > - Error interno al enviar el paquete Wake On Lan. Puede ocurrir debido a un problema en la ejecución del script o una excepción inesperada. + "500 (Error)": + description: "Error al enviar el paquete Wake On Lan." schema: type: object properties: @@ -928,9 +1104,9 @@ paths: example: false error: type: string - example: "Script execution error description." + example: "(Error description)" "500 (Exception)": - description: "Error inesperado durante el envío del paquete Wake On Lan." + description: "Excepción inesperada al enviar el paquete Wake On Lan." schema: type: object properties: @@ -939,75 +1115,20 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + example: "(Exception description)" + +# ----------------------------------------------------------------------------------------------------------- +# Apartado "Transferencia de Imágenes" +# ----------------------------------------------------------------------------------------------------------- /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": - description: > - Error al comprobar las transmisiones UDPcast activas, posiblemente debido a un error inesperado durante la ejecución del script. - schema: - type: object - properties: - success: - type: boolean - example: false - error: - type: string - example: "Script execution error description." - "500 (Exception)": - description: "Error inesperado durante la comprobación de transmisiones UDPcast activas." - schema: - type: object - properties: - success: - type: boolean - example: false - exception: - type: string - example: "Unexpected error checking UDPcast transmissions" 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: @@ -1047,7 +1168,7 @@ paths: example: 120 responses: "200": - description: "La imagen se ha enviado exitosamente mediante UDPcast." + description: "La imagen se está enviando mediante UDPcast." schema: type: object properties: @@ -1056,7 +1177,7 @@ paths: example: true output: type: string - example: "Image sent successfully" + example: "Sending image.." "400": description: "No se ha encontrado la imagen especificada." schema: @@ -1068,9 +1189,8 @@ paths: error: type: string example: "Image not found" - "500": - description: > - Error interno al enviar la imagen mediante UDPcast. Puede ocurrir debido a un problema en la ejecución del script o una excepción inesperada. + "500 (Error)": + description: "Error al enviar la imagen mediante UDPcast." schema: type: object properties: @@ -1079,9 +1199,9 @@ paths: example: false error: type: string - example: "Script execution error description." + example: "Image send failed" "500 (Exception)": - description: "Error inesperado durante el envío de la imagen mediante UDPcast." + description: "Excepción inesperada al enviar la imagen mediante UDPcast." schema: type: object properties: @@ -1090,9 +1210,157 @@ paths: example: false exception: type: string - example: "Generic error description for unexpected exceptions." + 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: > @@ -1131,9 +1399,8 @@ paths: exception: type: string example: "No UFTP active transmissions" - "500": - description: > - Error al comprobar las transmisiones UFTP activas, posiblemente debido a un error inesperado durante la ejecución del script. + "500 (Error)": + description: "Error al comprobar las transmisiones UFTP activas." schema: type: object properties: @@ -1142,9 +1409,9 @@ paths: example: false error: type: string - example: "Script execution error description." + example: "(Error description)" "500 (Exception)": - description: "Error inesperado durante la comprobación de transmisiones UFTP activas." + description: "Excepción inesperada al comprobar las transmisiones UFTP activas." schema: type: object properties: @@ -1153,85 +1420,9 @@ paths: example: false exception: type: string - example: "Unexpected error checking UFTP transmissions" - 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. - 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 ha enviado exitosamente mediante UFTP." - schema: - type: object - properties: - success: - type: boolean - example: true - output: - type: string - example: "Image sent 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" - "500": - description: > - Error interno al enviar la imagen mediante UFTP. Puede ocurrir debido a un problema en la ejecución del script o una excepción inesperada. - schema: - type: object - properties: - success: - type: boolean - example: false - error: - type: string - example: "Script execution error description." - "500 (Exception)": - description: "Error inesperado durante el envío de la imagen mediante UFTP." - schema: - type: object - properties: - success: - type: boolean - example: false - exception: - type: string - example: "Generic error description for unexpected exceptions." + example: "(Exception description)" +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/p2p: post: @@ -1239,6 +1430,8 @@ paths: 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: @@ -1254,7 +1447,7 @@ paths: example: "image_id" responses: "200": - description: "La imagen se está enviando exitosamente a través de P2P." + description: "La imagen se está enviando mediante P2P." schema: type: object properties: @@ -1276,9 +1469,7 @@ paths: type: string example: "Image not found" "500": - description: > - Error al intentar iniciar el tracker o el seeder para el envío P2P. - Puede ocurrir si alguno de los procesos no se inicia correctamente o si ocurre una excepción inesperada. + description: "Error al enviar la imagen mediante P2P." schema: type: object properties: @@ -1288,17 +1479,10 @@ paths: error: type: string example: "Tracker or Seeder (or both) not running" - "500 (Exception)": - description: "Error inesperado durante el proceso de envío P2P." - schema: - type: object - properties: - success: - type: boolean - example: false - exception: - type: string - example: "Generic error description for unexpected exceptions." + +# ----------------------------------------------------------------------------------------------------------- + + #/ogrepository/v1/p2p: delete: summary: "Cancelar Transmisiones P2P" description: > @@ -1318,8 +1502,8 @@ paths: output: type: string example: "P2P transmissions canceled successfully" - "500 (Error del script)": - description: "Error en la ejecución del script durante la cancelación de las transmisiones P2P." + "500 (Error)": + description: "Error al cancelar las transmisiones P2P." schema: type: object properties: @@ -1328,9 +1512,9 @@ paths: example: false error: type: string - example: "Detailed error message from script stderr output." - "500 (Excepción general)": - description: "Excepción inesperada durante la cancelación de las transmisiones P2P." + example: "(Error description)" + "500 (Exception)": + description: "Excepción inesperada al cancelar las transmisiones P2P." schema: type: object properties: @@ -1339,7 +1523,9 @@ paths: example: false exception: type: string - example: "General error description for unexpected exceptions" + example: "(Exception description)" + +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/udpcast/images/{ID_img}: delete: @@ -1368,8 +1554,19 @@ paths: output: type: string example: "Image transmission canceled successfully" - "400": - description: "No se ha encontrado la imagen especificada o no hay transmisiones UDPcast activas para la imagen especificada." + "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: @@ -1379,8 +1576,8 @@ paths: exception: type: string example: "No UDPCast active transmissions for specified image" - "500 (Error del script)": - description: "Error en la ejecución del script durante la cancelación de la transmisión." + "500 (Error)": + description: "Error al cancelar la transmisión UDPcast." schema: type: object properties: @@ -1389,9 +1586,9 @@ paths: example: false error: type: string - example: "Detailed error message from script stderr output." - "500 (Error en verificación)": - description: "Error inesperado al verificar las transmisiones UDPcast activas." + example: "(Error description)" + "500 (Check Exception)": + description: "Error al verificar las transmisiones UDPcast activas." schema: type: object properties: @@ -1401,7 +1598,7 @@ paths: exception: type: string example: "Unexpected error checking UDPcast transmissions" - "500 (Error en finalización)": + "500 (Finalize Exception)": description: "Error inesperado al finalizar la transmisión UDPcast." schema: type: object @@ -1412,8 +1609,8 @@ paths: exception: type: string example: "Unexpected error finalizing UDPcast transmission" - "500 (Excepción general)": - description: "Excepción inesperada durante la cancelación de la transmisión UDPcast." + "500 (General Exception)": + description: "Excepción inesperada al cancelar la transmisión UDPcast." schema: type: object properties: @@ -1422,7 +1619,9 @@ paths: example: false exception: type: string - example: "General error description for unexpected exceptions" + example: "(Exception description)" + +# ----------------------------------------------------------------------------------------------------------- /ogrepository/v1/uftp/images/{ID_img}: delete: @@ -1451,8 +1650,19 @@ paths: output: type: string example: "Image transmission canceled successfully" - "400": - description: "No se ha encontrado la imagen especificada o no hay transmisiones UFTP activas para la imagen especificada." + "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: @@ -1462,8 +1672,8 @@ paths: exception: type: string example: "No UFTP active transmissions for specified image" - "500 (Error del script)": - description: "Error en la ejecución del script durante la cancelación de la transmisión." + "500 (Error)": + description: "Error al cancelar la transmisión UFTP." schema: type: object properties: @@ -1472,9 +1682,9 @@ paths: example: false error: type: string - example: "Detailed error message from script stderr output." - "500 (Error en verificación)": - description: "Error inesperado al verificar las transmisiones UFTP activas." + example: "(Error description)" + "500 (Check Exception)": + description: "Error al verificar las transmisiones UFTP activas." schema: type: object properties: @@ -1484,7 +1694,7 @@ paths: exception: type: string example: "Unexpected error checking UFTP transmissions" - "500 (Error en finalización)": + "500 (Finalize Exception)": description: "Error inesperado al finalizar la transmisión UFTP." schema: type: object @@ -1495,8 +1705,8 @@ paths: exception: type: string example: "Unexpected error finalizing UFTP transmission" - "500 (Excepción general)": - description: "Excepción inesperada durante la cancelación de la transmisión UFTP." + "500 (General Exception)": + description: "Excepción inesperada al cancelar la transmisión UFTP." schema: type: object properties: @@ -1505,5 +1715,6 @@ paths: example: false exception: type: string - example: "General error description for unexpected exceptions" + example: "(Exception description)" +# -----------------------------------------------------------------------------------------------------------