summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Sirgo Rica <asirgo@soleta.eu>2024-07-30 13:10:29 +0200
committerAlejandro Sirgo Rica <asirgo@soleta.eu>2024-08-05 10:03:12 +0200
commit3e35997131f51e892b93157c6d18a3a0ba759318 (patch)
treec722d8601b7b4f36af12db95a905ca6212abdda0
parent695b83d4730e624a7cffa7e6ee14a64ece226eb8 (diff)
ogcp: add connected clients list view
Add view to show the connected clients with access to the client details of each one. The view is accessible through the main dashboard.
-rw-r--r--ogcp/templates/client_list.html55
-rw-r--r--ogcp/templates/dashboard.html2
-rw-r--r--ogcp/views.py22
3 files changed, 78 insertions, 1 deletions
diff --git a/ogcp/templates/client_list.html b/ogcp/templates/client_list.html
new file mode 100644
index 0000000..188cc2a
--- /dev/null
+++ b/ogcp/templates/client_list.html
@@ -0,0 +1,55 @@
+{% extends 'commands.html' %}
+
+{% set sidebar_state = 'disabled' %}
+{% set btn_back = true %}
+
+{% block content %}
+
+<h2 class="mx-5 subhead-heading">{{_('Connected clients')}}</h2>
+
+<div class="container mx-5">
+
+{% for server_id, server_data in servers_data.items() %}
+<div class="accordion card" id="shellAccordion">
+ <div class="card-header" id="heading_1">
+ <h2 class="mb-0">
+ <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapse_{{ loop.index }}" aria-expanded="true" aria-controls="collapse_{{ loop.index }}">
+ <h4>{{ server_data.name}}</h4>
+ </button>
+ </h2>
+ </div>
+ <div id="collapse_{{ loop.index }}" class="collapse show" aria-labelledby="heading_{{ loop.index }}">
+ <div class="card-body">
+ <table class="table table-hover">
+ <thead class="thead-light">
+ <tr>
+ <th>{{ _('IP') }}</th>
+ <th>{{ _('Link speed') }}</th>
+ <th>{{ _('Details') }}</th>
+ </tr>
+ </thead>
+
+ <tbody data-target="cache-fieldset" id="cacheTable" class="text-left">
+ {% for client_data in server_data.clients %}
+ <tr data-toggle="fieldset-entry">
+ <td>{{ client_data.addr }}</td>
+ <td>
+ {% if client_data.speed >= 1000 %}
+ {{ (client_data.speed / 1000) | int }} Gb/s
+ {% else %}
+ {{ client_data.speed }} Mb/s
+ {% endif %}
+ </td>
+ <td><a href="{{ url_for('action_client_info', client_ip = client_data.addr) }}">{{ _('View details') }}</a></td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+{% endfor %}
+
+</div>
+
+{% endblock %}
diff --git a/ogcp/templates/dashboard.html b/ogcp/templates/dashboard.html
index 7cd300b..3ec2cd8 100644
--- a/ogcp/templates/dashboard.html
+++ b/ogcp/templates/dashboard.html
@@ -26,7 +26,7 @@
<th>{{ server.name }}</th>
<td>{{ server.time_dict.boot }}</td>
<td>{{ server.time_dict.start }}</td>
- <td>{{ server.clients | length }}</td>
+ <td><a href="{{ url_for('client_list') }}">{{ server.clients | length }}</a></td>
<td><a href="{{ url_for('images') }}">{{ server.images | length }}</a></td>
<td>
{% set disk = server.disk %}
diff --git a/ogcp/views.py b/ogcp/views.py
index 1beaa5b..2a89d01 100644
--- a/ogcp/views.py
+++ b/ogcp/views.py
@@ -551,6 +551,28 @@ def get_client_mac():
return jsonify(pretty_mac)
+@app.route('/client/list', methods=['GET'])
+@login_required
+def client_list():
+ clients_response = multi_request('get', '/clients')
+ servers_data = {}
+ for i in clients_response:
+ server_id = i['server'].id
+ if server_id not in servers_data:
+ servers_data[server_id] = {}
+ servers_data[server_id]['clients'] = i['json']['clients']
+ for server in servers:
+ if server.id == server_id:
+ servers_data[server_id]['name'] = server.name
+
+ scopes, clients = get_scopes()
+ selected_clients = list(get_selected_clients(scopes['scope']).items())
+
+ return render_template('client_list.html', servers_data=servers_data,
+ selected_clients=selected_clients,
+ scopes=scopes)
+
+
@app.route('/scopes/')
@login_required
def scopes():