diff --git a/.env b/.env new file mode 100644 index 0000000..97b1c54 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +DISCORD_WEBHOOK_URL='https://discord.com/api/webhooks/1229025346385608824/kIt2dp2znu0jR85QbOPmoMAteHaB9BCJDTMfn0cHE9mwpxHkbUNc9By2Y7n6gpufoyco' diff --git a/status.py b/status.py index c5b1d64..f3b3f97 100644 --- a/status.py +++ b/status.py @@ -1,6 +1,16 @@ import argparse from pythonping import ping +import ipaddress +import requests +import logging +DISCORD_WEBHOOK_URL='https://discord.com/api/webhooks/1229025346385608824/kIt2dp2znu0jR85QbOPmoMAteHaB9BCJDTMfn0cHE9mwpxHkbUNc9By2Y7n6gpufoyco' +logging.basicConfig(filename='/var/log/status.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + +def read_document(document_name): + with open(document_name, 'r') as file: + # Leer todas las líneas del archivo y guardarlas en un conjunto + return {linea.rstrip('\n') for linea in file} def parseArguments(): # Crear un objeto ArgumentParser @@ -12,11 +22,7 @@ def parseArguments(): try: # Parsear los argumentos de la línea de comandos - args = parser.parse_args() - if args.web: - return args.web - elif args.host: - return args.host + return parser.parse_args() except argparse.ArgumentError as e: # Si ocurre un error al analizar los argumentos, mostrar un mensaje de error print("Error:", e) @@ -24,15 +30,48 @@ def parseArguments(): parser.print_help() exit() -def check_ping(host): - try: - response = ping(host, count=4, timeout=2) # verbose=True -> Para ver la respuesta del ping - return True if response.success() else False - except Exception as e: - print(f"Error making ping to {host}: {e}") - return False +def toIP(hosts): + ips = set() + for host in hosts: + try: + ip = ipaddress.IPv4Address(host) + ips.add(ip) + except ipaddress.AddressValueError: + print(f"La entrada '{host}' no es una dirección IP válida.") + return ips +def check_ping(hosts): + for host in hosts: + try: + response = ping(str(host), count=4, timeout=2) # verbose=True -> Para ver la respuesta del ping + if not response.success(): + logging.info(f"Bad ping: {host}") + send_discord_message(f"Ping fallido para el host: {host}") + elif response.success(): + logging.info(f"Ping correct: {host}") + except Exception as e: + logging.info(f"Bad ping: {host}") + +def send_discord_message(message): + data = { + "content": message + } + try: + response = requests.post(DISCORD_WEBHOOK_URL, json=data) + response.raise_for_status() + except requests.exceptions.RequestException as e: + print(f"Error sending Discord message: {e}") + logging.info(f"Error sending Discord message: {e}") + else: + logging.info("Discord message sent successfully!") if __name__ == '__main__': args = parseArguments() - print(check_ping(args)) + ips_and_hosts = set() + if args.host: + ips_and_hosts.update(toIP(read_document(args.host))) + if args.web: + print("Hay webs") + # Parsear correctamente + # ips_and_hosts.update() + check_ping(ips_and_hosts) \ No newline at end of file