code review
diff --git a/TODO b/TODO
deleted file mode 100644
index 9f383d3..0000000
--- a/TODO
+++ /dev/null
@@ -1,15 +0,0 @@
-выкинуть все упоминания о googledoc
-нам нужен backlog
-я буду productowner и буду вносить тикеты в борду
-
-код сайты вынести из __init__.py в отдельный файл
-перенести конфиг линта из тестов
-пройти все линтом
-move ssize_to_kb to utils
-unittests
-перейти на нормальное логирование
-
-zmq/tcp client should immitate ssh
-rpyc???
-детектирует vm по локальным ip, которые получаем из nova
-roadmap написать
\ No newline at end of file
diff --git a/itest.py b/itest.py
index 178acce..018a11b 100644
--- a/itest.py
+++ b/itest.py
@@ -74,8 +74,8 @@
                     if line.strip() != "":
                         self.on_result_cb(json.loads(line))
             except Exception as err:
-                msg = "Error during postprocessing results: {0!r}".format(err)
-                raise RuntimeError(msg)
+                msg_templ = "Error during postprocessing results: {0!r}"
+                raise RuntimeError(msg_templ.format(err.message))
         else:
             templ = "Command {0!r} failed with code {1}. Error output is:\n{2}"
             logger.error(templ.format(cmd, code, err))
diff --git a/scripts/data_extractor.py b/scripts/data_extractor.py
index 1f30b77..77b6478 100644
--- a/scripts/data_extractor.py
+++ b/scripts/data_extractor.py
@@ -10,17 +10,18 @@
 
 
 create_db_sql_templ = """
-CREATE TABLE build (id integer primary key,
-                    build text,
-                    type text,
-                    md5 text);
+# build - param_0
+# lab - param_1
+# operation - param_2
+# sync_type - param_3 (sync, direct, sync+direct, free)
+# block_size - param_4
+# concurrence - param_5
+# ....
 
-CREATE TABLE params_combination (id integer primary key, {params});
+CREATE TABLE params_combination (id integer primary key, params_X_val text);
 
 CREATE TABLE param (id integer primary key, name text, type text, descr text);
 
-CREATE TABLE lab (id integer primary key, name text, descr text);
-
 CREATE TABLE result (build_id integer,
                      time datetime,
                      lab_id integer,
diff --git a/web_app/__init__.py b/web_app/__init__.py
index 01c3dba..eecb577 100644
--- a/web_app/__init__.py
+++ b/web_app/__init__.py
@@ -1,3 +1,5 @@
+# <koder>: order imports in usual way
+
 from urlparse import urlparse
 from flask import Flask, render_template, url_for, request, g, make_response
 from flask_bootstrap import Bootstrap
@@ -23,6 +25,7 @@
 
 
 def total_lab_info(data):
+    # <koder>: give 'd' meaningful name
     d = {}
     d['nodes_count'] = len(data['nodes'])
     d['total_memory'] = 0
@@ -51,6 +54,7 @@
     result = {}
 
     for node in lab_info:
+        # <koder>: give p,i,d,... vars meaningful names
         d = {}
         d['name'] = node['name']
         p = []
@@ -118,6 +122,7 @@
     table = [[]]
     builds = collect_builds()
 
+    # <koder>: rename
     l = filter(lambda x: x['name'] == test_name, builds)
 
     if l[0]['type'] == 'GA':
@@ -127,18 +132,17 @@
         builds = l
 
     results = {}
+    # <koder>: magik ip? fixme
     meta = {"__meta__": "http://172.16.52.112:8000/api/nodes"}
     data = collect_lab_data(meta)
     lab_meta = total_lab_info(data)
 
     for build in builds:
+        # <koder>: don't use name 'type'
         type = build['type']
-        m = create_measurement(build)
-        results[type] = m
+        results[type] = create_measurement(build)
 
-    bars = build_vertical_bar(results)
-    lines = build_lines_chart(results)
-    urls = bars + lines
+    urls = build_vertical_bar(results) + build_lines_chart(results)
 
     urls = [url_for("get_image", image_name=os.path.basename(url)) if not url.startswith('http') else url for url in urls]
 
@@ -154,6 +158,8 @@
 
             for header in header_keys:
                 if isinstance(test[header], list):
+                    # <koder>: make a named constant from unichr(0x00B1)
+                    # <koder>: use format in this line
                     row.append(str(test[header][0]) + unichr(0x00B1) + str(test[header][1]))
                 else:
                     row.append(test[header])
@@ -225,7 +231,7 @@
         merge_builds(res, test)
 
     with open(TEST_PATH + '/' + 'storage' + ".json", 'w+') as f:
-            f.write(json.dumps(builds))
+        f.write(json.dumps(builds))
 
     return "Created", 201
 
@@ -249,4 +255,4 @@
     logger = getLogger("logger")
     app.logger.setLevel(INFO)
     app.logger.addHandler(logger)
-    app.run(host='0.0.0.0', debug=True)
\ No newline at end of file
+    app.run(host='0.0.0.0', debug=True)
diff --git a/web_app/keystone.py b/web_app/keystone.py
index 0d2c5f3..38f49e0 100644
--- a/web_app/keystone.py
+++ b/web_app/keystone.py
@@ -4,6 +4,7 @@
 from keystoneclient.v2_0 import Client as keystoneclient
 from keystoneclient import exceptions
 
+
 class Urllib2HTTP(object):
     """
     class for making HTTP requests