diff options
Diffstat (limited to 'ogcp/views.py')
-rw-r--r-- | ogcp/views.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/ogcp/views.py b/ogcp/views.py index 109957a..45a0f73 100644 --- a/ogcp/views.py +++ b/ogcp/views.py @@ -1881,6 +1881,48 @@ def action_run_script(): selected_clients=selected_clients, scopes=scopes) +@app.route('/action/script/output', methods=['GET']) +@login_required +def action_script_display_output(): + ips = parse_elements(request.args.to_dict()) + + if not validate_elements(ips): + return redirect(url_for('commands')) + + server = get_server_from_clients(ips) + + r = server.get('/shell/output', payload={'clients': list(ips)}) + if not r: + return ogserver_down('commands') + if r.status_code != requests.codes.ok: + return ogserver_error('commands') + + client_data = r.json()['clients'] + + for client in client_data: + if not 'output' in client: + client['output'] = _('No output') + + if not 'retcode' in client: + client['retcode'] = 0 + + if not 'cmd' in client: + client['cmd'] = ['Null'] + + if not 'tstamp' in client: + client['tstamp'] = _('No time available') + else: + timestamp_utc = datetime.datetime.utcfromtimestamp(client['tstamp']) + client['tstamp'] = timestamp_utc.strftime('%Y-%m-%d %H:%M:%S') + + client_data.sort(key=lambda x:x['tstamp'], reverse=True) + + scopes, clients = get_scopes(set(ips)) + selected_clients = list(get_selected_clients(scopes['scope']).items()) + return render_template('actions/script_output.html', + selected_clients=selected_clients, + scopes=scopes, client_data=client_data) + def get_clients_modes(ips, server): modes = {} for ip in ips: |