[autotest] Fix for indirect=True metrics

Currently, chromite's @_Indirect metrics check whether they should be
indirect at import-time. Therefore, we need to create the metrics at
run-time after ts_mon has already been set up. A fix to the @_Indirect
decorator is in progress.

TEST=Tested with a local autotest instance. Unit tests still pass
BUG=chromium:652620

Change-Id: I46f5d79921f56f5292df08a56b1de77399875861
Reviewed-on: https://chromium-review.googlesource.com/394249
Commit-Ready: Paul Hobbs <phobbs@google.com>
Tested-by: Paul Hobbs <phobbs@google.com>
Reviewed-by: Paul Hobbs <phobbs@google.com>
diff --git a/scheduler/monitor_db.py b/scheduler/monitor_db.py
index 413c0d8..31b325f 100755
--- a/scheduler/monitor_db.py
+++ b/scheduler/monitor_db.py
@@ -172,30 +172,30 @@
     # 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()