refs #631 - Add 'getRepoStatus.py' and Modify API Proposal
parent
550c394735
commit
3d44dc9116
83
README.md
83
README.md
|
@ -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
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
# --------------------------------------------------------------------------------------------
|
Loading…
Reference in New Issue