Merge branch 'master' of https://github.com/Mirantis/rally-results-processor
diff --git a/config.py b/config.py
index 57888c3..56e641e 100644
--- a/config.py
+++ b/config.py
@@ -1,3 +1,5 @@
+import os
+
DOCUMENT_ID = "1Xvd0aHA7mr-_b5C3b-sQ66BQsJiOGIT2UesP7kG26oU"
SHEET_NAME = "aaa"
WORK_SHEET = "Worksheet"
@@ -5,3 +7,5 @@
ROW_COUNT = 10
DEFAULT_FILE_PATH = "test.json"
OUTPUT_FILE = "output.json"
+TEST_PATH = os.environ.get("TEST_PATH", os.path.dirname(__file__) + "/test_results")
+
diff --git a/requirements.txt b/requirements.txt
index a443abc..56ccfdb 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,4 +7,5 @@
itsdangerous==0.24
petname==1.7
wsgiref==0.1.2
+requests==2.2.1
GChartWrapper
diff --git a/storage_api.py b/storage_api.py
index 7841297..5578984 100644
--- a/storage_api.py
+++ b/storage_api.py
@@ -1,46 +1,7 @@
from urlparse import urlparse
-# from gspread import WorksheetNotFound, login
-# from gspread import login
+
import json
import os
-# from gspread import login, WorksheetNotFound
-from config import ROW_COUNT, DOCUMENT_ID, WORK_SHEET
-
-# TEST_PATH = os.environ.get("TEST_PATH", os.path.dirname(__file__) + "/test_results")
-
-
-def get_work_sheet(sheet, name, column_names):
- try:
- work_sheet = sheet.worksheet(name)
- except WorksheetNotFound:
- work_sheet = sheet.add_worksheet(title=name, rows=ROW_COUNT,
- cols=max(40, len(column_names)))
-
- for i in range(1, len(column_names) + 1):
- work_sheet.update_cell(1, i, column_names[i - 1])
-
- return work_sheet
-
-
-def get_row_number(work_sheet):
- num = 2
-
- while num < work_sheet.row_count and work_sheet.cell(num, 1).value != "":
- num += 1
-
- if num == work_sheet.row_count:
- work_sheet.append_row(["" for x in range(work_sheet.col_count)])
-
- return num
-
-
-def append_row(work_sheet, row):
- row_number = get_row_number(work_sheet)
-
- i = 1
- for k in row.keys():
- work_sheet.update_cell(row_number, i, row[k])
- i += 1
class Measurement(object):
@@ -61,8 +22,6 @@
u = urlparse(url)
if u.scheme == 'file':
storage = DiskStorage(u.path)
- else:
- storage = GoogleDocsStorage(DOCUMENT_ID, WORK_SHEET, email, password)
return storage
@@ -76,58 +35,6 @@
pass
-class GoogleDocsStorage(Storage):
-
- def __init__(self, doc_id, work_sheet_name, email=None, password=None):
- self.gc = login(email, password)
- self.sh = self.gc.open_by_key(doc_id)
- self.work_sheet = get_work_sheet(self.sh, work_sheet_name, 40)
-
- def store(self, data):
- append_row(self.work_sheet, data)
-
- def retrieve(self, id):
- row_number = self.find_by_id(id)
-
- if row_number != -1:
- vals = self.work_sheet.row_values(row_number)
- m = Measurement()
- m.build = vals.pop("build_id")
- m.build_type = vals.pop("type")
- m.md5 = vals.pop("iso_md5")
- m.results = {k: vals[k] for k in vals.keys()}
- else:
- return None
-
- def find_by_id(self, row_id):
- for i in range(1, self.work_sheet):
- if self.work_sheet.cell(i, 1) == row_id:
- return i
-
- return -1
-
- def recent_builds(self):
- i = self.work_sheet.row_count - 1
- d = {}
- result = []
-
- while i > 0:
- vals = self.work_sheet.row_values(i)
-
- if vals["type"] not in d:
- d[vals["type"]] = vals
- m = Measurement()
- m.build = vals.pop("build_id")
- m.build_type = vals.pop("type")
- m.md5 = vals.pop("iso_md5")
- m.results = {k: vals[k] for k in vals.keys()}
- result.append(m)
-
- i -= 1
-
- return result
-
-
class DiskStorage(Storage):
def __init__(self, file_name):
self.file_name = file_name
diff --git a/test_results/test_result.json b/test_results/test_result.json
index 185fd42..81ab76b 100644
--- a/test_results/test_result.json
+++ b/test_results/test_result.json
@@ -16,15 +16,15 @@
"write s 1024k": [7490, 193],
"randwrite a 64k": [14167, 4665],
"write s 4k": [87, 3],
- "build_id": "",
+ "build_id": "1",
"read a 4k": [88367, 6471],
"read a 256k": [80904, 8930],
"randread a 256k": [60868, 2637],
"randwrite s 64k": [1029, 34],
"randread a 1024k": [68683, 8604],
"randwrite s 256k": [3277, 146],
- "iso_md5": "",
- "type": "",
+ "iso_md5": "bla bla",
+ "type": "GA",
"write a 64k": [24555, 1006],
"write a 1024k": [24069, 660]
},
@@ -45,15 +45,15 @@
"write s 1024k": [8054, 280],
"randwrite a 64k": [14595, 3245],
"write s 4k": [88, 3],
- "build_id": "",
+ "build_id": "2",
"read a 4k": [92263, 5186],
"read a 256k": [94505, 6868],
"randread a 256k": [63608, 16126],
"randwrite s 64k": [1105, 46],
"randread a 1024k": [83277, 9310],
"randwrite s 256k": [3628, 433],
- "iso_md5": "",
- "type": "",
+ "iso_md5": "bla bla",
+ "type": "master",
"write a 64k": [25089, 790],
"write a 1024k": [29226, 8624]
},
@@ -74,15 +74,15 @@
"write s 1024k": [8904, 2935],
"randwrite a 64k": [27769, 6609],
"write s 4k": [44, 16],
- "build_id": "",
+ "build_id": "3",
"read a 4k": [52864, 35589],
"read a 256k": [75291, 32068],
"randread a 256k": [23681, 11116],
"randwrite s 64k": [1211, 266],
"randread a 1024k": [31379, 25667],
"randwrite s 256k": [3009, 1028],
- "iso_md5": "",
- "type": "",
+ "iso_md5": "blsgl",
+ "type": "eswrfe",
"write a 64k": [71598, 22032],
"write a 1024k": [84995, 34596]
}
diff --git a/web_app/__init__.py b/web_app/__init__.py
index 7aa6312..4bd9921 100644
--- a/web_app/__init__.py
+++ b/web_app/__init__.py
@@ -2,8 +2,10 @@
from flask_bootstrap import Bootstrap
import json
import os.path
+from config import TEST_PATH
from report import build_vertical_bar, build_lines_chart
-from storage_api import create_storage, TEST_PATH
+from storage_api import create_storage
+import requests
app = Flask(__name__)
Bootstrap(app)
@@ -52,7 +54,6 @@
table = [[]]
storage = create_storage('file://' + TEST_PATH + '/' + test_name + '.json')
results = storage.recent_builds()
-
bars = build_vertical_bar(results)
lines = build_lines_chart(results)
urls = bars + lines
@@ -77,11 +78,52 @@
return render_template("test.html", urls=urls, table_url=url_for('render_table', test_name=test_name))
+def collect_lab_data(tests, meta):
+ print requests.get(meta['__meta__'], cookies={"token" : '72237e94dc2b408482c29edaf3609da7'}).content
+ lab_info = json.loads(requests.get(meta['__meta__'], cookies={"token" : '72237e94dc2b408482c29edaf3609da7'}).content)
+ nodes = []
+ result = {}
+
+ for node in lab_info:
+ d = {}
+ d['name'] = node['name']
+ p = []
+ i = []
+ disks = []
+ devices = []
+
+ for processor in node['meta']['cpu']['spec']:
+ p.append(processor)
+
+ for iface in node['meta']['interfaces']:
+ i.append(iface)
+
+ m = node['meta']['memory'].copy()
+
+ for disk in node['meta']['disks']:
+ disks.append(disk)
+
+ d['memory'] = m
+ d['disks'] = disks
+ d['devices'] = devices
+ d['interfaces'] = i
+ d['processors'] = p
+
+ nodes.append(d)
+
+ result['nodes'] = nodes
+ result['name'] = 'Perf-1 Env'
+
+ return result
+
+
@app.route("/tests/table/<test_name>/")
def render_table(test_name):
tests = load_test(test_name)
header_keys = ['build_id', 'iso_md5', 'type']
table = [[]]
+ meta = {"__meta__" : "http://172.16.52.112:8000/api/nodes"}
+ data = collect_lab_data(tests, meta)
if len(tests) > 0:
sorted_keys = sorted(tests[0].keys())
@@ -101,7 +143,8 @@
table.append(row)
- return render_template("table.html", headers=header_keys, table=table, back_url=url_for('render_test', test_name=test_name))
+ return render_template("table.html", headers=header_keys, table=table,
+ back_url=url_for('render_test', test_name=test_name), lab=data)
@app.route("/tests/<test_name>", methods=['POST'])
@@ -109,7 +152,9 @@
tests = json.loads(request.data)
if not hasattr(g, "storage"):
- g.storage = create_storage("file://" + os.path.dirname(__file__) + "/test_results/sample.json", "", "")
+ path = "file://" + TEST_PATH + '/' + test_name + ".json"
+ print path
+ g.storage = create_storage(path, "", "")
for test in tests:
g.storage.store(test)
diff --git a/web_app/templates/lab_header.html b/web_app/templates/lab_header.html
index 03b7e8e..203adf2 100644
--- a/web_app/templates/lab_header.html
+++ b/web_app/templates/lab_header.html
@@ -1,30 +1,38 @@
<div>
- <table>
- <th>
- Parameter name :
- </th>
- <th>
- Value :
- </th>
- <tr>
- <td>Proccessor </td>
- <td>Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz</td>
- </tr>
- <tr>
- <td>Proccessor count</td>
- <td>12</td>
- </tr>
- <tr>
- <td>RAM </td>
- <td> 2 x 16 GB, Total 32GB</td>
- </tr>
- <tr>
- <td>Disk Size</td>
- <td> 2 x 16 GB, Total 32GB</td>
- </tr>
- <tr>
- <td>Disk model</td>
- <td>ST2000NM0033-9ZM</td>
- </tr>
- </table>
+ <div>
+ Lab Name : {{ lab.name }}
+ </div>
+
+ {% for node in lab.nodes %}
+ {% for p in node.processors %}
+ <div>
+ Processor model : {{ p.model }}
+ Processor frequency : {{ p.frequency }}
+ </div>
+ {% endfor %}
+
+ {% for i in node.interfaces %}
+ <div>
+ name : {{ i.name }}
+ MAC frequency : {{ i.mac }}
+ max speed : {{ i.max_speed }}
+ current speed : {{ i.current_speed }}
+ state : {{ i.state }}
+ </div>
+ {% endfor %}
+
+ {% for disk in node.disks %}
+ <div>
+ Disk name : {{ disk.name }}
+ Size: {{ disk.size }}
+ </div>
+ {% endfor %}
+
+ <div>
+ Memory total : node.memory.total
+ Memory : node.memory.maximum_capacity
+ </div>
+
+ {% endfor %}
+
</div>
\ No newline at end of file
diff --git a/web_app/templates/test.html b/web_app/templates/test.html
index eb4df3d..6313b62 100644
--- a/web_app/templates/test.html
+++ b/web_app/templates/test.html
@@ -8,7 +8,7 @@
</head>
<body>
{% block body %}
- <h1 align="center">Lab name goes here:-)</h1>
+ <h1 align="center">Perf-1 Env</h1>
<div class="table-responsive">
<table class="table" width="600">
<div id="images">