fix storage code style, fixes in rally run code
diff --git a/fix_rally.py b/fix_rally.py
index e3b7bcf..1f02e8d 100644
--- a/fix_rally.py
+++ b/fix_rally.py
@@ -47,6 +47,9 @@
     return closure
 
 
+# should actually use mock module for this,
+# but don't wanna to add new dependency
+
 @contextlib.contextmanager
 def patch_VMScenario_run_command_over_ssh(paths,
                                           on_result_cb,
@@ -74,7 +77,7 @@
                         put_dir_recursively(sftp, src, dst)
                     else:
                         templ = "Can't copy {0!r} - " + \
-                                "it neither file or directory"
+                                "it neither a file not a directory"
                         msg = templ.format(src)
                         log(msg)
                         raise exceptions.ScriptError(msg)
@@ -121,8 +124,8 @@
                 except:
                     pass
                 else:
+                    on_result_cb(result)
                     if '__meta__' in result:
-                        on_result_cb(result)
                         result.pop('__meta__')
                     out = json.dumps(result)
             except Exception as err:
@@ -157,8 +160,9 @@
 
     if py_dst_cont == args_repl_rr:
         templ = "Can't find replace marker in file {0}"
-        log(templ.format(testtool_py_inp_path))
-        exit(1)
+        msg = templ.format(testtool_py_inp_path)
+        log(msg)
+        raise ValueError(msg)
 
     yaml_src_cont = open(os.path.join(files_dir, "io.yaml")).read()
     task_params = yaml.load(yaml_src_cont)
@@ -172,7 +176,9 @@
     return yaml_file, py_file
 
 
-def run_test(tool, testtool_py_argv, dst_testtool_path, files_dir):
+def run_test(tool, testtool_py_argv, dst_testtool_path, files_dir,
+             rally_extra_opts, max_preparation_time=300):
+
     path = 'iozone' if 'iozone' == tool else 'fio'
     testtool_local = os.path.join(files_dir, path)
 
@@ -185,8 +191,6 @@
     vm_sec = 'VMTasks.boot_runcommand_delete'
     concurrency = config[vm_sec][0]['runner']['concurrency']
 
-    max_preparation_time = 300
-
     try:
         copy_files = {testtool_local: dst_testtool_path}
 
@@ -199,11 +203,13 @@
         max_release_time = time.time() + max_preparation_time
 
         with do_patch(copy_files, results_cb, barrier, max_release_time):
-            log("Start rally with 'task start {0}'".format(yaml_file))
-            rally_result = run_rally(['task', 'start', yaml_file])
+            opts = ['task', 'start', yaml_file] + list(rally_extra_opts)
+            log("Start rally with opts '{0}'".format(" ".join(opts)))
+            run_rally(opts)
 
-        # while not result_queue.empty():
-        #     log("meta = {0!r}\n".format(result_queue.get()))
+        rally_result = []
+        while not result_queue.empty():
+            rally_result.append(result_queue.get())
 
         return rally_result
 
@@ -217,12 +223,17 @@
         description="Run rally disk io performance test")
     parser.add_argument("tool_type", help="test tool type",
                         choices=['iozone', 'fio'])
-    parser.add_argument("test_directory", help="directory with test")
     parser.add_argument("-l", dest='extra_logs',
                         action='store_true', default=False,
                         help="print some extra log info")
     parser.add_argument("-o", "--io-opts", dest='io_opts',
                         default=None, help="cmd line options for io.py")
+    parser.add_argument("--test-directory", help="directory with test",
+                        dest="test_directory", required=True)
+    parser.add_argument("rally_extra_opts", nargs="*",
+                        default=[], help="rally extra options")
+    parser.add_argument("--max-preparation-time", default=300,
+                        type=int, dest="max_preparation_time")
     return parser.parse_args(argv)
 
 
@@ -249,10 +260,13 @@
     else:
         testtool_py_argv = opts.io_opts.split(" ")
 
-    run_test(opts.tool_type,
-             testtool_py_argv,
-             dst_testtool_path,
-             opts.test_directory)
+    res = run_test(opts.tool_type,
+                   testtool_py_argv,
+                   dst_testtool_path,
+                   files_dir=opts.test_directory,
+                   rally_extra_opts=opts.rally_extra_opts,
+                   max_preparation_time=opts.max_preparation_time)
+    res
     return 0
 
 # ubuntu cloud image
diff --git a/io-scenario/io.yaml b/io-scenario/io.yaml
index 6f71007..d9c7ad4 100644
--- a/io-scenario/io.yaml
+++ b/io-scenario/io.yaml
@@ -13,8 +13,8 @@
         username: "ubuntu"
       runner:
         type: "constant"
-        times: 4
-        concurrency: 4
+        times: 3
+        concurrency: 3
       context:
         users:
           tenants: 3
diff --git a/make_report.py b/make_report.py
index eb99ae8..e7bc946 100644
--- a/make_report.py
+++ b/make_report.py
@@ -1,10 +1,15 @@
-import gspread
-import argparse
+import sys
 import json
+import argparse
+
+
+import gspread
+
 
 from config import DEFAULT_FILE_PATH, \
-    WORK_SHEET, DOCUMENT_ID, ROW_COUNT, OUTPUT_FILE
-from storage_api import DiskStorage, GoogleDocsStorage, get_work_sheet, append_row
+    WORK_SHEET, DOCUMENT_ID, OUTPUT_FILE
+from storage_api import DiskStorage, GoogleDocsStorage, \
+    get_work_sheet, append_row
 
 
 def load_data(file_name):
@@ -13,7 +18,8 @@
         return json.loads(data)
 
 
-#getting worksheet from sheet or create it with specified column names.
+# getting worksheet from sheet or create it with specified column names.
+
 
 def make_report(email, password, data):
     gc = gspread.login(email, password)
@@ -23,7 +29,20 @@
     append_row(work_sheet, data)
 
 
-def main(file_name, email, password, mode):
+def parse_args(argv):
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-n', '--name', help='data file path',
+                        default=DEFAULT_FILE_PATH)
+    parser.add_argument('-e', '--email', help='user email',
+                        default="aaa@gmail.com")
+    parser.add_argument('-p', '--password', help='user password',
+                        default="1234")
+    parser.add_argument('-m', '--mode', help='mode type local or global',
+                        default='local')
+    return parser.parse_args(argv)
+
+
+def process_results(file_name, email, password, mode):
     data = load_data(file_name)
 
     if mode == 'local':
@@ -34,16 +53,15 @@
     storage.store(data)
 
 
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('-n', '--name', help='data file path',
-                        default=DEFAULT_FILE_PATH)
-    parser.add_argument('-e', '--email', help='user email',
-                        default="aaa@gmail.com")
-    parser.add_argument('-p', '--password', help='user password',
-                        default="1234")
-    parser.add_argument('-m', '--mode', help='mode type local or global',
-                        default='local')
-    results = parser.parse_args()
-    main(results.name, results.email, results.password, results.mode)
+def main(argv):
+    opts = parse_args(argv)
 
+    process_results(opts.name,
+                    opts.email,
+                    opts.password,
+                    opts.mode)
+    return 0
+
+
+if __name__ == '__main__':
+    exit(main(sys.argv[1:]))