[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/host_scheduler.py b/scheduler/host_scheduler.py
index 26fef0a..b9764c4 100755
--- a/scheduler/host_scheduler.py
+++ b/scheduler/host_scheduler.py
@@ -483,19 +483,22 @@
         # Start the thread to report metadata.
         metadata_reporter.start()
 
-        ts_mon_config.SetupTsMonGlobalState('autotest_host_scheduler')
+        # Set up metrics upload for Monarch. Use indirect=True to have a separate
+        # flushing process which supports metrics which are sent exactly once.
+        with ts_mon_config.SetupTsMonGlobalState('autotest_host_scheduler',
+                                                 indirect=True):
 
-        host_scheduler = HostScheduler()
-        minimum_tick_sec = global_config.global_config.get_config_value(
-                'SCHEDULER', 'minimum_tick_sec', type=float)
-        while not _shutdown:
-            start = time.time()
-            host_scheduler.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)
+            host_scheduler = HostScheduler()
+            minimum_tick_sec = global_config.global_config.get_config_value(
+                    'SCHEDULER', 'minimum_tick_sec', type=float)
+            while not _shutdown:
+                start = time.time()
+                host_scheduler.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 host-scheduler role. Thus do not send email for it.