refs #631 - Add 'stopP2P.py'

pull/1/head
Gerardo GIl Elizeire 2024-09-13 13:31:04 +02:00
parent 98534c09a3
commit 94bfef7af3
3 changed files with 93 additions and 12 deletions

View File

@ -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.
---

View File

@ -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':

View File

@ -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()
# --------------------------------------------------------------------------------------------