152 lines
5.5 KiB
Python
152 lines
5.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.
|
|
También comprueba si ogGit está instalado en el repositorio, y devuelve dicha información.
|
|
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
|
|
|
|
|
|
# --------------------------------------------------------------------------------------------
|
|
# VARIABLES
|
|
# --------------------------------------------------------------------------------------------
|
|
|
|
config_file = '/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg'
|
|
|
|
|
|
# --------------------------------------------------------------------------------------------
|
|
# FUNCTIONS
|
|
# --------------------------------------------------------------------------------------------
|
|
|
|
|
|
def get_oggit_info():
|
|
""" Obtiene el valor asociado a la variable "oggit", desde el archivo '/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg'.
|
|
Retorna el valor asociado capitalizado ("True" o "False").
|
|
"""
|
|
with open(config_file, 'r') as file:
|
|
for line in file:
|
|
if line.startswith('oggit'):
|
|
oggit_info = line.split('=')[1].strip()
|
|
return oggit_info.capitalize()
|
|
|
|
|
|
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():
|
|
"""
|
|
"""
|
|
# Comprobamos si ogGit está instalado en el repositorio o no:
|
|
oggit_installed = get_oggit_info()
|
|
|
|
# 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 = {
|
|
'oggit': {
|
|
'installed': oggit_installed
|
|
},
|
|
'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()
|
|
|
|
# --------------------------------------------------------------------------------------------
|