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">