Move common storage, plot and statistic code to cephlib
diff --git a/wally/main.py b/wally/main.py
index a20ade5..e43f1f9 100644
--- a/wally/main.py
+++ b/wally/main.py
@@ -21,8 +21,8 @@
 except ImportError:
     yaml_load = cast(YLoader,  _yaml_load)
 
-
-import texttable
+from cephlib.texttable import Texttable
+from cephlib.istorage import IStorage
 
 try:
     import faulthandler
@@ -30,18 +30,18 @@
     faulthandler = None
 
 from cephlib.common import setup_logging
+from cephlib.storage import make_storage
 
-from . import utils, node
+from . import utils, node, report_profiles, report
 from .node_utils import log_nodes_statistic
-from .storage import make_storage, Storage
 from .config import Config
 from .stage import Stage
 from .test_run_class import TestRun
 from .ssh import set_ssh_key_passwd
-
+from .result_storage import ResultStorage
 
 # stages
-from .ceph import DiscoverCephStage, FillCephInfoStage
+from .ceph import DiscoverCephStage, CollectCephInfoStage
 from .openstack import DiscoverOSStage
 from .fuel import DiscoverFuelStage
 from .run_test import (CollectInfoStage, ExplicitNodesStage, SaveNodesStage,
@@ -123,6 +123,8 @@
     report_parser = subparsers.add_parser('report', help=report_help)
     report_parser.add_argument('-R', '--reporters', help="Comma-separated list of reportes - html,txt",
                                default='html,txt')
+    report_parser.add_argument('-f', '--format', help="Images format, default is " + report_profiles.default_format,
+                               choices=('svg', 'png'), default=report_profiles.default_format)
     report_parser.add_argument("data_dir", help="folder with rest results")
 
     # ---------------------------------------------------------------------
@@ -210,7 +212,7 @@
 
 def get_run_stages() -> List[Stage]:
     return [DiscoverCephStage(),
-            FillCephInfoStage(),
+            CollectCephInfoStage(),
             DiscoverOSStage(),
             DiscoverFuelStage(),
             ExplicitNodesStage(),
@@ -231,7 +233,7 @@
 
     # stop mypy from telling that config & storage might be undeclared
     config = None  # type: Config
-    storage = None  # type: Storage
+    storage = None  # type: IStorage
 
     if opts.subparser_name == 'test':
         config = load_config(opts.config_file)
@@ -277,7 +279,7 @@
         opts.subparser_name = 'resume'
 
     elif opts.subparser_name == 'ls':
-        tab = texttable.Texttable(max_width=200)
+        tab = Texttable(max_width=200)
         tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER)
         tab.set_cols_align(["l", "l", "l", "l"])
         tab.header(["Name", "Tests", "Run at", "Comment"])
@@ -291,9 +293,10 @@
             return 1
         storage = make_storage(opts.data_dir, existing=True)
         config = storage.load(Config, 'config')
+        report_profiles.default_format = opts.format
+        report.default_format = opts.format
         stages.append(LoadStoredNodesStage())
         stages.append(SaveNodesStage())
-
     elif opts.subparser_name == 'compare':
         # x = run_test.load_data_from_path(opts.data_path1)
         # y = run_test.load_data_from_path(opts.data_path2)
@@ -314,7 +317,6 @@
         return 0
     elif opts.subparser_name == 'ipython':
         storage = make_storage(opts.storage_dir, existing=True)
-        from .hlstorage import ResultStorage
         rstorage = ResultStorage(storage=storage)
 
         import IPython
@@ -341,7 +343,7 @@
 
     logger.info("All info would be stored into %r", config.storage_url)
 
-    ctx = TestRun(config, storage)
+    ctx = TestRun(config, storage, ResultStorage(storage))
     ctx.rpc_code, ctx.default_rpc_plugins = node.get_rpc_server_code()
 
     if opts.ssh_key_passwd is not None: