diff --git a/osiris_node.py b/osiris_node.py index 152764f..0c2f3fb 100644 --- a/osiris_node.py +++ b/osiris_node.py @@ -1,14 +1,84 @@ import requests +from wakeonlan import send_magic_packet +import time +import subprocess -nuc_ip = '192.168.178.52' -url = f'http://{nuc_ip}:9713/osiris_execute' -command = "testcommand" +def check_target_available(target_host: str): + # Ping the host to check if it's online + ips = get_target_ips() + ip_target = ips[target_host] + try: + # Use subprocess to execute the ping command + response = subprocess.run( + ["ping", "-n", "1", "-w", "1000", ip_target], # Windows parameters: '-n 1' sends one ping, '-w 1000' sets a 1-second timeout + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + return response.returncode == 0 + except Exception as e: + print(f"Error pinging the host: {e}") + return False -response = requests.post(url, json={'command': command}) -if response.status_code == 200: - result = response.json() - print('Response:', result.get('message')) -else: - print('Failed to execute script:', response.json()) \ No newline at end of file +def get_target_ips(): + targets = { + 'nuc_morroc': '192.168.178.52' + } + return targets + + +def get_target_macs(): + targets = { + 'nuc_morroc': '48:21:0B:3D:46:D5' + } + return targets + + +def send_wakeonlan(target_host: str): + mac_profiles = get_target_macs() + mac_target = mac_profiles[target_host] + send_magic_packet(mac_target) + print(f"Magic packet wurde an {target_host} gesendet") + + +def _send_command_to_target(target_ip: str, command: str = 'testcommand') -> str: + target_node_route = f'http://{target_ip}:9713/osiris_execute' + response = requests.post(target_node_route, json={'command': command}) + try: + if response.status_code == 200: + result = response.json() + print('Response:', result.get('message')) + else: + print('Failed to execute script:', response.json()) + except requests.exceptions.RequestException as e: + print(f"Error connecting to the host {target_host}: {e}") + + +def send_shutdown_command(target_host: str): + ip_profiles = get_target_ips() + ip_target = ip_profiles[target_host] + _send_command_to_target(ip_target,'shutdown') + + +def send_testcommand(target_host: str): + ip_profiles = get_target_ips() + ip_target = ip_profiles[target_host] + _send_command_to_target(ip_target) + + +if __name__ == "__main__": + target_host = 'nuc_morroc' + available = check_target_available(target_host) + if available: + send_testcommand(target_host) + else: + send_wakeonlan(target_host) + print(f"Host {target_host} wird auf geweckt") + time.sleep(30) + available = check_target_available(target_host) + if not available: + print(f"Host {target_host} reagiert nicht auf weckruf. Programm wird beendet.") + else: + print(f"Host {target_host} ist aufgewacht. Kommando wird gesendet.") + send_testcommand(target_host) \ No newline at end of file