implements MOL-180: make run_test.py compatible with FUEL master
diff --git a/io_scenario/io.py b/io_scenario/io.py
index b9f3b6f..7d5516d 100644
--- a/io_scenario/io.py
+++ b/io_scenario/io.py
@@ -59,7 +59,8 @@
             'initial readers': 'read',
             're-readers': 'reread',
             'random readers': 'random read',
-            'random writers': 'random write'}
+            'random writers': 'random write',
+            'readers': 'read'}
 
     string1 = "                           " + \
               "                   random  random    " + \
diff --git a/requirements.txt b/requirements.txt
index 7f8254f..5877500 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -11,5 +11,7 @@
 python-keystoneclient==1.1.0
 python-novaclient
 python-glanceclient
+python-cinderclient
 paramiko
+futures
 
diff --git a/run_test.py b/run_test.py
index ccab7aa..ad0c9d2 100644
--- a/run_test.py
+++ b/run_test.py
@@ -12,7 +12,11 @@
 from itest import IOPerfTest
 
 import ssh_runner
-import rally_runner
+
+try:
+    import rally_runner
+except ImportError:
+    rally_runner = None
 
 from starts_vms import nova_connect, create_vms_mt, clear_all
 
@@ -75,9 +79,12 @@
                         help="keep temporary files",
                         dest="keep_temp_files", action='store_true')
 
+    choices = ["ssh"]
+    if rally_runner is not None:
+        choices.append("rally")
+
     parser.add_argument("--runner", required=True,
-                        choices=["ssh", "rally"],
-                        help="runner type")
+                        choices=choices, help="runner type")
 
     parser.add_argument("--runner-extra-opts", default="",
                         dest="runner_opts", help="runner extra options")
@@ -97,9 +104,22 @@
         bw_dev = sum(it) ** 0.5
 
         meta = res[0]['__meta__']
-        key = "{0} {1} {2}k".format(meta['action'],
-                                    's' if meta['sync'] else 'a',
-                                    meta['blocksize'])
+
+        sync = meta['sync']
+        direct = meta['direct_io']
+
+        if sync and direct:
+            ss = "d+"
+        elif sync:
+            ss = "s"
+        elif direct:
+            ss = "d"
+        else:
+            ss = "a"
+
+        key = "{0} {1} {2} {3}k".format(meta['action'], ss,
+                                        meta['concurence'],
+                                        meta['blocksize'])
 
         data = json.dumps({key: (int(bw_mean), int(bw_dev))})
 
@@ -155,8 +175,6 @@
         def nolog(x):
             pass
 
-        setlogger(nolog)
-
     io_opts = get_io_opts(opts.io_opts_file, opts.io_opts)
 
     if opts.runner == "rally":
@@ -209,10 +227,10 @@
 
         # nova, amount, keypair_name, img_name,
         # flavor_name, vol_sz=None, network_zone_name=None,
-        # flt_ip_pool=None, name_templ='ceph-test-{}',
+        # flt_ip_pool=None, name_templ='ceph-test-{0}',
         # scheduler_hints=None
 
-        logger.debug("Will start {} vms".format(count))
+        logger.debug("Will start {0} vms".format(count))
 
         try:
             ips = [i[0] for i in create_vms_mt(nova, count, **create_vms_opts)]
diff --git a/scripts/data.py b/scripts/data.py
index 0635789..b0c8f27 100644
--- a/scripts/data.py
+++ b/scripts/data.py
@@ -15,15 +15,15 @@
         if not block.startswith("[{u'__meta__':"):
             continue
 
-        print
-        print
-        print block
-        print
-        print
-
         for val in eval(block):
             meta = val['__meta__']
-            meta['sync'] = 's' if meta['sync'] else 'a'
+
+            if meta['sync']:
+                meta['sync'] = 's'
+            elif meta['direct_io']:
+                meta['sync'] = 'd'
+            else:
+                meta['sync'] = 'a'
             key = "{action} {sync} {blocksize}k {concurence}".format(**meta)
             results.setdefault(key, []).append(val['bw_mean'])
 
@@ -52,7 +52,7 @@
 
 
 def show_data(*pathes):
-    begin = "|  {:>10}  {:>5}  {:>5} {:>3}"
+    begin = "|  {:>10}  {:>6}  {:>5} {:>3}"
     first_file_templ = "  |  {:>6} ~ {:>5} {:>2}% {:>5}"
     other_file_templ = "  |  {:>6} ~ {:>5} {:>2}% {:>5} ----  {:>6}%"
 
@@ -82,9 +82,10 @@
         common_keys &= set(result.keys())
 
     for k in sorted(common_keys, key=ksort):
-        tp = k.rsplit(" ", 1)[0]
+        tp = k.rsplit(" ", 2)[0]
         op, s, sz, conc = k.split(" ")
-        s = 'sync' if s == 's' else 'async'
+
+        s = {'a': 'async', "s": "sync", "d": "direct"}[s]
 
         if tp != prev_tp and prev_tp is not None:
             print sep
diff --git a/scripts/data_extractor.py b/scripts/data_extractor.py
index d3ba1ea..1f30b77 100644
--- a/scripts/data_extractor.py
+++ b/scripts/data_extractor.py
@@ -16,12 +16,17 @@
                     md5 text);
 
 CREATE TABLE params_combination (id integer primary key, {params});
-CREATE TABLE param (id integer primary key, name text, type 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,
-                     params_combination integer,
+                     time datetime,
+                     lab_id integer,
+                     params_combination_id integer,
                      bandwith float,
-                     deviation float);
+                     meta text);
 """
 
 
diff --git a/scripts/run.sh b/scripts/run.sh
index 368410c..91fadc7 100644
--- a/scripts/run.sh
+++ b/scripts/run.sh
@@ -37,7 +37,7 @@
                     for SYNC_TYPE in $SYNC_TYPES ; do
 
                         # filter out too slow options
-                        if [ "$BLOCKSIZE" = "1k" -o "$BLOCK_SIZE" = "4k" ] ; then
+                        if [ "$BSIZE" = "1k" -o "$BSIZE" = "4k" ] ; then
                             if [ "$SYNC_TYPE" = "a" ] ; then
                                 continue
                             fi
diff --git a/starts_vms.py b/starts_vms.py
index 368aadf..de6c005 100644
--- a/starts_vms.py
+++ b/starts_vms.py
@@ -83,7 +83,7 @@
 
 def create_vms_mt(nova, amount, keypair_name, img_name,
                   flavor_name, vol_sz=None, network_zone_name=None,
-                  flt_ip_pool=None, name_templ='ceph-test-{}',
+                  flt_ip_pool=None, name_templ='ceph-test-{0}',
                   scheduler_hints=None):
 
     with ThreadPoolExecutor(max_workers=16) as executor:
@@ -109,9 +109,9 @@
         else:
             ips = [None] * amount
 
-        logger.debug("Getting for flavor object")
+        logger.debug("Getting flavor object")
         fl = fl_future.result()
-        logger.debug("Getting for image object")
+        logger.debug("Getting image object")
         img = img_future.result()
 
         if network_future is not None:
@@ -177,7 +177,7 @@
         return (None, srv)
 
 
-def clear_all(nova, name_templ="ceph-test-{}"):
+def clear_all(nova, name_templ="ceph-test-{0}"):
     deleted_srvs = set()
     for srv in nova.servers.list():
         if re.match(name_templ.format("\\d+"), srv.name):