collecting data from nodes added
diff --git a/web_app/__init__.py b/web_app/__init__.py
index 3673b24..820be22 100644
--- a/web_app/__init__.py
+++ b/web_app/__init__.py
@@ -1,3 +1,4 @@
+from urlparse import urlparse
 from flask import Flask, render_template, url_for, request, g
 from flask_bootstrap import Bootstrap
 from config import TEST_PATH
@@ -7,7 +8,7 @@
 
 import json
 import os.path
-import requests
+from web_app.keystone import KeystoneAuth
 
 app = Flask(__name__)
 Bootstrap(app)
@@ -81,8 +82,10 @@
 
 
 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)
+    u = urlparse(meta['__meta__'])
+    cred = {"username": "admin", "password": "admin", "tenant_name": "admin"}
+    keystone = KeystoneAuth(root_url=meta['__meta__'], creds=cred, admin_node_ip=u.hostname)
+    lab_info = keystone.do(method='get', path="")
     nodes = []
     result = {}
 
@@ -124,9 +127,8 @@
     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)
-    data = {}
+    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())
 
diff --git a/web_app/keystone.py b/web_app/keystone.py
new file mode 100644
index 0000000..0d2c5f3
--- /dev/null
+++ b/web_app/keystone.py
@@ -0,0 +1,98 @@
+from functools import partial
+import json
+import urllib2
+from keystoneclient.v2_0 import Client as keystoneclient
+from keystoneclient import exceptions
+
+class Urllib2HTTP(object):
+    """
+    class for making HTTP requests
+    """
+
+    allowed_methods = ('get', 'put', 'post', 'delete', 'patch', 'head')
+
+    def __init__(self, root_url, headers=None, echo=False):
+        """
+        """
+        if root_url.endswith('/'):
+            self.root_url = root_url[:-1]
+        else:
+            self.root_url = root_url
+
+        self.headers = headers if headers is not None else {}
+        self.echo = echo
+
+    def do(self, method, path, params=None):
+        if path.startswith('/'):
+            url = self.root_url + path
+        else:
+            url = self.root_url + '/' + path
+
+        if method == 'get':
+            assert params == {} or params is None
+            data_json = None
+        else:
+            data_json = json.dumps(params)
+
+        request = urllib2.Request(url,
+                                  data=data_json,
+                                  headers=self.headers)
+        if data_json is not None:
+            request.add_header('Content-Type', 'application/json')
+
+        request.get_method = lambda: method.upper()
+        response = urllib2.urlopen(request)
+
+        print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+        # if method.lower() == "put":
+        #     import ipdb;ipdb.set_trace()
+
+        if response.code < 200 or response.code > 209:
+            raise IndexError(url)
+
+        content = response.read()
+
+        if '' == content:
+            return None
+
+        return json.loads(content)
+
+    def __getattr__(self, name):
+        if name in self.allowed_methods:
+            return partial(self.do, name)
+        raise AttributeError(name)
+
+
+class KeystoneAuth(Urllib2HTTP):
+    def __init__(self, root_url, creds, headers=None, echo=False,
+                 admin_node_ip=None):
+        super(KeystoneAuth, self).__init__(root_url, headers, echo)
+        self.keystone_url = "http://{0}:5000/v2.0".format(admin_node_ip)
+        self.keystone = keystoneclient(
+            auth_url=self.keystone_url, **creds)
+        self.refresh_token()
+
+    def refresh_token(self):
+        """Get new token from keystone and update headers"""
+        try:
+            self.keystone.authenticate()
+            self.headers['X-Auth-Token'] = self.keystone.auth_token
+        except exceptions.AuthorizationFailure:
+            print 'asdfsf'
+
+    def do(self, method, path, params=None):
+        """Do request. If gets 401 refresh token"""
+        try:
+            return super(KeystoneAuth, self).do(method, path, params)
+        except urllib2.HTTPError as e:
+            if e.code == 401:
+                self.refresh_token()
+                return super(KeystoneAuth, self).do(method, path, params)
+            else:
+                raise
+
+#
+# cred = {"username": "admin", "password": "admin", "tenant_name": "admin"}
+# keystone = KeystoneAuth(root_url='http://172.16.52.112:8000', creds=cred, admin_node_ip='172.16.52.112')
+# result = keystone.do(method='get', path="api/nodes")
+# print result
\ No newline at end of file
diff --git a/web_app/templates/test.html b/web_app/templates/test.html
index 6313b62..f938c43 100644
--- a/web_app/templates/test.html
+++ b/web_app/templates/test.html
@@ -13,7 +13,9 @@
         <table class="table" width="600">
         <div id="images">
             {% for url in urls %}
-            <img src="{{ url }}">    
+                <div>
+                    <img src="{{ url }}">
+                </div>
             {% endfor %}
         </div>
         {% for header in headers %}