Additional work to allow registering of remote clients

This commit is contained in:
Brett Williams
2022-10-09 17:34:06 -07:00
parent 9d6f7f4187
commit 5dabad24e9
3 changed files with 59 additions and 42 deletions

View File

@@ -64,41 +64,48 @@ def create_node_tree(all_server_data) -> Tree:
for server_host, server_data in all_server_data['servers'].items(): for server_host, server_data in all_server_data['servers'].items():
if server_host == local_hostname: node_title_local = f"[cyan bold]{server_host}[/] [yellow](This Computer)[default]"
node_tree_text = f"[cyan bold]{server_host}[/] [yellow](This Computer)[default] - [green]Running" node_title_remote = f"[cyan]{server_host} [magenta](Remote)[default]"
node_tree_text = node_title_local if (server_host == local_hostname) else node_title_remote
if server_data.get('is_online', False):
node_tree_text = node_tree_text + " - [green]Running"
node_tree = Tree(node_tree_text)
stats_text = f"CPU: [yellow]{server_data['status']['cpu_percent']}% [default]| RAM: " \
f"[yellow]{server_data['status']['memory_percent']}% [default]| Cores: " \
f"[yellow]{server_data['status']['cpu_count']} [default]| " \
f"{server_data['status']['platform'].split('-')[0]}"
node_tree.add(Tree(stats_text))
running_jobs = [job for job in server_data['jobs'] if job['status'] == 'running']
not_started = [job for job in server_data['jobs'] if job['status'] == 'not_started']
scheduled = [job for job in server_data['jobs'] if job['status'] == 'scheduled']
jobs_to_display = running_jobs + not_started + scheduled
jobs_tree = Tree(f"Running: [green]{len(running_jobs)} [default]| Queued: [cyan]{len(not_started)}"
f"[default] | Scheduled: [cyan]{len(scheduled)}")
for job in jobs_to_display:
renderer = f"{renderer_colors[job['renderer']]}{job['renderer']}[default]"
filename = os.path.basename(job['render']['input']).split('.')[0]
if job['status'] == 'running':
jobs_tree.add(f"[bold]{renderer} {filename} ({job['id']}) - {status_string_to_color(job['status'])}{(float(job['render']['percent_complete']) * 100):.1f}%")
else:
jobs_tree.add(f"{filename} ({job['id']}) - {status_string_to_color(job['status'])}{job['status'].title()}")
if not jobs_to_display:
jobs_tree.add("[italic]No running jobs")
node_tree.add(jobs_tree)
main_tree.add(node_tree)
else: else:
node_tree_text = f"[cyan]{server_host} [magenta](Remote)[default] - [green]Running" # if server is offline
node_tree_text = node_tree_text + " - [red]Offline"
node_tree = Tree(node_tree_text) node_tree = Tree(node_tree_text)
main_tree.add(node_tree)
stats_text = f"CPU: [yellow]{server_data['status']['cpu_percent']}% [default]| RAM: " \
f"[yellow]{server_data['status']['memory_percent']}% [default]| Cores: " \
f"[yellow]{server_data['status']['cpu_count']} [default]| " \
f"{server_data['status']['platform'].split('-')[0]}"
node_tree.add(Tree(stats_text))
running_jobs = [job for job in server_data['jobs'] if job['status'] == 'running']
not_started = [job for job in server_data['jobs'] if job['status'] == 'not_started']
scheduled = [job for job in server_data['jobs'] if job['status'] == 'scheduled']
jobs_to_display = running_jobs + not_started + scheduled
jobs_tree = Tree(f"Running: [green]{len(running_jobs)} [default]| Queued: [cyan]{len(not_started)}"
f"[default] | Scheduled: [cyan]{len(scheduled)}")
for job in jobs_to_display:
renderer = f"{renderer_colors[job['renderer']]}{job['renderer']}[default]"
filename = os.path.basename(job['render']['input']).split('.')[0]
if job['status'] == 'running':
jobs_tree.add(f"[bold]{renderer} {filename} ({job['id']}) - {status_string_to_color(job['status'])}{(float(job['render']['percent_complete']) * 100):.1f}%")
else:
jobs_tree.add(f"{filename} ({job['id']}) - {status_string_to_color(job['status'])}{job['status'].title()}")
if not jobs_to_display:
jobs_tree.add("[italic]No running jobs")
node_tree.add(jobs_tree)
main_tree.add(node_tree)
return main_tree return main_tree

View File

@@ -3,7 +3,7 @@
<body> <body>
<h1>Upload a file</h1> <h1>Upload a file</h1>
<form action="http://localhost:8080/uploader" method="POST" <form action="/uploader" method="POST"
enctype="multipart/form-data"> enctype="multipart/form-data">
<div> <div>
<input type="file" name="file"/><br> <input type="file" name="file"/><br>

View File

@@ -284,12 +284,12 @@ class RenderServer:
return success return success
try: try:
response = requests.get(f"https://{hostname}/status", timeout=1) response = requests.get(f"http://{hostname}:8080/status", timeout=1)
if response.ok: if response.ok:
cls.render_clients.append(hostname) cls.render_clients.append(hostname)
logger.info(f"Client '{hostname}' successfully registered") logger.info(f"Client '{hostname}' successfully registered")
success = True success = True
except requests.exceptions.ConnectTimeout as e: except requests.ConnectionError as e:
logger.error(f"Cannot connect to client at hostname: {hostname}") logger.error(f"Cannot connect to client at hostname: {hostname}")
return success return success
@@ -336,11 +336,11 @@ class RenderServer:
if background_thread: if background_thread:
server_thread = threading.Thread( server_thread = threading.Thread(
target=lambda: app.run(host=cls.host_name, port=cls.port, debug=False, use_reloader=False)) target=lambda: app.run(host='0.0.0.0', port=cls.port, debug=False, use_reloader=False))
server_thread.start() server_thread.start()
server_thread.join() server_thread.join()
else: else:
app.run(host=cls.host_name, port=cls.port, debug=config.get('flask_debug_enable', False), app.run(host='0.0.0.0', port=cls.port, debug=config.get('flask_debug_enable', False),
use_reloader=False) use_reloader=False)
@@ -378,11 +378,20 @@ def full_status():
try: try:
for client_hostname in RenderServer.render_clients: for client_hostname in RenderServer.render_clients:
is_online = False
if client_hostname == local_hostname: if client_hostname == local_hostname:
snapshot_results = snapshot() snapshot_results = snapshot()
is_online = True
else: else:
snapshot_results = requests.get(f'http://{client_hostname}:8080/snapshot', timeout=1).json() snapshot_results = {}
server_data = {'status': snapshot_results.get('status'), 'jobs': snapshot_results.get('jobs')} try:
snapshot_request = requests.get(f'http://{client_hostname}:8080/snapshot', timeout=1)
snapshot_results = snapshot_request.json()
is_online = snapshot_request.ok
except requests.ConnectionError as e:
pass
server_data = {'status': snapshot_results.get('status', {}), 'jobs': snapshot_results.get('jobs', {}),
'is_online': is_online}
full_results['servers'][client_hostname] = server_data full_results['servers'][client_hostname] = server_data
except Exception as e: except Exception as e:
logger.error(f"Exception fetching full status: {e}") logger.error(f"Exception fetching full status: {e}")
@@ -505,4 +514,5 @@ def upload_file():
if __name__ == '__main__': if __name__ == '__main__':
start_server() RenderServer.start()