[autotest] Set up ts_mon with indirect=True

The scheduler should use indirect=True to support the reset_after=True
flag for global metrics.

BUG=chromium:648312
TEST=None

Change-Id: I4187c84361a51cdc37ca3827493d848e7dcfa3a3
Reviewed-on: https://chromium-review.googlesource.com/387197
Commit-Ready: Paul Hobbs <phobbs@google.com>
Tested-by: Paul Hobbs <phobbs@google.com>
Reviewed-by: David Riley <davidriley@chromium.org>
Reviewed-by: Paul Hobbs <phobbs@google.com>
diff --git a/scheduler/monitor_db.py b/scheduler/monitor_db.py
index 413c0d8..8709b72 100755
--- a/scheduler/monitor_db.py
+++ b/scheduler/monitor_db.py
@@ -172,36 +172,37 @@
     # Start the thread to report metadata.
     metadata_reporter.start()
 
-    ts_mon_config.SetupTsMonGlobalState('autotest_scheduler')
+    with ts_mon_config.SetupTsMonGlobalState('autotest_scheduler',
+                                             indirect=True):
 
-    try:
-        initialize()
-        dispatcher = Dispatcher()
-        dispatcher.initialize(recover_hosts=options.recover_hosts)
-        minimum_tick_sec = global_config.global_config.get_config_value(
-                scheduler_config.CONFIG_SECTION, 'minimum_tick_sec', type=float)
+        try:
+            initialize()
+            dispatcher = Dispatcher()
+            dispatcher.initialize(recover_hosts=options.recover_hosts)
+            minimum_tick_sec = global_config.global_config.get_config_value(
+                    scheduler_config.CONFIG_SECTION, 'minimum_tick_sec', type=float)
 
-        while not _shutdown and not server._shutdown_scheduler:
-            start = time.time()
-            dispatcher.tick()
-            curr_tick_sec = time.time() - start
-            if (minimum_tick_sec > curr_tick_sec):
-                time.sleep(minimum_tick_sec - curr_tick_sec)
-            else:
-                time.sleep(0.0001)
-    except server_manager_utils.ServerActionError as e:
-        # This error is expected when the server is not in primary status
-        # for scheduler role. Thus do not send email for it.
-        logging.exception(e)
-    except Exception:
-        email_manager.manager.log_stacktrace(
-            "Uncaught exception; terminating monitor_db")
+            while not _shutdown and not server._shutdown_scheduler:
+                start = time.time()
+                dispatcher.tick()
+                curr_tick_sec = time.time() - start
+                if (minimum_tick_sec > curr_tick_sec):
+                    time.sleep(minimum_tick_sec - curr_tick_sec)
+                else:
+                    time.sleep(0.0001)
+        except server_manager_utils.ServerActionError as e:
+            # This error is expected when the server is not in primary status
+            # for scheduler role. Thus do not send email for it.
+            logging.exception(e)
+        except Exception:
+            email_manager.manager.log_stacktrace(
+                "Uncaught exception; terminating monitor_db")
 
-    metadata_reporter.abort()
-    email_manager.manager.send_queued_emails()
-    server.shutdown()
-    _drone_manager.shutdown()
-    _db_manager.disconnect()
+        metadata_reporter.abort()
+        email_manager.manager.send_queued_emails()
+        server.shutdown()
+        _drone_manager.shutdown()
+        _db_manager.disconnect()
 
 
 def handle_signal(signum, frame):