import subprocess import os import socket import time PORT=22013 HOST='paffenroth-23.dyn.wpi.edu' def deploy(): print(f'Deploying the app...') try: # Run the setup.sh script result = subprocess.run( ['./setup.sh'], # Command to execute stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True # Raise an exception for non-zero exit codes ) print(result.stdout.decode()) # Print standard output from the script except subprocess.CalledProcessError as e: print(f"Error occurred while deploying: {e.stderr.decode()}") def is_port_busy(host, port): """Check if the specified port on the host is busy.""" with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.settimeout(1) # 1 second timeout return sock.connect_ex((host, port)) == 0 # Returns True if port is busy def checkStatus(HOST, PORT): print(f'Checking the status of the app...') try: # Run the netcat (nc) command to check if the port is open result = subprocess.run( ['nc', '-vz', HOST, str(PORT)], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # If the return code is 0, the connection was successful if result.returncode == 0: print(f"Connection to {HOST}:{PORT} successful.") return True else: print(f"Connection to {HOST}:{PORT} refused.") return False except Exception as e: print(f"Error occurred: {e}") return False def monitorStatus(HOST, PORT, checkInterval=5): # for 5 seconds will wait if the port is not available print(f'Monitoring the status of the app...') status=False while True: if checkStatus(HOST, PORT): # If the connection is successful, run deploy and exit the loop if not status: print('Deploying the app...') deploy() status=True else: # If connection is refused, wait and retry print(f"Waiting for the server {HOST}:{PORT} to become available...") time.sleep(checkInterval) status = False # checkStatus(HOST, PORT) monitorStatus(HOST, PORT)