web app added
diff --git a/data_generator.py b/data_generator.py
index 019b861..975f307 100644
--- a/data_generator.py
+++ b/data_generator.py
@@ -15,7 +15,7 @@
op_type = ["randread", "read", "randwrite", "write"]
is_sync = ["s", "a"]
-storage = create_storage(sys.argv[1])
+storage = create_storage("file:///home/gstepanov/rally-results-processor/sample.json", "", "")
combinations = list(itertools.product(op_type, is_sync, sz))
for i in range(30):
@@ -27,4 +27,5 @@
row[" ".join([sz, op_type, is_sync])] = (random.random() * 100,
random.random() * 5)
+ print row
storage.store(row)
diff --git a/storage_api.py b/storage_api.py
index fb3d8b7..8e995c1 100644
--- a/storage_api.py
+++ b/storage_api.py
@@ -184,6 +184,7 @@
return result
+
if __name__ == "__main__":
storage = create_storage("file:///home/gstepanov/rally-results-processor/sample.json", "", "")
print storage.recent_builds()
diff --git a/web_app/__init__.py b/web_app/__init__.py
new file mode 100644
index 0000000..45e6180
--- /dev/null
+++ b/web_app/__init__.py
@@ -0,0 +1,88 @@
+from flask import Flask, render_template, url_for, request, g
+from flask_bootstrap import Bootstrap
+import json
+import os.path
+from storage_api import create_storage
+
+app = Flask(__name__)
+Bootstrap(app)
+
+
+def collect_tests():
+ result = []
+
+ for file in os.listdir("../test_results"):
+ if file.endswith(".json"):
+ result.append(file.split('.')[0])
+
+ return result
+
+
+def load_test(test_name):
+ test_name += '.json'
+
+ with open("../" + test_name, 'rt') as f:
+ raw = f.read()
+
+ if raw == '':
+ raise Exception("Test is emoty")
+
+ test = json.loads(raw)
+
+ return test
+
+
+@app.route("/", methods=['GET', 'POST'])
+def index():
+ data = []
+ for test in collect_tests():
+ d = {}
+ d["name"] = test
+ d["url"] = url_for("render_test", test_name=test)
+ data.append(d)
+
+ return render_template("index.html", tests=data)
+
+
+@app.route("/tests/<test_name>", methods=['GET'])
+def render_test(test_name):
+ tests = load_test(test_name)
+ header_keys = ['build_id', 'iso_md5', 'type']
+ table = []
+
+ if len(tests) > 0:
+ sorted_keys = sorted(tests[0].keys())
+
+ for key in sorted_keys:
+ if key not in header_keys:
+ header_keys.append(key)
+
+ for test in tests:
+ row = []
+
+ for header in header_keys:
+ if isinstance(test[header], list):
+ row.append(str(test[header][0]) + unichr(0x00B1) + str(test[header][1]))
+ else:
+ row.append(test[header])
+
+ table.append(row)
+
+ return render_template("table.html", headers=header_keys, table=table)
+
+
+@app.route("/tests/<test_name>", methods=['POST'])
+def add_test(test_name):
+ tests = json.loads(request.data)
+
+ if not hasattr(g, "storage"):
+ g.storage = create_storage("file:///home/gstepanov/rally-results-processor/test_results/sample.json", "", "")
+
+ for test in tests:
+ g.storage.store(test)
+ return "Created", 201
+
+
+
+if __name__ == "__main__":
+ app.run(debug=True)
\ No newline at end of file
diff --git a/web_app/templates/base.html b/web_app/templates/base.html
new file mode 100644
index 0000000..2067d55
--- /dev/null
+++ b/web_app/templates/base.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<html>
+ <head>
+ {% block head %}
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
+ {% endblock %}
+ </head>
+ <body>
+ {% block body %}
+ {% endblock %}
+ </body>
+</html>
\ No newline at end of file
diff --git a/web_app/templates/index.html b/web_app/templates/index.html
new file mode 100644
index 0000000..ba32405
--- /dev/null
+++ b/web_app/templates/index.html
@@ -0,0 +1,25 @@
+{% extends "base.html" %}
+<html>
+<head>
+ {% block head %}
+ {{ super() }}
+ <title>Test report</title>
+ {% endblock %}
+</head>
+<body>
+ <h1>Tests</h1>
+ {% block body %}
+ <div>
+ <ol>
+ {% for test in tests %}
+ <li>
+ <h2>
+ <a href="{{ test.url }} ">{{ test.name }}</a>
+ </h2>
+ </li>
+ {% endfor %}
+ </ol>
+ </div>
+ {% endblock %}
+</body>
+</html>
\ No newline at end of file
diff --git a/web_app/templates/table.html b/web_app/templates/table.html
new file mode 100644
index 0000000..0dba28c
--- /dev/null
+++ b/web_app/templates/table.html
@@ -0,0 +1,31 @@
+{% extends "base.html" %}
+<html>
+<head>
+ {% block head %}
+ {{ super() }}
+ <title>Table of results</title>
+ {% endblock %}
+</head>
+<body>
+ {% block body %}
+ <div class="table-responsive">
+ <table class="table">
+ {% for header in headers %}
+ <th>
+ <h2>{{ header }}</h2>
+ </th>
+ {% endfor %}
+ {% for row in table %}
+ <tr>
+ {% for data in row %}
+ <td>
+ {{ data }}
+ </td>
+ {% endfor %}
+ </tr>
+ {% endfor %}
+ </table>
+ </div>
+ {% endblock %}
+</body>
+</html>
\ No newline at end of file