From 94bfef7af39b8f8aad9f515c92ba8c512cd17c49 Mon Sep 17 00:00:00 2001 From: ggil Date: Fri, 13 Sep 2024 13:31:04 +0200 Subject: [PATCH] refs #631 - Add 'stopP2P.py' --- README.md | 31 ++++++++++----- py_scripts/runTorrentSeeder.py | 4 +- py_scripts/stopP2P.py | 70 ++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 12 deletions(-) create mode 100644 py_scripts/stopP2P.py diff --git a/README.md b/README.md index 1ecc3fe..d8af825 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ El presente documento detalla los endpoints de la API, con sus respectivos pará 12. [Enviar una Imagen mediante UDPcast](#enviar-una-imagen-mediante-udpcast) - `POST /ogrepository/v1/images/send-udpcast` 13. [Enviar una Imagen mediante UFTP](#enviar-una-imagen-mediante-uftp) - `POST /ogrepository/v1/images/send-uftp` 14. [Cancelar Transmisión UDPcast](#cancelar-transmisión-udpcast) - `POST /ogrepository/v1/images/stop-udpcast` -15. [Cancelar Transmisión P2P](#cancelar-transmisión-p2p) - +15. [Cancelar Transmisiones P2P](#cancelar-transmisiones-p2p) - `POST /ogrepository/v1/images/stop-p2p` 16. [Ver Estado de Transmisiones Multicast-P2P](#ver-estado-de-transmisiones-multicast-p2p) - --- @@ -420,7 +420,7 @@ Se puede hacer con el script "**sendFileMcast.py**", que a su vez llama al binar - **nclients**: Número mínimo de clientes. - **maxtime**: Tiempo máximo de espera. -**Ejemplo de Solicitud:** +**Ejemplo de Solicitud:** ```bash curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"image":"Windows10.img", "ou_subdir":"none", "port":"9000", "method":"full", "ip":"239.194.17.2", "bitrate":"70M", "nclients":"20", "maxtime":"120"}' http://example.com/ogrepository/v1/images/send-udpcast @@ -460,7 +460,7 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d --- ### Cancelar Transmisión UDPcast -Se cancelará la transmisión por UDPcast existente de la imagen especificada como parámetro, deteniendo el proceso "udp-sender" asociado a dicha imagen. +Se cancelará la transmisión por UDPcast activa de la imagen especificada como parámetro, deteniendo el proceso "udp-sender" asociado a dicha imagen. Se puede hacer con el script "**stopUDPcast.py**", que hemos programado recientemente. **URL:** `/ogrepository/v1/images/stop-udpcast` @@ -481,17 +481,28 @@ curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d - **Código 200 OK:** La transmisión se ha cancelado exitosamente. --- -### Cancelar Transmisión P2P +### Cancelar Transmisiones P2P -Se cancelarán todas las transmisiones P2P activas en el ogRepository al que se envíe la orden, deteniendo los procesos "bttrack" y "btlaunchmany.bittornado". -Se debe programar un script para realizar esta tarea, ya que actualmente no hay ninguno. -**NOTA**: No he encontrado la forma de detener la transmisión de una imagen concreta, ya que "bttrack" hace tracking de todos los torrrents, y "btlaunchmany.bittornado" hace seed de todos los torrents existentes en la raíz del directorio especificado. +Se cancelarán las transmisiones P2P activas en el ogRepository al que se envíe la orden, deteniendo los procesos "bttrack" y "btlaunchmany.bittornado". +Se puede hacer con el script "**stopP2P.py**", que hemos programado recientemente. +**NOTA**: No he encontrado la forma de detener la transmisión de una imagen concreta, ya que "bttrack" hace tracking de todos los torrrents, y "btlaunchmany.bittornado" hace seed de todos los torrents existentes en la raíz del directorio especificado (aparte, no bastaría con finalizar el seeder, porque los clientes también hacen seed). + +**URL:** `/ogrepository/v1/images/stop-p2p` +**Método HTTP:** POST + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images/stop-p2p +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al cancelar las transmisiones. +- **Código 200 OK:** Las transmisiones se han cancelado exitosamente. --- -### Ver Estado de Transmisiones Multicast-P2P +### Ver Estado de Transmisiones Multicast-P2P -Se devolverá información del estado de las transmisiones existentes, con un identificador de cada sesión multicast o P2P, y la imagen asociada. -Se debe estudiar como realizar esta tarea para cada uno de los protocolos de transmisión, ya que cada uno tiene sus particularidades, y habitualmente no tienen comandos asociados para comprobar el estado de las transmisiones. +Se debe estudiar como realizar esta tarea para cada uno de los protocolos de transmisión, ya que cada uno tiene sus particularidades, y habitualmente no tienen comandos asociados para comprobar el estado de las transmisiones. Es posible que sea neceario parsear los logs de ogRepo y/o de los clientes. **NOTA**: Seguramente deba crearse un endpoint específico para cada uno de los protocolos que se utilicen. --- \ No newline at end of file diff --git a/py_scripts/runTorrentSeeder.py b/py_scripts/runTorrentSeeder.py index ad9b18c..2ebd64c 100644 --- a/py_scripts/runTorrentSeeder.py +++ b/py_scripts/runTorrentSeeder.py @@ -107,9 +107,9 @@ def main(): # Finalizamos el proceso "btlaunchmany.bittornado" (en caso de que estuviera corriendo): try: - subprocess.run(f"pkill btlaunchmany.bittornado".split(), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + subprocess.run(f"pkill btlaunchmany".split(), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except Exception as error_description: - print(f"No bittornado process running? Returned error: {error_description}") + print(f"No btlaunchmany.bittornado process running? Returned error: {error_description}") # Construimos la ruta en la que buscar los torrents, en base al parámetro especificado: if sys.argv[1] == 'none': diff --git a/py_scripts/stopP2P.py b/py_scripts/stopP2P.py new file mode 100644 index 0000000..9905742 --- /dev/null +++ b/py_scripts/stopP2P.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +Este script finaliza el proceso "btlaunchmany.bittornado" (correspondiente al seeder P2P) y el proceso "bttrack" (correspondiente al tracker P2P), + lo que en la práctica hará que se cancelen las transmisiones P2P activas en el momento de ejecutarlo. + +No he encontrado la forma de cancelar una transferencia P2P concreta, ya que "bttrack" hace tracking de todos los torrents de ogRepo, + y es el proceso que es necesario finalizar para cancelar las transferencias P2P (con el seeder no bastaría, porque los clientes también hacen seed). + +No recibe ningún parámetro. +""" +# -------------------------------------------------------------------------------------------- +# IMPORTS +# -------------------------------------------------------------------------------------------- + +import subprocess + + +# -------------------------------------------------------------------------------------------- +# FUNCTIONS +# -------------------------------------------------------------------------------------------- + + +def kill_seeder(): + """ Finaliza cualquier proceso activo de "btlaunchmany.bittornado", + que corresponde al seeder P2P. + """ + try: + subprocess.run(f"pkill btlaunchmany".split(), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + print("Process btlaunchmany.bittornado finalized") + except Exception as error_description: + print(f"No btlaunchmany.bittornado process running? Returned error: {error_description}") + + + +def kill_tracker(): + """ Finaliza cualquier proceso activo de "bttrack", + que corresponde al tracker P2P. + """ + try: + subprocess.run(f"pkill bttrack".split(), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + print("Process bttrack finalized") + except Exception as error_description: + print(f"No bttrack process running? Returned error: {error_description}") + + + +# -------------------------------------------------------------------------------------------- +# MAIN +# -------------------------------------------------------------------------------------------- + + +def main(): + """ + """ + # Finalizamos cualquier proceso activo de "btlaunchmany.bittornado" (seeder): + kill_seeder() + + # Finalizamos cualquier proceso activo de "bttrack" (tracker): + kill_tracker() + + + +# -------------------------------------------------------------------------------------------- + +if __name__ == "__main__": + main() + +# --------------------------------------------------------------------------------------------