[autotest] Better tick stats

This cl generate each metric that is relative to the start of
the tick. We will be able to render a new graph on grafana
which shows clearly how tick time total is composed of
individual steps.

TEST=run scheduler
BUG=chromium:464938

Change-Id: Id882c1af75ebb6324b1be9ac341781550d7b344b
Reviewed-on: https://chromium-review.googlesource.com/257810
Reviewed-by: Fang Deng <fdeng@chromium.org>
Tested-by: Fang Deng <fdeng@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Queue: Fang Deng <fdeng@chromium.org>
diff --git a/scheduler/site_monitor_db.py b/scheduler/site_monitor_db.py
index 322bb01..9ba0309 100644
--- a/scheduler/site_monitor_db.py
+++ b/scheduler/site_monitor_db.py
@@ -6,6 +6,7 @@
 
 import os
 import logging
+import time
 
 from autotest_lib.client.common_lib import global_config
 from autotest_lib.client.common_lib.cros.graphite import autotest_stats
@@ -95,47 +96,77 @@
 
 
     _timer = autotest_stats.Timer('scheduler')
+    _gauge = autotest_stats.Gauge('scheduler_rel')
+    _tick_start = None
 
 
     @_timer.decorate
     def tick(self):
+        self._tick_start = time.time()
         super(SiteDispatcher, self).tick()
+        self._gauge.send('tick', time.time() - self._tick_start)
 
     @_timer.decorate
     def _garbage_collection(self):
         super(SiteDispatcher, self)._garbage_collection()
+        if self._tick_start:
+            self._gauge.send('_garbage_collection',
+                             time.time() - self._tick_start)
 
     @_timer.decorate
     def _run_cleanup(self):
         super(SiteDispatcher, self)._run_cleanup()
+        if self._tick_start:
+            self._gauge.send('_run_cleanup', time.time() - self._tick_start)
 
     @_timer.decorate
     def _find_aborting(self):
         super(SiteDispatcher, self)._find_aborting()
+        if self._tick_start:
+            self._gauge.send('_find_aborting', time.time() - self._tick_start)
 
     @_timer.decorate
     def _process_recurring_runs(self):
         super(SiteDispatcher, self)._process_recurring_runs()
+        if self._tick_start:
+            self._gauge.send('_process_recurring_runs',
+                             time.time() - self._tick_start)
 
     @_timer.decorate
     def _schedule_delay_tasks(self):
         super(SiteDispatcher, self)._schedule_delay_tasks()
+        if self._tick_start:
+            self._gauge.send('_schedule_delay_tasks',
+                             time.time() - self._tick_start)
 
     @_timer.decorate
     def _schedule_running_host_queue_entries(self):
         super(SiteDispatcher, self)._schedule_running_host_queue_entries()
+        if self._tick_start:
+            self._gauge.send('_schedule_running_host_queue_entries',
+                             time.time() - self._tick_start)
 
     @_timer.decorate
     def _schedule_special_tasks(self):
         super(SiteDispatcher, self)._schedule_special_tasks()
+        if self._tick_start:
+            self._gauge.send('_schedule_special_tasks',
+                             time.time() - self._tick_start)
 
     @_timer.decorate
     def _schedule_new_jobs(self):
         super(SiteDispatcher, self)._schedule_new_jobs()
+        if self._tick_start:
+            self._gauge.send('_schedule_new_jobs',
+                             time.time() - self._tick_start)
+
 
     @_timer.decorate
     def _handle_agents(self):
         super(SiteDispatcher, self)._handle_agents()
+        if self._tick_start:
+            self._gauge.send('_handle_agents', time.time() - self._tick_start)
+
 
     def _reverify_hosts_where(self, where,
                               print_message='Reverifying host %s'):