llvm bot monitor: Rework how the table headers and colspan are set

So that we don't have to track column names in more than one place.

Change-Id: If78f3a0693a92a65da2b0cd514f6d9f7d88f9d4b
diff --git a/monitor/bot-status.py b/monitor/bot-status.py
index be7851c..730442f 100755
--- a/monitor/bot-status.py
+++ b/monitor/bot-status.py
@@ -180,28 +180,42 @@
     base_url = server['base_url']
     builder_url = server['builder_url']
     build_url = server['build_url']
+
+    column_titles = [
+            "Buildbot",
+            "Status",
+            "T Since",
+            "Duration",
+            "Build #",
+            "Commits",
+            "Failing steps"
+    ]
+    num_columns = len(column_titles)
+    column_titles_html = "<tr>{}</tr>\n".format(
+            "".join(["<th>{}</th>".format(t) for t in column_titles]))
+
     temp.write("<table border=0 cellspacing=1 cellpadding=2>\n")
-    temp.write("<tr><td colspan=7>&nbsp;</td><tr>\n")
-    temp.write("<tr><th colspan=7>{} @ {}</td><tr>\n"
-               .format(server['name'], today))
+    temp.write("<tr><td colspan={}>&nbsp;</td><tr>\n".format(num_columns))
+    temp.write("<tr><th colspan={}>{} @ {}</td><tr>\n"
+               .format(num_columns, server['name'], today))
 
     for builder in server['builders']:
-      temp.write("<tr><td colspan=7>&nbsp;</td><tr>\n")
-      temp.write("<tr><th colspan=7>{}</th><tr>\n".format(builder['name']))
-      temp.write("<tr><th>Buildbot</th><th>Status</th><th>T Since</th>"
-                 "<th>Duration</th><th>Build #</th><th>Commits</th>"
-                 "<th>Failing steps</th></tr>\n")
+      temp.write("<tr><td colspan={}>&nbsp;</td><tr>\n".format(num_columns))
+      temp.write("<tr><th colspan={}>{}</th><tr>\n".format(num_columns, builder['name']))
+      temp.write(column_titles_html)
       temp.write("<tbody>\n")
       for bot in builder['bots']:
         temp.write("<tr>\n")
         try:
           status = bots_status[(base_url, bot['name'])]
         except KeyError:
-          temp.write("  <td>{} is offline!</td>\n</tr>\n".format(bot['name']))
+          temp.write("  <td colspan={}>{} is offline!</td>\n</tr>\n"
+                      .format(num_columns, bot['name']))
           continue
         else:
             if not status.get('valid', True):
-                temp.write("  <td>Could not read status for {}!</td>\n</tr>\n".format(bot['name']))
+                temp.write("  <td colspan={}>Could not read status for {}!</td>\n</tr>\n"
+                            .format(num_columns, bot['name']))
                 continue
 
         found_failure |= status['fail']