mirror of https://git.48k.eu/ogcp
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
parent
695b83d473
commit
3e35997131
|
@ -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 %}
|
|
@ -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 %}
|
||||
|
|
|
@ -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():
|
||||
|
|
Loading…
Reference in New Issue