check papago

This commit is contained in:
Ruben Blanco 2024-04-30 18:00:51 +02:00
parent be87abcc29
commit 58c7a7ee57
2 changed files with 134 additions and 0 deletions

View File

@ -0,0 +1,67 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
###########################
# Author: Rubenb #
# Fecha: 29/04/2024 #
###########################
import sys
import requests
import xml.etree.ElementTree as ET
def obtener_condensacion_cpd(url, nombre_rack, umbral_warning, umbral_critical):
try:
# Realizar la solicitud HTTP al dispositivo
response = requests.get(url)
# Verificar si la solicitud fue exitosa
if response.status_code == 200:
# Parsear el XML recibido
root = ET.fromstring(response.text)
# Buscar el elemento 'status' que contiene la ubicación del CPD
status_cpd = root.find(".//status")
if status_cpd is not None:
ubicacion_cpd = status_cpd.get('location', 'Desconocido')
# Buscar el elemento 'sns' con el nombre del rack especificado
rack_cpd = root.find(f".//sns[@name='{nombre_rack}']")
if rack_cpd is not None:
# Obtener el valor de la condensación del CPD
condensacion_cpd = float(rack_cpd.get('val3'))
# Comprobar los umbrales
if condensacion_cpd >= umbral_critical:
print(f"CRITICAL: Condensación del {ubicacion_cpd} {nombre_rack} ({condensacion_cpd}°C) excede el umbral crítico ({umbral_critical}°C)")
sys.exit(2)
elif condensacion_cpd >= umbral_warning:
print(f"WARNING: Condensación del {ubicacion_cpd} {nombre_rack} ({condensacion_cpd}°C) excede el umbral de advertencia ({umbral_warning}°C)")
sys.exit(1)
else:
print(f"OK: Condensación del {ubicacion_cpd} {nombre_rack}: {condensacion_cpd}°C")
sys.exit(0)
else:
print(f"Error: No se encontró el rack '{nombre_rack}' en el XML.")
sys.exit(3)
else:
print("Error: No se encontró el elemento 'status' en el XML.")
sys.exit(3)
else:
print("Error: No se pudo obtener el XML del dispositivo.")
sys.exit(3)
except Exception as e:
print(f"Error: {e}")
sys.exit(3)
if __name__ == "__main__":
# Verificar la cantidad de argumentos
if len(sys.argv) != 5:
print("Uso: python script.py <IP_del_dispositivo> <nombre_rack> <umbral_warning> <umbral_critical>")
sys.exit(3)
# Argumentos de línea de comandos
ip_dispositivo = sys.argv[1]
nombre_rack = sys.argv[2]
umbral_warning = float(sys.argv[3])
umbral_critical = float(sys.argv[4])
# URL del dispositivo que proporciona el XML
url_dispositivo = f"http://{ip_dispositivo}/fresh.xml"
obtener_condensacion_cpd(url_dispositivo, nombre_rack, umbral_warning, umbral_critical)

View File

@ -0,0 +1,67 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
###########################
# Author: Rubenb #
# Fecha: 29/04/2024 #
###########################
import sys
import requests
import xml.etree.ElementTree as ET
def obtener_humedad_cpd(url, nombre_rack, umbral_warning, umbral_critical):
try:
# Realizar la solicitud HTTP al dispositivo
response = requests.get(url)
# Verificar si la solicitud fue exitosa
if response.status_code == 200:
# Parsear el XML recibido
root = ET.fromstring(response.text)
# Buscar el elemento 'status' que contiene la ubicación del CPD
status_cpd = root.find(".//status")
if status_cpd is not None:
ubicacion_cpd = status_cpd.get('location', 'Desconocido')
# Buscar el elemento 'sns' con el nombre del rack especificado
rack_cpd = root.find(f".//sns[@name='{nombre_rack}']")
if rack_cpd is not None:
# Obtener el valor de la humedad del CPD
humedad_cpd = float(rack_cpd.get('val2'))
# Comprobar los umbrales
if humedad_cpd >= umbral_critical:
print(f"CRITICAL: Humedad del {ubicacion_cpd} {nombre_rack} ({humedad_cpd}%) excede el umbral crítico ({umbral_critical}%)")
sys.exit(2)
elif humedad_cpd >= umbral_warning:
print(f"WARNING: Humedad del {ubicacion_cpd} {nombre_rack} ({humedad_cpd}%) excede el umbral de advertencia ({umbral_warning}%)")
sys.exit(1)
else:
print(f"OK: Humedad del {ubicacion_cpd} {nombre_rack}: {humedad_cpd}%")
sys.exit(0)
else:
print(f"Error: No se encontró el rack '{nombre_rack}' en el XML.")
sys.exit(3)
else:
print("Error: No se encontró el elemento 'status' en el XML.")
sys.exit(3)
else:
print("Error: No se pudo obtener el XML del dispositivo.")
sys.exit(3)
except Exception as e:
print(f"Error: {e}")
sys.exit(3)
if __name__ == "__main__":
# Verificar la cantidad de argumentos
if len(sys.argv) != 5:
print("Uso: python script.py <IP_del_dispositivo> <nombre_rack> <umbral_warning> <umbral_critical>")
sys.exit(3)
# Argumentos de línea de comandos
ip_dispositivo = sys.argv[1]
nombre_rack = sys.argv[2]
umbral_warning = float(sys.argv[3])
umbral_critical = float(sys.argv[4])
# URL del dispositivo que proporciona el XML
url_dispositivo = f"http://{ip_dispositivo}/fresh.xml"
obtener_humedad_cpd(url_dispositivo, nombre_rack, umbral_warning, umbral_critical)