diff options
Diffstat (limited to 'docker/storperf-reporting/src/app.py')
-rw-r--r-- | docker/storperf-reporting/src/app.py | 72 |
1 files changed, 66 insertions, 6 deletions
diff --git a/docker/storperf-reporting/src/app.py b/docker/storperf-reporting/src/app.py index c77f60f..e2d889d 100644 --- a/docker/storperf-reporting/src/app.py +++ b/docker/storperf-reporting/src/app.py @@ -7,19 +7,72 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from flask import Flask, redirect, url_for, request, render_template, session -from flask import send_from_directory -import urllib import json +import urllib + +from flask import Flask, redirect, url_for, request, render_template, session +from flask import send_from_directory, flash + +import validators + + app = Flask(__name__) app.secret_key = 'storperf_graphing_module' +def get_data(data): + metrics = {} + report_data = {} + temp = data.get("results") or data.get("report") or data.get("details") + if type(temp) is list: + length = len(temp) + if length == 1: + details = temp[0].get('details') + metrics = details.get('metrics') + report_data = details.get('report_data') + return "single", metrics, report_data + else: + return "multi", temp + else: + metrics = temp.get('metrics') + report_data = temp.get('report_data') + return "single", metrics, report_data + + @app.route('/reporting/success/') def success(): - data = urllib.urlopen(session["url"]).read() - data = json.loads(data) - return render_template('plot_tables.html', data=data) + try: + URL = session["url"] + if URL.find("jobs") is not -1 and URL.find("metadata") is -1: + data = urllib.urlopen(URL).read() + data = json.loads(data) + temp = data["job_ids"] + print temp + if temp: + info = {} + for ID in temp: + url = URL + "?id=" + ID + "&type=metadata" + data_temp = urllib.urlopen(url).read() + data_temp = json.loads(data_temp) + report_data = get_data(data_temp)[-1] + info[ID] = report_data + return render_template('plot_jobs.html', results=info) + if validators.url(URL): + data = urllib.urlopen(URL).read() + else: + data = open("./static/testdata/" + URL).read() + data = json.loads(data) + response = get_data(data) + if response[0] == "single": + metrics, report_data = response[1], response[2] + return render_template('plot_tables.html', + metrics=metrics, report_data=report_data) + else: + return render_template('plot_multi_data.html', + results=response[1]) + except Exception as e: + session['server_error'] = e.message + ' ' + repr(e.args) + return redirect(url_for('file_not_found')) @app.route('/reporting/url', methods=['POST', 'GET']) @@ -30,6 +83,13 @@ def url(): return redirect(url_for('success')) +@app.route('/reporting/file_not_found/') +def file_not_found(): + error = session.get('server_error') + flash("Server Error: " + error) + return redirect(url_for('index')) + + @app.route('/reporting/js/<path:path>') def js(path): return send_from_directory('static/js/', path) |