add check temperature
This commit is contained in:
parent
d743ec1962
commit
89dc2274b0
|
@ -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_temperatura_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 temperatura del CPD
|
||||
temperatura_cpd = float(rack_cpd.get('val'))
|
||||
# Comprobar los umbrales
|
||||
if temperatura_cpd >= umbral_critical:
|
||||
print(f"CRITICAL: Temperatura del {ubicacion_cpd} ({temperatura_cpd}°C) excede el umbral crítico ({umbral_critical}°C)")
|
||||
sys.exit(2)
|
||||
elif temperatura_cpd >= umbral_warning:
|
||||
print(f"WARNING: Temperatura del {ubicacion_cpd} ({temperatura_cpd}°C) excede el umbral de advertencia ({umbral_warning}°C)")
|
||||
sys.exit(1)
|
||||
else:
|
||||
print(f"OK: Temperatura del {ubicacion_cpd}: {temperatura_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_temperatura_cpd(url_dispositivo, nombre_rack, umbral_warning, umbral_critical)
|
Loading…
Reference in New Issue