diff --git a/dashboard.py b/dashboard.py index ccd3b7b..d58545b 100755 --- a/dashboard.py +++ b/dashboard.py @@ -64,41 +64,48 @@ def create_node_tree(all_server_data) -> Tree: for server_host, server_data in all_server_data['servers'].items(): - if server_host == local_hostname: - node_tree_text = f"[cyan bold]{server_host}[/] [yellow](This Computer)[default] - [green]Running" + node_title_local = f"[cyan bold]{server_host}[/] [yellow](This Computer)[default]" + 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: - node_tree_text = f"[cyan]{server_host} [magenta](Remote)[default] - [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) + # if server is offline + node_tree_text = node_tree_text + " - [red]Offline" + node_tree = Tree(node_tree_text) + main_tree.add(node_tree) return main_tree diff --git a/templates/upload.html b/templates/upload.html index 89a56d0..52f2b57 100644 --- a/templates/upload.html +++ b/templates/upload.html @@ -3,7 +3,7 @@

Upload a file

-

diff --git a/zordon_server.py b/zordon_server.py index 7be8193..92711c8 100755 --- a/zordon_server.py +++ b/zordon_server.py @@ -284,12 +284,12 @@ class RenderServer: return success try: - response = requests.get(f"https://{hostname}/status", timeout=1) + response = requests.get(f"http://{hostname}:8080/status", timeout=1) if response.ok: cls.render_clients.append(hostname) logger.info(f"Client '{hostname}' successfully registered") success = True - except requests.exceptions.ConnectTimeout as e: + except requests.ConnectionError as e: logger.error(f"Cannot connect to client at hostname: {hostname}") return success @@ -336,11 +336,11 @@ class RenderServer: if background_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.join() 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) @@ -378,11 +378,20 @@ def full_status(): try: for client_hostname in RenderServer.render_clients: + is_online = False if client_hostname == local_hostname: snapshot_results = snapshot() + is_online = True else: - snapshot_results = requests.get(f'http://{client_hostname}:8080/snapshot', timeout=1).json() - server_data = {'status': snapshot_results.get('status'), 'jobs': snapshot_results.get('jobs')} + snapshot_results = {} + 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 except Exception as e: logger.error(f"Exception fetching full status: {e}") @@ -505,4 +514,5 @@ def upload_file(): if __name__ == '__main__': - start_server() + RenderServer.start() +