From 89dc2274b0270a9af55ddf2f7b7e33efa2635865 Mon Sep 17 00:00:00 2001 From: rubenb Date: Mon, 29 Apr 2024 15:40:35 +0200 Subject: [PATCH] add check temperature --- check_papago_temperature | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 check_papago_temperature diff --git a/check_papago_temperature b/check_papago_temperature new file mode 100644 index 0000000..bc092ef --- /dev/null +++ b/check_papago_temperature @@ -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 ") + 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)