refs #631 - Add 'getRepoStatus.py' and Modify API Proposal

pull/1/head
Gerardo GIl Elizeire 2024-10-03 12:11:03 +02:00
parent 550c394735
commit 3d44dc9116
2 changed files with 193 additions and 16 deletions

View File

@ -20,23 +20,74 @@ El presente documento detalla los endpoints de la API, con sus respectivos pará
---
### Tabla de Contenido:
1. [Obtener Información de todas las Imágenes](#obtener-información-de-todas-las-imágenes) - `GET /ogrepository/v1/images`
2. [Obtener Información de una Imagen concreta](#obtener-información-de-una-imagen-concreta) - `GET /ogrepository/v1/images/{ID_img}`
3. [Actualizar Información del Repositorio](#actualizar-información-del-repositorio) - `PUT /ogrepository/v1/images`
4. [Chequear integridad de Imagen](#chequear-integridad-de-imagen) - `GET /ogrepository/v1/status/images/{ID_img}`
5. [Eliminar una Imagen](#eliminar-una-imagen) - `DELETE /ogrepository/v1/images/{ID_img}`
6. [Recuperar una Imagen](#recuperar-una-imagen) - `POST /ogrepository/v1/trash/images/{ID_img}`
7. [Eliminar una Imagen de la Papelera](#eliminar-una-imagen-de-la-papelera) - `DELETE /ogrepository/v1/trash/images/{ID_img}`
8. [Importar una Imagen](#importar-una-imagen) - `POST /ogrepository/v1/repo/{ID_repo}/images/{ID_img}`
9. [Crear archivos auxiliares](#crear-archivos-auxiliares) - `POST /ogrepository/v1/images/create-torrentsum`
10. [Enviar paquete Wake On Lan](#enviar-paquete-wake-on-lan) - `POST /ogrepository/v1/images/send-wol`
11. [Enviar una Imagen mediante UDPcast](#enviar-una-imagen-mediante-udpcast) - `POST /ogrepository/v1/udpcast/images/{ID_img}`
12. [Enviar una Imagen mediante UFTP](#enviar-una-imagen-mediante-uftp) - `POST /ogrepository/v1/uftp/images/{ID_img}`
13. [Enviar una Imagen mediante P2P](#enviar-una-imagen-mediante-p2p) - `POST /ogrepository/v1/p2p/images/{ID_img}`
14. [Cancelar Transmisión UDPcast](#cancelar-transmisión-udpcast) - `DELETE /ogrepository/v1/udpcast/images/{ID_img}`
15. [Cancelar Transmisiones P2P](#cancelar-transmisiones-p2p) - `DELETE /ogrepository/v1/p2p`
16. [Ver Estado de Transmisiones Multicast-P2P](#ver-estado-de-transmisiones-multicast-p2p) -
1. [Obtener Información de Estado de ogRepository](#obtener-información-de-estado-de-ogrepository) - `GET /ogrepository/v1/status`
2. [Obtener Información de todas las Imágenes](#obtener-información-de-todas-las-imágenes) - `GET /ogrepository/v1/images`
3. [Obtener Información de una Imagen concreta](#obtener-información-de-una-imagen-concreta) - `GET /ogrepository/v1/images/{ID_img}`
4. [Actualizar Información del Repositorio](#actualizar-información-del-repositorio) - `PUT /ogrepository/v1/images`
5. [Chequear integridad de Imagen](#chequear-integridad-de-imagen) - `GET /ogrepository/v1/status/images/{ID_img}`
6. [Eliminar una Imagen](#eliminar-una-imagen) - `DELETE /ogrepository/v1/images/{ID_img}`
7. [Recuperar una Imagen](#recuperar-una-imagen) - `POST /ogrepository/v1/trash/images/{ID_img}`
8. [Eliminar una Imagen de la Papelera](#eliminar-una-imagen-de-la-papelera) - `DELETE /ogrepository/v1/trash/images/{ID_img}`
9. [Importar una Imagen](#importar-una-imagen) - `POST /ogrepository/v1/repo/{ID_repo}/images/{ID_img}`
10. [Crear archivos auxiliares](#crear-archivos-auxiliares) - `POST /ogrepository/v1/images/create-torrentsum`
11. [Enviar paquete Wake On Lan](#enviar-paquete-wake-on-lan) - `POST /ogrepository/v1/images/send-wol`
12. [Enviar una Imagen mediante UDPcast](#enviar-una-imagen-mediante-udpcast) - `POST /ogrepository/v1/udpcast/images/{ID_img}`
13. [Enviar una Imagen mediante UFTP](#enviar-una-imagen-mediante-uftp) - `POST /ogrepository/v1/uftp/images/{ID_img}`
14. [Enviar una Imagen mediante P2P](#enviar-una-imagen-mediante-p2p) - `POST /ogrepository/v1/p2p/images/{ID_img}`
15. [Cancelar Transmisión UDPcast](#cancelar-transmisión-udpcast) - `DELETE /ogrepository/v1/udpcast/images/{ID_img}`
16. [Cancelar Transmisiones P2P](#cancelar-transmisiones-p2p) - `DELETE /ogrepository/v1/p2p`
17. [Ver Estado de Transmisiones Multicast-P2P](#ver-estado-de-transmisiones-multicast-p2p) -
---
### Obtener Información de Estado de ogRepository
Se devolverá informacion de CPU, memoria RAM, disco duro y el estado de ciertos servicios y procesos de ogRepository, en formato JSON.
Se puede utilizar el script "**getRepoStatus.py**, que hemos programado recientemente.
**NOTA**: En los apartados "services" y "processes" he especificado los servicios y procesos que me han parecido interesantes, pero se puede añadir o eliminar los que se desee.
**URL:** `/ogrepository/v1/status`
**Método HTTP:** GET
**Ejemplo de Solicitud:**
```bash
curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/status
```
**Respuestas:**
- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de estado.
- **Código 200 OK:** La información de estado se obtuvo exitosamente.
- **Contenido:** Información de estado en formato JSON.
```json
{
"cpu": {
"used_percentage": "35%"
},
"ram": {
"total": "7.8GB",
"used": "0.3GB",
"available": "7.2GB",
"used_percentage": "7%"
},
"disk": {
"total": "11.7GB",
"used": "7.7GB",
"available": "3.4GB",
"used_percentage": "69%"
},
"services": {
"ssh": "active",
"smbd": "active",
"rsync": "active"
},
"processes": {
"udp-sender": "stopped",
"uftp": "stopped",
"bttrack": "stopped",
"btlaunchmany": "stopped"
}
}
```
---
### Obtener Información de todas las Imágenes

View File

@ -0,0 +1,126 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Este script devuelve información de CPU, memoria RAM, disco duro y el estado de ciertos servicios y procesos de ogRepository, en formato json.
No recibe ningún parámetro.
Librerías Python requeridas: "psutil" (se puede instalar con "sudo apt install python3-psutil". o "pip install psutil")
"""
# --------------------------------------------------------------------------------------------
# IMPORTS
# --------------------------------------------------------------------------------------------
import psutil
import os
import json
import subprocess
# --------------------------------------------------------------------------------------------
# FUNCTIONS
# --------------------------------------------------------------------------------------------
def get_cpu_info():
""" Obtiene y retorna información de la CPU.
"""
cpu_percent = psutil.cpu_percent(interval=1)
return cpu_percent
def get_ram_info():
""" Obtiene y retorna información de la memoria RAM.
"""
ram = psutil.virtual_memory()
return ram.total, ram.used, ram.available, ram.percent
def get_disk_info():
""" Obtiene y retorna información del disco duro.
"""
disk = psutil.disk_usage('/')
return disk.total, disk.used, disk.free, disk.percent
def get_service_status(service):
""" Obtiene y retorna el estado del servicio que recibe como parámetro.
En caso de error, retorna un mensaje estándar.
"""
try:
result = subprocess.run(['systemctl', 'is-active', service], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8')
service_status = result.stdout.strip()
return service_status
except Exception:
return "status not accesible"
def get_process_status(process):
""" Obtiene y retorna el estado del proceso que recibe como parámetro.
"""
#for proc in psutil.process_iter(['pid', 'name', 'status']):
for proc in psutil.process_iter(['name']):
if proc.info['name'] == process:
return 'running'
return 'stopped'
# --------------------------------------------------------------------------------------------
# MAIN
# --------------------------------------------------------------------------------------------
def main():
"""
"""
# Obtenemos información de la CPU:
cpu_percent = get_cpu_info()
# Obtenemos información de la memoria RAM:
total_ram, used_ram, available_ram, percent_ram = get_ram_info()
# Obtenemos información del disco duro:
total_disk, used_disk, free_disk, percent_disk = get_disk_info()
# Obtenemos el estado de los servicios listados, que almacenamos en un diccionario:
service_list = ['ssh', 'smbd', 'rsync']
services_status = {service: get_service_status(service) for service in service_list}
# Obtenemos el estado de los procesos listados, que almacenamos en un diccionario:
process_list = ['udp-sender', 'uftp', 'bttrack', 'btlaunchmany']
process_status = {process: get_process_status(process) for process in process_list}
# Creamos un diccionario con toda la información obtenida:
data_dict = {
'cpu': {
'used_percentage': f"{int(cpu_percent)}%"
},
'ram': {
'total': f"{round(total_ram / (1024 ** 3), 1)}GB",
'used': f"{round(used_ram / (1024 ** 3), 1)}GB",
'available': f"{round(available_ram / (1024 ** 3), 1)}GB",
'used_percentage': f"{int(percent_ram)}%"
},
'disk': {
'total': f"{round(total_disk / (1024 ** 3), 1)}GB",
'used': f"{round(used_disk / (1024 ** 3), 1)}GB",
'available': f"{round(free_disk / (1024 ** 3), 1)}GB",
'used_percentage': f"{int(percent_disk)}%"
},
'services': services_status,
'processes': process_status
}
# Convertimos el diccionario a JSON, y lo imprimimos:
json_data = json.dumps(data_dict, indent=4)
print(json_data)
# --------------------------------------------------------------------------------------------
if __name__ == "__main__":
main()
# --------------------------------------------------------------------------------------------