summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ogcp/templates/client_list.html32
-rw-r--r--ogcp/templates/client_status_leyend.html15
-rw-r--r--ogcp/templates/macros.html18
-rw-r--r--ogcp/views.py41
4 files changed, 77 insertions, 29 deletions
diff --git a/ogcp/templates/client_list.html b/ogcp/templates/client_list.html
index 8a3fd5b..723dce9 100644
--- a/ogcp/templates/client_list.html
+++ b/ogcp/templates/client_list.html
@@ -8,6 +8,8 @@
<div class="container mx-5">
+{% include 'client_status_leyend.html' %}
+
{% for server_id, server_data in servers_data.items() %}
<div class="accordion card" id="shellAccordion">
<div class="card-header" id="heading_1">
@@ -22,8 +24,10 @@
<table class="table table-hover">
<thead class="thead-light">
<tr>
+ <th>{{ _('Name') }}</th>
<th>{{ _('IP') }}</th>
<th>{{ _('Link speed') }}</th>
+ <th>{{ _('Status') }}</th>
<th>{{ _('Details') }}</th>
</tr>
</thead>
@@ -31,9 +35,10 @@
<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.name }}</td>
<td>{{ client_data.addr }}</td>
<td>
- {% if client_data.speed is not none %}
+ {% if client_data.speed is not none and client_data.speed > 0 %}
{% if client_data.speed >= 1000 %}
{{ (client_data.speed / 1000) | int }} Gb/s
{% else %}
@@ -43,6 +48,31 @@
{{ _('Not available') }}
{% endif %}
</td>
+ <td>
+ <i class="nav-icon fa-circle
+ {% if client_data.state == 'OPG' and client_data.last_cmd.result == 'failure' %}
+ fas text-warning fa-times-circle
+ {% elif client_data.state == 'OPG' %}
+ fas text-warning
+ {% elif client_data.state == 'LNX' %}
+ fas text-linux
+ {% elif client_data.state == 'LNX' %}
+ fas fa-user-circle text-linux
+ {% elif client_data.state == 'WIN' %}
+ fas text-windows
+ {% elif client_data.state == 'WIN' %}
+ fas fa-user-circle text-windows
+ {% elif client_data.state == 'BSY' %}
+ fas text-danger
+ {% elif client_data.state == 'VDI' %}
+ fas text-success
+ {% elif client_data.state == 'WOL_SENT' %}
+ fas text-wol
+ {% else %}
+ far
+ {% endif %}
+ "></i>
+ </td>
<td><a href="{{ url_for('action_client_info', client_ip = client_data.addr) }}">{{ _('View details') }}</a></td>
</tr>
{% endfor %}
diff --git a/ogcp/templates/client_status_leyend.html b/ogcp/templates/client_status_leyend.html
new file mode 100644
index 0000000..f43050e
--- /dev/null
+++ b/ogcp/templates/client_status_leyend.html
@@ -0,0 +1,15 @@
+<div class="card">
+ <div class="card-body">
+ <ul id="clients-color-legend" class="d-flex flex-wrap justify-content-center nav ogcp-nav nav-pills">
+ <li class="nav-item"><i class="nav-icon far fa-circle"></i> {{_('Shutdown')}} </li>
+ <li class="nav-item"><i class="nav-icon fas fa-circle text-wol"></i> {{_('WoL sent')}} </li>
+ <li class="nav-item"><i class="nav-icon fas fa-circle text-warning"></i> ogLive </li>
+ <li class="nav-item"><i class="nav-icon fas fa-circle text-danger"></i> {{_('Busy')}} </li>
+ <li class="nav-item"><i class="nav-icon fas fa-circle text-linux"></i> Linux </li>
+ <li class="nav-item"><i class="nav-icon fas fa-user-circle text-linux"></i> {{_('Linux session')}} </li>
+ <li class="nav-item"><i class="nav-icon fas fa-circle text-windows"></i> Windows </li>
+ <li class="nav-item"><i class="nav-icon fas fa-user-circle text-windows"></i> {{_('Windows session')}} </li>
+ <li class="nav-item"><i class="nav-icon fas fa-circle text-success"></i> VDI </li>
+ </ul>
+ </div>
+</div>
diff --git a/ogcp/templates/macros.html b/ogcp/templates/macros.html
index 4f18265..7583c59 100644
--- a/ogcp/templates/macros.html
+++ b/ogcp/templates/macros.html
@@ -93,21 +93,9 @@
{% macro selected_clients() -%}
<h2 class="mx-5 subhead-heading">{{_('Selected clients')}}</h2>
-<div class="card">
- <div class="card-body">
- <ul id="clients-color-legend" class="d-flex flex-wrap justify-content-center nav ogcp-nav nav-pills">
- <li class="nav-item"><i class="nav-icon far fa-circle"></i> {{_('Shutdown')}} </li>
- <li class="nav-item"><i class="nav-icon fas fa-circle text-wol"></i> {{_('WoL sent')}} </li>
- <li class="nav-item"><i class="nav-icon fas fa-circle text-warning"></i> ogLive </li>
- <li class="nav-item"><i class="nav-icon fas fa-circle text-danger"></i> {{_('Busy')}} </li>
- <li class="nav-item"><i class="nav-icon fas fa-circle text-linux"></i> Linux </li>
- <li class="nav-item"><i class="nav-icon fas fa-user-circle text-linux"></i> {{_('Linux session')}} </li>
- <li class="nav-item"><i class="nav-icon fas fa-circle text-windows"></i> Windows </li>
- <li class="nav-item"><i class="nav-icon fas fa-user-circle text-windows"></i> {{_('Windows session')}} </li>
- <li class="nav-item"><i class="nav-icon fas fa-circle text-success"></i> VDI </li>
- </ul>
- </div>
-</div>
+
+{% include 'client_status_leyend.html' %}
+
<div id="selected-clients" class="d-flex flex-wrap justify-content-center"></div>
{% endmacro %}
diff --git a/ogcp/views.py b/ogcp/views.py
index c24cb73..9a0c8e2 100644
--- a/ogcp/views.py
+++ b/ogcp/views.py
@@ -222,10 +222,12 @@ def get_client_setup_json():
def get_clients(state_filter=None):
responses = multi_request('get', '/clients')
-
clients_list = []
for r in responses:
- clients_list = clients_list + r['json']['clients']
+ req_clients = r['json']['clients']
+ for client in req_clients:
+ client['server'] = r['server']
+ clients_list = clients_list + req_clients
clients = {}
clients['clients'] = clients_list
@@ -600,21 +602,34 @@ 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')
+def get_server_data_from_scopes(scopes, clients):
servers_data = {}
- for i in clients_response:
- server_id = i['server'].id
+
+ ip_to_name = {ip: c['name'] for c in parse_scopes_from_tree(scopes, 'computer') for ip in c['ip']}
+
+ for client in clients['clients']:
+ client['name'] = ip_to_name[client['addr']]
+ server_id = client['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
+ servers_data[server_id] = {'clients': []}
+ for server in servers:
+ if server.id == server_id:
+ servers_data[server_id]['name'] = server.name
+
+ servers_data[server_id]['clients'].append(client)
+
+ for server_id in servers_data:
+ servers_data[server_id]['clients'].sort(key=lambda x: x['name'])
+
+ return servers_data
+
+@app.route('/client/list', methods=['GET'])
+@login_required
+def client_list():
scopes, clients = get_scopes()
+ servers_data = get_server_data_from_scopes(scopes, clients)
+
selected_clients = list(get_selected_clients(scopes['scope']).items())
return render_template('client_list.html', servers_data=servers_data,