summaryrefslogtreecommitdiffstats
path: root/ogcp/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ogcp/views.py')
-rw-r--r--ogcp/views.py36
1 files changed, 33 insertions, 3 deletions
diff --git a/ogcp/views.py b/ogcp/views.py
index 24df2e3..f6f1fb7 100644
--- a/ogcp/views.py
+++ b/ogcp/views.py
@@ -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)