summaryrefslogtreecommitdiffstats
path: root/docker/storperf-reporting/src/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'docker/storperf-reporting/src/app.py')
-rw-r--r--docker/storperf-reporting/src/app.py72
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)