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.
master
Alejandro Sirgo Rica 2024-07-30 13:10:29 +02:00
parent 695b83d473
commit 3e35997131
3 changed files with 78 additions and 1 deletions

View File

@ -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 %}

View File

@ -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 %}

View File

@ -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():