[autotest] Start filing bugs for pool health

Currently we don't track and manage a failure to run bvts
because of dead duts too well. It usually involves multiple
sheriffs and quite a bit of confusion, not to mention multiple
bugs across 2 trackers, before the right people are notified.
This cl files a bug from run_suite when a suite fails because
of insufficient DUTs, and notifies all interested parties.

TEST=Filed bugs.
BUG=chromium:419573,chromium:423847

Change-Id: I4749d6abfb147e058a491d86d707a651246b5ea2
Reviewed-on: https://chromium-review.googlesource.com/224555
Tested-by: Prashanth B <[email protected]>
Reviewed-by: Dan Shi <[email protected]>
Commit-Queue: Prashanth B <[email protected]>
diff --git a/site_utils/diagnosis_utils.py b/site_utils/diagnosis_utils.py
index 95e5e6b..b55a4b2 100644
--- a/site_utils/diagnosis_utils.py
+++ b/site_utils/diagnosis_utils.py
@@ -11,6 +11,7 @@
 import common
 
 from autotest_lib.server import utils
+from autotest_lib.server.cros.dynamic_suite import reporting
 from autotest_lib.server.cros.dynamic_suite import reporting_utils
 
 
@@ -210,16 +211,26 @@
         # setup_django_environment can't be imported now as paygen server does
         # not have django package.
         bad_statuses = ('Repair Failed', 'Repairing', 'Verifying')
-        available_hosts = [host for host in hosts
-                           if not host.status in bad_statuses and
-                           not host.locked]
+        unusable_hosts = []
+        available_hosts = []
+        for host in hosts:
+            if host.status in bad_statuses or host.locked:
+                unusable_hosts.append(host.hostname)
+            else:
+                available_hosts.append(host)
         logging.debug('%d of %d DUTs are available for board %s pool %s.',
                       len(available_hosts), len(hosts), board, pool)
         if len(available_hosts) < minimum_duts:
+            bug_id = ''
+            if unusable_hosts:
+                pool_health_bug = reporting.PoolHealthBug(
+                        pool, board, unusable_hosts)
+                bug_id = reporting.Reporter().report(pool_health_bug)[0]
             raise NotEnoughDutsError(
                     'Number of available DUTs for board %s pool %s is %d, which'
-                    ' is less than the minimum value %d.' %
-                    (board, pool, len(available_hosts), minimum_duts))
+                    ' is less than the minimum value %d. '
+                    'Filed https://crbug.com/%s' %
+                    (board, pool, len(available_hosts), minimum_duts, bug_id))
 
 
     def diagnose_job(self, job_id, instance_server):