diff --git a/wally/run_test.py b/wally/run_test.py
index 891b9d3..9cea103 100755
--- a/wally/run_test.py
+++ b/wally/run_test.py
@@ -2,6 +2,7 @@
 
 import os
 import sys
+import time
 import Queue
 import pprint
 import logging
@@ -16,11 +17,16 @@
 from concurrent.futures import ThreadPoolExecutor
 
 from wally import pretty_yaml
-from wally.sensors_utils import deploy_sensors_stage
 from wally.discover import discover, Node, undiscover
 from wally import utils, report, ssh_utils, start_vms
 from wally.suits.itest import IOPerfTest, PgBenchTest
 from wally.config import cfg_dict, load_config, setup_loggers
+from wally.sensors_utils import deploy_sensors_stage, SensorDatastore
+
+try:
+    from wally import webui
+except ImportError:
+    webui = None
 
 
 logger = logging.getLogger("wally")
@@ -478,6 +484,22 @@
     return load_data_from_file
 
 
+def start_web_ui(cfg, ctx):
+    if webui is None:
+        logger.error("Can't start webui. Install cherrypy module")
+        ctx.web_thread = None
+    else:
+        th = threading.Thread(None, webui.web_main_thread, "webui", (None,))
+        th.daemon = True
+        th.start()
+        ctx.web_thread = th
+
+
+def stop_web_ui(cfg, ctx):
+    webui.web_main_stop()
+    time.sleep(1)
+
+
 def parse_args(argv):
     descr = "Disk io performance test suite"
     parser = argparse.ArgumentParser(prog='wally', description=descr)
@@ -547,11 +569,15 @@
     ctx.build_meta['build_descrption'] = opts.build_description
     ctx.build_meta['build_type'] = opts.build_type
     ctx.build_meta['username'] = opts.username
+    ctx.sensors_data = SensorDatastore()
 
     cfg_dict['keep_vm'] = opts.keep_vm
     cfg_dict['no_tests'] = opts.no_tests
     cfg_dict['dont_discover_nodes'] = opts.dont_discover_nodes
 
+    if cfg_dict.get('run_web_ui', False):
+        start_web_ui(cfg_dict, ctx)
+
     try:
         for stage in stages:
             logger.info("Start {0.__name__} stage".format(stage))
@@ -580,6 +606,9 @@
 
     logger.info("All info stored in {0} folder".format(cfg_dict['var_dir']))
 
+    if cfg_dict.get('run_web_ui', False):
+        stop_web_ui(cfg_dict, ctx)
+
     if exc is None:
         logger.info("Tests finished successfully")
         return 0
