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