ogrepository/bin/getRepoStatus.py

127 lines
4.5 KiB
Python

#!/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(['name']):
if proc.info['name'] in process:
return 'running'
# Esto no debe ir asociado a un "else" (porque comprueba todos los procesos):
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.bittornado']
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()
# --------------------------------------------------------------------------------------------