views: Preselect most used oglive

When setting up oglive, preselect oglive that is most used by selected
clients. If only one client is selected, preselect that of the client.

In the unusual scenario where a client is set with an oglive that is not
in the ogserver's list of available oglives, preselect default.
master
Javier Hernandez 2024-01-29 10:38:53 +01:00 committed by OpenGnSys Support Team
parent a45f664905
commit db63b6bc60
2 changed files with 58 additions and 3 deletions

View File

@ -17,6 +17,31 @@
{{ macros.cmd_selected_clients(selected_clients) }}
{% if oglives_set|length > 1 %}
<p>Selected clients have different ogLive</p>
<table class="table table-hover">
<thead class="thead-light">
<tr>
<th>ogLive</th>
<th>Clients</th>
</tr>
</thead>
<tbody class="text-left">
{% for oglive, clients in oglives_set.items() %}
<tr>
<th>{{oglive}}</th>
<td>
{% for client in clients %}
{{client}}
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{{ wtf.quick_form(form,
action=url_for('action_oglive'),
method='post',

View File

@ -1577,6 +1577,22 @@ def action_mode():
selected_clients=selected_clients,
clients=clients, modes_set=modes_set)
def get_clients_oglive(ips, server):
oglives = {}
for ip in ips:
r = server.get('/client/info', payload={"client": [ip]})
if not r:
raise ServerError
if r.status_code != requests.codes.ok:
raise ServerErrorCode
resp = r.json()
oglive = resp['livedir']
client_name = resp['name']
if oglive not in oglives:
oglives[oglive] = [client_name]
else:
oglives[oglive].append(client_name)
return oglives
@app.route('/action/oglive', methods=['GET', 'POST'])
@login_required
@ -1602,21 +1618,35 @@ def action_oglive():
return redirect(url_for('commands'))
server = get_server_from_clients(list(ips))
try:
oglives_set = get_clients_oglive(ips, server)
except ServerError:
return ogserver_down('commands')
except ServerErrorCode:
return ogserver_error('commands')
r = server.get('/oglive/list')
if not r:
return ogserver_down('commands')
if r.status_code != requests.codes.ok:
return ogserver_error('commands')
most_used_oglive = max(oglives_set, key=lambda l: len(oglives_set[l]))
available_oglives = [(oglive.get('directory'), oglive.get('directory'))
for oglive in r.json()['oglive']]
available_oglives.insert(0, ('default', 'default'))
for oglive in r.json()['oglive']
if oglive.get('directory') == most_used_oglive]
if not available_oglives:
available_oglives.append(('default', 'default'))
available_oglives.extend([(oglive.get('directory'), oglive.get('directory'))
for oglive in r.json()['oglive']
if oglive.get('directory') != most_used_oglive])
form.oglive.choices = list(available_oglives)
form.ok.render_kw = {'formaction': url_for('action_oglive')}
scopes, clients = get_scopes(set(ips))
selected_clients = list(get_selected_clients(scopes['scope']).items())
return render_template('actions/oglive.html', form=form, scopes=scopes,
return render_template('actions/oglive.html', oglives_set=oglives_set, form=form, scopes=scopes,
selected_clients=selected_clients)