diff --git a/MP1/client.py b/MP1/client.py index 1c5f14a..e1cee3c 100644 --- a/MP1/client.py +++ b/MP1/client.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3 import socket import sys +import time +import shlex -PORT = 5055 +PORT = 5056 ALL_IPS = [ "172.22.156.3", "172.22.158.2", @@ -48,10 +50,9 @@ def grep_all_ips(ips, cmd, if_unit_test): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((ip, PORT)) - if if_unit_test: - full_cmd = cmd + f" ./machine.{i + 1}.test.log" - else: - full_cmd = cmd + f" ./machine.{i + 1}.log" + filename = f"machine.{i + 1}.test.log" if if_unit_test else f"machine.{i + 1}.log" + + full_cmd = shlex.join(cmd + [filename]) send_message(client_socket, full_cmd) data = receive_message(client_socket) @@ -73,8 +74,12 @@ def grep_all_ips(ips, cmd, if_unit_test): #main #if unit test flag exists, then use the test log files instead of the actual log files -cmd = "grep " + " ".join([arg for arg in sys.argv[1:] if arg != "-t"]) -match_count = grep_all_ips(ALL_IPS, cmd, if_unit_test=[x for x in sys.argv].count("-t") > 0) +cmd = ["grep", *[arg for arg in sys.argv[1:] if arg != "-t"]] +#track time +start_time = time.perf_counter() +is_unit_test = "-t" in sys.argv +match_count = grep_all_ips(ALL_IPS, cmd, if_unit_test=is_unit_test) +end_time = time.perf_counter() print("=========================== SUMMARY ===========================") for i, count in enumerate(match_count): @@ -88,5 +93,7 @@ for i, count in enumerate(match_count): print(f"machine.{i + 1}.test.log: {count} matches") else: print(f"machine.{i + 1}.log: {count} matches") -print(f"Total matches: {max(0, sum(match_count))}") -print("===============================================================") \ No newline at end of file +total_matches = sum(count for count in match_count if count > 0) +print(f"Total matches: {total_matches}") +print("===============================================================") +print(f"Time taken: {end_time - start_time:.2f} seconds") diff --git a/MP1/scripts/kill_mp.sh b/MP1/scripts/kill_mp.sh index b93e9e0..92959e2 100755 --- a/MP1/scripts/kill_mp.sh +++ b/MP1/scripts/kill_mp.sh @@ -3,13 +3,13 @@ if [[ "$1" == "all" ]]; then for i in {1..10}; do echo "Killing server$i..." - ssh -o BatchMode=yes "server$i" "fuser -k -9 5055/tcp" + ssh -o BatchMode=yes "server$i" "fuser -k -9 5056/tcp" echo "" done else for i in "$@"; do echo "Killing server$i..." - ssh -o BatchMode=yes "server$i" "fuser -k -9 5055/tcp" + ssh -o BatchMode=yes "server$i" "fuser -k -9 5056/tcp" echo "" done fi \ No newline at end of file diff --git a/MP1/server.py b/MP1/server.py index b3893f5..1e51567 100644 --- a/MP1/server.py +++ b/MP1/server.py @@ -5,7 +5,7 @@ import subprocess from pathlib import Path HOST = "0.0.0.0" -PORT = 5055 +PORT = 5056 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -44,25 +44,23 @@ while True: conn, addr = server_socket.accept() print(f"Connected by {addr}") - command = receive_message(conn) - if command is None: + try: + command = receive_message(conn) + if command is None: + conn.close() + continue + + command_args = shlex.split(command) + + command_args.insert(1, "-n") + + result = subprocess.run(command_args, cwd=SCRIPT_DIR, capture_output=True, text=True) + + send_message(conn, result.stdout + result.stderr) + + except Exception as e: + None + finally: conn.close() - continue - - command_args = shlex.split(command) - - if not command_args or command_args[0] != "grep": - response = "Invalid command. Please use the 'grep' command." - send_message(conn, response) - conn.close() - continue - - command_args.insert(1, "-n") - - result = subprocess.run(command_args, cwd=SCRIPT_DIR, capture_output=True, text=True) - - send_message(conn, result.stdout + result.stderr) - - conn.close() server_socket.close() diff --git a/MP1/test.py b/MP1/test.py index 8e5cb10..97e5640 100644 --- a/MP1/test.py +++ b/MP1/test.py @@ -304,9 +304,9 @@ print(f"Running grep command on a {machine_num} random machine...") for i in tests: result = subprocess.run(["ssh", f"asing271@{ALL_IPS[machine_num - 1]}", f"cd ~/fa26_cs425_.group-mp_.team-01/MP1 && grepp {i} -t"], capture_output=True, text=True) if result.stdout.strip() == results[tests.index(i)].strip(): - print("PASS {i} test") + print(f"PASS {i} test") else: - print("FAIL {i} test") + print(f"FAIL {i} test") #delete log files on all the machines after running this test print("Deleting log files on all machines...")