From 58c7a7ee5709a99cd79d6f339a2c402e8ae106a9 Mon Sep 17 00:00:00 2001 From: rubenb Date: Tue, 30 Apr 2024 18:00:51 +0200 Subject: [PATCH] check papago --- check_papago/check_papago_condensation | 67 ++++++++++++++++++++++++++ check_papago/check_papago_humidity | 67 ++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100755 check_papago/check_papago_condensation create mode 100755 check_papago/check_papago_humidity diff --git a/check_papago/check_papago_condensation b/check_papago/check_papago_condensation new file mode 100755 index 0000000..e647e67 --- /dev/null +++ b/check_papago/check_papago_condensation @@ -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 ") + 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) diff --git a/check_papago/check_papago_humidity b/check_papago/check_papago_humidity new file mode 100755 index 0000000..0fef7d8 --- /dev/null +++ b/check_papago/check_papago_humidity @@ -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 ") + 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)