You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2019/06/26 18:49:21 UTC

[accumulo] branch 2.0 updated: Some monitor javascript updates (#1234)

This is an automated email from the ASF dual-hosted git repository.

ctubbsii pushed a commit to branch 2.0
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/2.0 by this push:
     new d501204  Some monitor javascript updates (#1234)
d501204 is described below

commit d5012048609e2c8d567a5a9b652230d36a607f19
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Wed Jun 26 14:49:16 2019 -0400

    Some monitor javascript updates (#1234)
    
    * Fix #1233 Use thead in tables in monitor page
    * Fix #475 display bulk import rows correctly
---
 .../core/clientImpl/TableOperationsImpl.java       |  2 +-
 .../accumulo/monitor/resources/js/bulkImport.js    | 30 +++++++++--------
 .../accumulo/monitor/resources/js/functions.js     |  4 +--
 .../org/apache/accumulo/monitor/resources/js/gc.js |  6 ++--
 .../accumulo/monitor/resources/js/listType.js      |  6 ++--
 .../apache/accumulo/monitor/resources/js/master.js |  6 ++--
 .../accumulo/monitor/resources/js/overview.js      |  8 ++---
 .../accumulo/monitor/resources/js/problems.js      | 12 +++----
 .../accumulo/monitor/resources/js/replication.js   |  6 ++--
 .../apache/accumulo/monitor/resources/js/scans.js  |  6 ++--
 .../apache/accumulo/monitor/resources/js/server.js | 14 ++++----
 .../apache/accumulo/monitor/resources/js/show.js   |  6 ++--
 .../accumulo/monitor/resources/js/summary.js       |  6 ++--
 .../apache/accumulo/monitor/resources/js/table.js  |  6 ++--
 .../accumulo/monitor/resources/js/tservers.js      |  8 ++---
 .../accumulo/monitor/templates/bulkImport.ftl      | 21 +++++++-----
 .../org/apache/accumulo/monitor/templates/gc.ftl   | 25 ++++++++------
 .../apache/accumulo/monitor/templates/listType.ftl |  8 +++--
 .../org/apache/accumulo/monitor/templates/log.ftl  | 10 +++---
 .../apache/accumulo/monitor/templates/master.ftl   | 23 ++++++++-----
 .../apache/accumulo/monitor/templates/overview.ftl | 10 +++---
 .../apache/accumulo/monitor/templates/problems.ftl | 20 +++++++----
 .../accumulo/monitor/templates/replication.ftl     | 11 +++---
 .../apache/accumulo/monitor/templates/scans.ftl    |  8 +++--
 .../apache/accumulo/monitor/templates/server.ftl   | 39 ++++++++++++++--------
 .../org/apache/accumulo/monitor/templates/show.ftl |  9 +++--
 .../apache/accumulo/monitor/templates/summary.ftl  |  9 +++--
 .../apache/accumulo/monitor/templates/table.ftl    | 35 ++++++++++---------
 .../apache/accumulo/monitor/templates/tables.ftl   | 31 +++++++++--------
 .../apache/accumulo/monitor/templates/tservers.ftl | 16 ++++++---
 30 files changed, 233 insertions(+), 168 deletions(-)

diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
index 0861faf..84c0d7a 100644
--- a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
@@ -667,7 +667,7 @@ public class TableOperationsImpl extends TableOperationsHelper {
           throw (AccumuloSecurityException) e.getCause();
         }
 
-        log.info("{} ... retrying ...", e.getMessage());
+        log.info("{} ... retrying ...", e, e);
         sleepUninterruptibly(3, TimeUnit.SECONDS);
       }
     }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/bulkImport.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/bulkImport.js
index 4240e08..b53d19a 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/bulkImport.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/bulkImport.js
@@ -44,7 +44,7 @@ function refresh() {
  */
 function refreshBulkImportTable() {
 
-  clearTable('masterBulkImportStatus');
+  clearTableBody('masterBulkImportStatus');
 
   /*
    * Get the bulk import value obtained earlier, if it doesn't exists,
@@ -52,24 +52,26 @@ function refreshBulkImportTable() {
    */
   var data = sessionStorage.bulkImports === undefined ?
       [] : JSON.parse(sessionStorage.bulkImports);
-  var items = [];
 
   /* If the data is empty, create an empty row, otherwise,
    * create the rows for the table
    */
   if (data.length === 0 || data.bulkImport.length === 0) {
-    items.push(createEmptyRow(3, 'Empty'));
+    $('<tr/>', {
+      html: createEmptyRow(3, 'Empty')
+    }).appendTo('#masterBulkImportStatus tbody');
   } else {
     $.each(data.bulkImport, function(key, val) {
+      var items = [];
       items.push(createFirstCell(val.filename, val.filename));
-      items.push(createRightCell(val.age, val.age));
+      items.push(createRightCell(val.age, new Date(val.age)));
       items.push(createRightCell(val.state, val.state));
+      $('<tr/>', {
+        html: items.join('')
+      }).appendTo('#masterBulkImportStatus tbody');
     });
   }
 
-  $('<tr/>', {
-    html: items.join('')
-  }).appendTo('#masterBulkImportStatus');
 }
 
 /**
@@ -77,31 +79,33 @@ function refreshBulkImportTable() {
  */
 function refreshServerBulkTable() {
 
-  clearTable('bulkImportStatus');
+  clearTableBody('bulkImportStatus');
 
   /* Get the bulk import value obtained earlier, if it doesn't exists,
    * create an empty array
    */
   var data = sessionStorage.bulkImports === undefined ?
    [] : JSON.parse(sessionStorage.bulkImports);
-  var items = [];
 
   /* If the data is empty, create an empty row, otherwise
    * create the rows for the table
    */
   if (data.length === 0 || data.tabletServerBulkImport.length === 0) {
-    items.push(createEmptyRow(3, 'Empty'));
+    $('<tr/>', {
+      html: createEmptyRow(3, 'Empty')
+    }).appendTo('#bulkImportStatus tbody');
   } else {
     $.each(data.tabletServerBulkImport, function(key, val) {
+      var items = [];
       items.push(createFirstCell(val.server, '<a href="/tservers?s=' +
           val.server + '">' + val.server + '</a>'));
       items.push(createRightCell(val.importSize, val.importSize));
       items.push(createRightCell(val.oldestAge, (val.oldestAge > 0 ?
           val.oldestAge : '&mdash;')));
+      $('<tr/>', {
+        html: items.join('')
+      }).appendTo('#bulkImportStatus tbody');
     });
   }
 
-  $('<tr/>', {
-    html: items.join('')
-  }).appendTo('#bulkImportStatus');
 }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js
index 021ddfd..08fe9bd 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/functions.js
@@ -207,9 +207,9 @@ function sanitize(url) {
  *
  * @param {string} tableID Table to clear
  */
-function clearTable(tableID) {
+function clearTableBody(tableID) {
   // JQuery selector to select all rows except for the first row (header)
-  $('#' + tableID).find('tr:not(:first)').remove();
+  $('#' + tableID + ' tbody tr').remove();
 }
 
 function createFirstCell(sortValue, showValue) {
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/gc.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/gc.js
index f4011b7..5ceaf0d 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/gc.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/gc.js
@@ -47,7 +47,7 @@ function refreshGCTable() {
 
   // Hides the banner, removes any rows from the table and hides the table
   $('#gcBanner').hide();
-  $('#gcActivity tr:gt(0)').remove();
+  clearTableBody('gcActivity');
   $('#gcActivity').hide();
 
   /* Check if the status of the gc is an error, if so, show banner, otherwise,
@@ -68,7 +68,7 @@ function refreshGCTable() {
 
       $('<tr/>', {
         html: item
-      }).appendTo('#gcActivity');
+      }).appendTo('#gcActivity tbody');
     } else {
 
       var gc = {'File&nbsp;Collection,&nbsp;Last&nbsp;Cycle' : data.files.lastCycle,
@@ -102,7 +102,7 @@ function refreshGCTable() {
 
           $('<tr/>', {
             html: items.join('')
-          }).appendTo('#gcActivity');
+          }).appendTo('#gcActivity tbody');
         }
       });
     }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/listType.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/listType.js
index fdea058..9ea1f89 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/listType.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/listType.js
@@ -38,7 +38,7 @@ function refresh() {
  * @param {string} minutes Minutes to display the trace
  */
 function refreshTypeTraceTable(minutes) {
-  clearTable('trace');
+  clearTableBody('trace');
 
   /*
    * Get the trace type value obtained earlier,
@@ -56,7 +56,7 @@ function refreshTypeTraceTable(minutes) {
         minutes + ' minute(s)'));
     $('<tr/>', {
       html: items.join('')
-    }).appendTo('#trace');
+    }).appendTo('#trace tbody');
   } else {
     $.each(data.traces, function(key, val) {
       var items = [];
@@ -70,7 +70,7 @@ function refreshTypeTraceTable(minutes) {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#trace');
+      }).appendTo('#trace tbody');
     });
   }
 }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/master.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/master.js
index 0345fdf..38abf4d 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/master.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/master.js
@@ -57,7 +57,7 @@ function recoveryList() {
   var data = sessionStorage.recoveryList === undefined ?
       [] : JSON.parse(sessionStorage.recoveryList);
 
-  $('#recoveryList tbody tr').remove();
+  clearTableBody('recoveryList');
 
   // If there is no recovery list data, hide the table
   if (data.length === 0 || data.recoveryList.length === 0) {
@@ -91,7 +91,7 @@ function refreshMasterTable() {
 
   // Hide the banner and the master table
   $('#masterBanner').hide();
-  $('#masterStatus tr:gt(0)').remove();
+  clearTableBody('masterStatus');
   $('#masterStatus').hide();
 
   // If master status is error, show banner, otherwise, create master table
@@ -139,6 +139,6 @@ function refreshMasterTable() {
 
     $('<tr/>', {
      html: items.join('')
-    }).appendTo('#masterStatus');
+    }).appendTo('#masterStatus tbody');
   }
 }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/overview.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/overview.js
index e0d0a12..8714480 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/overview.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/overview.js
@@ -90,11 +90,11 @@ function refreshZKTable() {
   var data = sessionStorage.zk === undefined ?
       [] : JSON.parse(sessionStorage.zk);
 
-  $('#zookeeper tr td:first').hide();
-  $('#zookeeper tr:gt(2)').remove();
+  $('#zookeeper thead tr:last').hide();
+  clearTableBody('zookeeper');
 
   if (data.length === 0 || data.zkServers.length === 0) {
-    $('#zookeeper tr td:first').show();
+    $('#zookeeper thead tr:last').show();
   } else {
     $.each(data.zkServers, function(key, val) {
       var cells = '<td class="left">' + val.server + '</td>';
@@ -106,7 +106,7 @@ function refreshZKTable() {
         cells += '<td class="right"></td>';
       }
       // create a <tr> element with html containing the cell data; append it to the table
-      $('<tr/>', { html: cells }).appendTo('#zookeeper table');
+      $('<tr/>', { html: cells }).appendTo('#zookeeper tbody');
     });
   }
 }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/problems.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/problems.js
index dde0c22..1fd62e2 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/problems.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/problems.js
@@ -63,7 +63,7 @@ function clearDetailsProblemsTable(table, resource, type) {
  * Generates the problem summary table
  */
 function refreshProblemSummaryTable() {
-  clearTable('problemSummary');
+  clearTableBody('problemSummary');
   var data = sessionStorage.problemSummary === undefined ?
       [] : JSON.parse(sessionStorage.problemSummary);
 
@@ -72,7 +72,7 @@ function refreshProblemSummaryTable() {
     items.push(createEmptyRow(5, 'Empty'));
     $('<tr/>', {
       html: items.join('')
-    }).appendTo('#problemSummary');
+    }).appendTo('#problemSummary tbody');
   } else {
     $.each(data.problemSummary, function(key, val) {
       var items = [];
@@ -90,7 +90,7 @@ function refreshProblemSummaryTable() {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#problemSummary');
+      }).appendTo('#problemSummary tbody');
     });
   }
 }
@@ -99,7 +99,7 @@ function refreshProblemSummaryTable() {
  * Generates the problem details table
  */
 function refreshProblemDetailsTable() {
-  clearTable('problemDetails');
+  clearTableBody('problemDetails');
   var data = sessionStorage.problemDetails === undefined ?
       [] : JSON.parse(sessionStorage.problemDetails);
 
@@ -108,7 +108,7 @@ function refreshProblemDetailsTable() {
     items.push(createEmptyRow(7, 'Empty'));
     $('<tr/>', {
       html: items.join('')
-    }).appendTo('#problemDetails');
+    }).appendTo('#problemDetails tbody');
   } else {
     $.each(data.problemDetails, function(key, val) {
       var items = [];
@@ -136,7 +136,7 @@ function refreshProblemDetailsTable() {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#problemDetails');
+      }).appendTo('#problemDetails tbody');
 
     });
   }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/replication.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/replication.js
index c911420..2b2f1e8 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/replication.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/replication.js
@@ -42,7 +42,7 @@ function refresh() {
  * Generates the replication table
  */
 function refreshReplicationsTable() {
-  clearTable('replicationStats');
+  clearTableBody('replicationStats');
 
   var data = sessionStorage.replication === undefined ?
       [] : JSON.parse(sessionStorage.replication);
@@ -52,7 +52,7 @@ function refreshReplicationsTable() {
     items.push(createEmptyRow(5, 'Replication table is offline'));
     $('<tr/>', {
       html: items.join('')
-    }).appendTo('#replicationStats');
+    }).appendTo('#replicationStats tbody');
   } else {
     $.each(data, function(key, val) {
       var items = [];
@@ -69,7 +69,7 @@ function refreshReplicationsTable() {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#replicationStats');
+      }).appendTo('#replicationStats tbody');
 
     });
   }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/scans.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/scans.js
index 20ba9ca..0ec9c8d 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/scans.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/scans.js
@@ -42,7 +42,7 @@ function refresh() {
  * Generates the scans table
  */
 function refreshScansTable() {
-  clearTable('scanStatus');
+  clearTableBody('scanStatus');
 
   var data = sessionStorage.scans === undefined ?
       [] : JSON.parse(sessionStorage.scans);
@@ -52,7 +52,7 @@ function refreshScansTable() {
 
     $('<tr/>', {
       html: items
-    }).appendTo('#scanStatus');
+    }).appendTo('#scanStatus tbody');
   } else {
     $.each(data.scans, function(key, val) {
       var items = [];
@@ -67,7 +67,7 @@ function refreshScansTable() {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#scanStatus');
+      }).appendTo('#scanStatus tbody');
     });
   }
 }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/server.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/server.js
index c8658df..adfd125 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/server.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/server.js
@@ -41,7 +41,7 @@ function refresh() {
  */
 function refreshDetailTable() {
 
-  $('#tServerDetail tr:gt(0)').remove();
+  clearTableBody('tServerDetail');
 
   var data = sessionStorage.server === undefined ?
       [] : JSON.parse(sessionStorage.server);
@@ -69,7 +69,7 @@ function refreshDetailTable() {
 
   $('<tr/>', {
     html: items.join('')
-  }).appendTo('#tServerDetail');
+  }).appendTo('#tServerDetail tbody');
 }
 
 /**
@@ -77,7 +77,7 @@ function refreshDetailTable() {
  */
 function refreshHistoryTable() {
 
-  $('#opHistoryDetails tr:gt(0)').remove();
+  clearTableBody('opHistoryDetails');
 
   var data = sessionStorage.server === undefined ?
       [] : JSON.parse(sessionStorage.server);
@@ -89,7 +89,7 @@ function refreshHistoryTable() {
 
     $('<tr/>', {
       html: row.join('')
-    }).appendTo('#opHistoryDetails');
+    }).appendTo('#opHistoryDetails tbody');
   } else {
     var totalTimeSpent = 0;
     $.each(data.allTimeTabletResults, function(key, val) {
@@ -135,7 +135,7 @@ function refreshHistoryTable() {
 
       $('<tr/>', {
         html: row.join('')
-      }).appendTo('#opHistoryDetails');
+      }).appendTo('#opHistoryDetails tbody');
 
     });
   }
@@ -146,7 +146,7 @@ function refreshHistoryTable() {
  */
 function refreshCurrentTable() {
 
-  $('#currentTabletOps tr:gt(0)').remove();
+  clearTableBody('currentTabletOps');
 
   var data = sessionStorage.server === undefined ?
       [] : JSON.parse(sessionStorage.server);
@@ -180,7 +180,7 @@ function refreshCurrentTable() {
 
   $('<tr/>', {
       html: items.join('')
-  }).appendTo('#currentTabletOps');
+  }).appendTo('#currentTabletOps tbody');
 
 }
 
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/show.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/show.js
index 1aa2a09..3fc01f4 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/show.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/show.js
@@ -35,7 +35,7 @@ function refresh() {
  * Generates the trace show table
  */
 function refreshTraceShowTable() {
-  clearTable('trace');
+  clearTableBody('trace');
   $('#trace caption span span').remove();
   var data = sessionStorage.traceShow === undefined ?
       [] : JSON.parse(sessionStorage.traceShow);
@@ -92,14 +92,14 @@ function refreshTraceShowTable() {
 
       items.push('</tr>');
 
-      $('#trace').append(items.join(''));
+      $('#trace tbody').append(items.join(''));
     });
   } else {
       var items = [];
       items.push('<tr>');
       items.push(createEmptyRow(5, 'No trace information for ID ' + id));
       items.push('</tr>');
-      $('#trace').append(items.join(''));
+      $('#trace tbody').append(items.join(''));
   }
 
 }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/summary.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/summary.js
index 07f245d..507dd10 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/summary.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/summary.js
@@ -37,7 +37,7 @@ function refresh() {
  * @param {string} minutes Minutes to display traces
  */
 function refreshTraceSummaryTable(minutes) {
-  clearTable('traceSummary');
+  clearTableBody('traceSummary');
 
   var data = sessionStorage.traceSummary === undefined ?
       [] : JSON.parse(sessionStorage.traceSummary);
@@ -48,7 +48,7 @@ function refreshTraceSummaryTable(minutes) {
         minutes + ' minute(s)'));
     $('<tr/>', {
       html: items.join('')
-    }).appendTo('#traceSummary');
+    }).appendTo('#traceSummary tbody');
   } else {
     $.each(data.recentTraces, function(key, val) {
 
@@ -74,7 +74,7 @@ function refreshTraceSummaryTable(minutes) {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#traceSummary');
+      }).appendTo('#traceSummary tbody');
 
     });
   }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/table.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/table.js
index 4cb940a..bf4b397 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/table.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/table.js
@@ -36,7 +36,7 @@ function refresh() {
  * Generates the table servers table
  */
 function refreshTableServersTable() {
-  $('#participatingTServers tr:gt(0)').remove();
+  clearTableBody('participatingTServers');
 
   var data = sessionStorage.tableServers === undefined ?
       [] : JSON.parse(sessionStorage.tableServers);
@@ -46,7 +46,7 @@ function refreshTableServersTable() {
     items.push(createEmptyRow(13, 'Empty'));
     $('<tr/>', {
       html: items.join('')
-    }).appendTo('#participatingTServers');
+    }).appendTo('#participatingTServers tbody');
   } else {
 
     $.each(data.servers, function(key, val) {
@@ -101,7 +101,7 @@ function refreshTableServersTable() {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#participatingTServers');
+      }).appendTo('#participatingTServers tbody');
 
     });
   }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/tservers.js b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/tservers.js
index 51008c4..ff778cf 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/tservers.js
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/resources/js/tservers.js
@@ -97,7 +97,7 @@ function refreshBadTServersTable() {
   var data = sessionStorage.tservers === undefined ?
       [] : JSON.parse(sessionStorage.tservers);
 
-  $('#badtservers > tbody').html('');
+  clearTableBody('badtservers');
 
   if (data.length === 0 || data.badServers.length === 0) {
     $('#badtservers').hide();
@@ -110,7 +110,7 @@ function refreshBadTServersTable() {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#badtservers');
+      }).appendTo('#badtservers tbody');
     });
   }
 }
@@ -122,7 +122,7 @@ function refreshDeadTServersTable() {
   var data = sessionStorage.tservers === undefined ?
       [] : JSON.parse(sessionStorage.tservers);
 
-  $('#deadtservers > tbody').html('');
+  clearTableBody('deadtservers');
 
   if (data.length === 0 || data.deadServers.length === 0) {
     $('#deadtservers').hide();
@@ -141,7 +141,7 @@ function refreshDeadTServersTable() {
 
       $('<tr/>', {
         html: items.join('')
-      }).appendTo('#deadtservers');
+      }).appendTo('#deadtservers tbody');
     });
   }
 }
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/bulkImport.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/bulkImport.ftl
index 21f2b7a..44eed43 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/bulkImport.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/bulkImport.ftl
@@ -23,11 +23,14 @@
         <div class="col-xs-12">
           <table id="masterBulkImportStatus" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Legacy Bulk Imports</span><br/></caption>
-            <tbody>
-              <tr><th class="firstcell">Directory&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Directory&nbsp;</th>
                 <th title="The age of the import.">Age&nbsp;</th>
-                <th title="The current state of the bulk import">State&nbsp;</th></tr>
-            </tbody>
+                <th title="The current state of the bulk import">State&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
@@ -36,11 +39,13 @@
         <div class="col-xs-12">
           <table id="bulkImportStatus" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Per TabletServer</span><br/></caption>
-            <tbody>
-              <tr><th class="firstcell">Server</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Server</th>
                 <th title="Number of imports presently running">#</th>
                 <th title="The age of the oldest import running on this server.">Oldest&nbsp;Age</th>
               </tr>
-            </tbody>
-        </table>
+            </thead>
+            <tbody></tbody>
+          </table>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/gc.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/gc.ftl
index 2a928ba..8340523 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/gc.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/gc.ftl
@@ -17,15 +17,18 @@
       <div><h3>${title}</h3></div>
       <div id="gcBanner"><div class="alert alert-danger" role="alert">Collector is Unavailable</div></div>
       <div>
-          <table id="gcActivity" class="table table-bordered table-striped table-condensed">
-              <tbody><tr><th class="firstcell">Activity&nbsp;</th>
-                  <th>Finished&nbsp;</th>
-                  <th>Candidates&nbsp;</th>
-                  <th>Deleted&nbsp;</th>
-                  <th>In&nbsp;Use&nbsp;</th>
-                  <th>Errors&nbsp;</th>
-                  <th>Duration&nbsp;</th>
-              </tr>
-              </tbody>
-          </table>
+        <table id="gcActivity" class="table table-bordered table-striped table-condensed">
+          <thead>
+            <tr>
+              <th class="firstcell">Activity&nbsp;</th>
+              <th>Finished&nbsp;</th>
+              <th>Candidates&nbsp;</th>
+              <th>Deleted&nbsp;</th>
+              <th>In&nbsp;Use&nbsp;</th>
+              <th>Errors&nbsp;</th>
+              <th>Duration&nbsp;</th>
+            </tr>
+          </thead>
+          <tbody></tbody>
+        </table>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/listType.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/listType.ftl
index e4b656a..626d3e3 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/listType.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/listType.ftl
@@ -34,12 +34,14 @@
         <div class="col-xs-12">
           <table id="trace" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Traces for masterReplicationDriver</span><br/></caption>
-            <tbody>
-              <tr><th class="firstcell" title="Start Time of selected trace type">Start</th>
+            <thead>
+              <tr>
+                <th class="firstcell" title="Start Time of selected trace type">Start</th>
                 <th title="Span Time of selected trace type">ms</th>
                 <th title="Service and Location of selected trace type">Source</th>
               </tr>
-            </tbody>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/log.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/log.ftl
index 85f105a..32f56d9 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/log.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/log.ftl
@@ -116,15 +116,17 @@
       <div><h3>${title}</h3></div>
       <div>
         <table id="logTable" class="table table-bordered table-striped table-condensed">
-            <thead><tr>
+          <thead>
+            <tr>
               <th>Timestamp</th>
               <th>Application</th>
               <th>Count</th>
               <th>Level</th>
               <th class="logevent">Message</th>
-              <th>Stacktrace</th></tr>
-            </thead>
-            <tbody></tbody>
+              <th>Stacktrace</th>
+            </tr>
+          </thead>
+          <tbody></tbody>
         </table>
       </div>
       <div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/master.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/master.ftl
index b1d71ce..30ae01c 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/master.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/master.ftl
@@ -23,8 +23,9 @@
       <div class="row">
         <div class="col-xs-12">
           <table id="masterStatus" class="table table-bordered table-striped table-condensed">
-          <tbody>
-            <tr><th class="firstcell" title="The hostname of the master server">Hostname</th>
+            <thead>
+              <tr>
+                <th class="firstcell" title="The hostname of the master server">Hostname</th>
                 <th title="Number of tablet servers currently available">Online TServers&nbsp;</th>
                 <th title="The total number of tablet servers configured">TotalTServers&nbsp;</th>
                 <th title="The last time files were cleaned-up from HDFS.">Last&nbsp;GC</th>
@@ -35,18 +36,22 @@
                 <th title="The total number of Key/Value pairs read on the server side.  Not all may be returned because of filtering.">Entries Read</th>
                 <th title="The total number of Key/Value pairs returned as a result of scans.">Entries Returned</th>
                 <th title="The maximum amount of time that ingest has been held across all servers due to a lack of memory to store the records">Hold&nbsp;Time</th>
-                <th title="The Unix one minute load average. The average number of processes in the run queue over a one minute interval.">OS&nbsp;Load</th></tr>
-          </tbody>
+                <th title="The Unix one minute load average. The average number of processes in the run queue over a one minute interval.">OS&nbsp;Load</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
           <table id="recoveryList" class="table table-bordered table-striped table-condensed">
-          <caption><span class="table-caption">Log&nbsp;Recovery</span><br/>
-            <span class="table-subcaption">Some tablets were unloaded in an unsafe manner. Write-ahead logs are being recovered.</span><br/>
-          </caption>
-            <thead><tr>
+            <caption><span class="table-caption">Log&nbsp;Recovery</span><br/>
+              <span class="table-subcaption">Some tablets were unloaded in an unsafe manner. Write-ahead logs are being recovered.</span><br/>
+            </caption>
+            <thead>
+              <tr>
                 <th>Server</th>
                 <th>Log</th>
                 <th>Time</th>
-                <th>Progress</th></tr>
+                <th>Progress</th>
+              </tr>
             </thead>
             <tbody></tbody>
           </table>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/overview.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/overview.ftl
index 7a20769..4dd8a0e 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/overview.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/overview.ftl
@@ -22,7 +22,7 @@
       <div class="row">
         <div class="col-sm-6" id="master">
           <table class="table table-bordered table-striped table-condensed">
-            <tbody>
+            <thead>
               <tr><th colspan="2"><a href="/master">Accumulo Master</a></th></tr>
               <tr><td colspan="2" class="center" style="display:none;"><span class="label label-danger nowrap">Master is Down</span></td></tr>
               <tr><td class="left"><a href="/tables">Tables</a></td><td class="right"></td></tr>
@@ -32,16 +32,18 @@
               <tr><td class="left">Entries</td><td class="right"></td></tr>
               <tr><td class="left">Lookups</td><td class="right"></td></tr>
               <tr><td class="left">Uptime</td><td class="right"></td></tr>
-            </tbody>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
         <div class="col-sm-6" id="zookeeper">
           <table class="table table-bordered table-striped table-condensed">
-            <tbody>
+            <thead>
               <tr><th colspan="3">Zookeeper</th></tr>
               <tr><th>Server</th><th>Mode</th><th>Clients</th></tr>
               <tr><td class="center" colspan="3"><i>No Zookeepers</i></td></tr>
-            </tbody>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/problems.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/problems.ftl
index a612240..d23a736 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/problems.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/problems.ftl
@@ -32,23 +32,31 @@
         <div class="col-xs-12">
           <table id="problemSummary" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Summary</span></caption>
-            <tbody><tr><th class="firstcell">Table&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Table&nbsp;</th>
                 <th>FILE_READ&nbsp;</th>
                 <th>FILE_WRITE&nbsp;</th>
                 <th>TABLET_LOAD&nbsp;</th>
-                <th>Operations&nbsp;</th></tr>
-            </tbody>
+                <th>Operations&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
           <table id="problemDetails" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Details</span></caption>
-            <tbody><tr><th class="firstcell" >Table&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell" >Table&nbsp;</th>
                 <th>Problem&nbsp;Type&nbsp;</th>
                 <th>Server&nbsp;</th>
                 <th>Time&nbsp;</th>
                 <th>Resource&nbsp;</th>
                 <th>Exception&nbsp;</th>
-                <th>Operations&nbsp;</th></tr>
-            </tbody>
+                <th>Operations&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/replication.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/replication.ftl
index 42066a2..8b0b056 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/replication.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/replication.ftl
@@ -22,13 +22,16 @@
       <div class="row">
         <div class="col-xs-12">
           <table id="replicationStats" class="table table-bordered table-striped table-condensed">
-            <tbody>
-              <tr><th class="firstcell">Table&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Table&nbsp;</th>
                 <th>Peer&nbsp;</th>
                 <th>Remote&nbsp;Identifier&nbsp;</th>
                 <th>Replica&nbsp;System&nbsp;Type&nbsp;</th>
-                <th>Files&nbsp;needing&nbsp;replication&nbsp;</th></tr>
-            </tbody>
+                <th>Files&nbsp;needing&nbsp;replication&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/scans.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/scans.ftl
index 498d6fe..a6a0fcd 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/scans.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/scans.ftl
@@ -22,12 +22,14 @@
       <div class="row">
         <div class="col-xs-12">
           <table id="scanStatus" class="table table-bordered table-striped table-condensed">
-            <tbody>
-              <tr><th class="firstcell">Server&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Server&nbsp;</th>
                 <th title="Number of scans presently running">#&nbsp;</th>
                 <th title="The age of the oldest scan on this server.">Oldest&nbsp;Age&nbsp;</th>
               </tr>
-            </tbody>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/server.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/server.ftl
index eaf111c..9fa38f6 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/server.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/server.ftl
@@ -81,13 +81,16 @@
         <div class="col-xs-12">
           <table id="tServerDetail" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">${server}</span></caption>
-            <tbody>
-              <tr><th class="firstcell">Hosted&nbsp;Tablets&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Hosted&nbsp;Tablets&nbsp;</th>
                 <th>Entries&nbsp;</th>
                 <th>Minor&nbsp;Compacting&nbsp;</th>
                 <th>Major&nbsp;Compacting&nbsp;</th>
-                <th>Splitting&nbsp;</th></tr>
-            </tbody>
+                <th>Splitting&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
@@ -95,16 +98,19 @@
         <div class="col-xs-12">
           <table id="opHistoryDetails" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">All-Time&nbsp;Tablet&nbsp;Operation&nbsp;Results</span></caption>
-            <tbody>
-              <tr><th class="firstcell">Operation&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Operation&nbsp;</th>
                 <th>Success&nbsp;</th>
                 <th>Failure&nbsp;</th>
                 <th>Average<br/>Queue&nbsp;Time&nbsp;</th>
                 <th>Std.&nbsp;Dev.<br/>Queue&nbsp;Time&nbsp;</th>
                 <th>Average<br/>Time&nbsp;</th>
                 <th>Std.&nbsp;Dev.<br/>Time&nbsp;</th>
-                <th>Percentage&nbsp;Time&nbsp;Spent&nbsp;</th></tr>
-            </tbody>
+                <th>Percentage&nbsp;Time&nbsp;Spent&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
@@ -112,12 +118,15 @@
         <div class="col-xs-12">
           <table id="currentTabletOps" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Current&nbsp;Tablet&nbsp;Operation&nbsp;Results</span></caption>
-            <tbody>
-              <tr><th class="firstcell">Minor&nbsp;Average&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Minor&nbsp;Average&nbsp;</th>
                 <th>Minor&nbsp;Std&nbsp;Dev&nbsp;</th>
                 <th>Major&nbsp;Avg&nbsp;</th>
-                <th>Major&nbsp;Std&nbsp;Dev&nbsp;</th></tr>
-            </tbody>
+                <th>Major&nbsp;Std&nbsp;Dev&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
@@ -126,7 +135,8 @@
           <table id="perTabletResults" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Detailed Tablet Operations</span></caption>
             <thead>
-              <tr><th>Table&nbsp;</th>
+              <tr>
+                <th>Table&nbsp;</th>
                 <th>Tablet&nbsp;</th>
                 <th class="big-num">Entries&nbsp;</th>
                 <th class="big-num">Ingest&nbsp;</th>
@@ -136,7 +146,8 @@
                 <th class="big-num">Minor&nbsp;Avg&nbsp;e/s&nbsp;</th>
                 <th class="duration">Major&nbsp;Avg&nbsp;</th>
                 <th class="duration">Major&nbsp;Std&nbsp;Dev&nbsp;</th>
-                <th class="big-num">Major&nbsp;Avg&nbsp;e/s&nbsp;</th></tr>
+                <th class="big-num">Major&nbsp;Avg&nbsp;e/s&nbsp;</th>
+              </tr>
             </thead>
             <tbody></tbody>
           </table>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/show.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/show.ftl
index 926e772..3724316 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/show.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/show.ftl
@@ -66,9 +66,12 @@
         <div class="col-xs-12">
           <table id="trace" class="table table-bordered table-striped table-condensed">
             <caption><span id="caption" class="table-caption">Trace ${id} started at<br/></span></caption>
-            <tbody>
-            <tr><th>Time&nbsp;</th><th>Start&nbsp;</th><th>Service@Location&nbsp;</th><th>Name&nbsp;</th><th>Addl&nbsp;Data&nbsp;</th></tr>
-            </tbody>
+            <thead>
+              <tr>
+                <th>Time&nbsp;</th><th>Start&nbsp;</th><th>Service@Location&nbsp;</th><th>Name&nbsp;</th><th>Addl&nbsp;Data&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/summary.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/summary.ftl
index c98f723..643e8d9 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/summary.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/summary.ftl
@@ -32,14 +32,17 @@
       <div class="row">
         <div class="col-xs-12">
           <table id="traceSummary" class="table table-bordered table-striped table-condensed">
-            <tbody><tr><th class="firstcell" title="Trace Type">Type&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell" title="Trace Type">Type&nbsp;</th>
                 <th title="Number of spans of this type">Total&nbsp;</th>
                 <th title="Shortest span duration">min&nbsp;</th>
                 <th title="Longest span duration">max&nbsp;</th>
                 <th title="Average span duration">avg&nbsp;</th>
                 <th title="Counts of spans of different duration. Columns start at milliseconds, and each column is ten times longer: tens of milliseconds, seconds, tens of seconds, etc.">Histogram&nbsp;</th>
-            </tr>
-            </tbody>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/table.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/table.ftl
index 19b1512..53aac4d 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/table.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/table.ftl
@@ -31,22 +31,25 @@
       <div class="row">
         <div class="col-xs-12">
           <table id="participatingTServers" class="table table-bordered table-striped table-condensed">
-          <caption><span class="table-caption">${table}</span></caption>
-          <tbody>
-          <tr><th class="firstcell">Server&nbsp;</th>
-          <th>Hosted&nbsp;Tablets&nbsp;</th>
-          <th>Last&nbsp;Contact&nbsp;</th>
-          <th title="Key/value pairs over each instance, table or tablet.">Entries&nbsp;</th>
-          <th title="The number of Key/Value pairs inserted. (Note that deletes are considered inserted)">Ingest&nbsp;</th>
-          <th title="The number of key/value pairs returned to clients. (Not the number of scans)">Query&nbsp;</th>
-          <th title="The amount of time that ingest operations are suspended while waiting for data to be written to disk.">Hold&nbsp;Time&nbsp;</th>
-          <th title="Information about the scans threads. Shows how many threads are running and how much work is queued for the threads.">Running<br/>Scans&nbsp;</th>
-          <th title="The action of flushing memory to disk. Multiple tablets can be compacted simultaneously, but sometimes they must wait for resources to be available. The number of tablets waiting for compaction are in parentheses.">Minor<br/>Compactions&nbsp;</th>
-          <th title="The action of gathering up many small files and rewriting them as one larger file.">Major<br/>Compactions&nbsp;</th>
-          <th title="The recent index cache hit rate.">Index Cache<br/>Hit Rate&nbsp;</th>
-          <th title="The recent data cache hit rate.">Data Cache<br/>Hit Rate&nbsp;</th>
-          <th title="The Unix one minute load average. The average number of processes in the run queue over a one minute interval.">OS&nbsp;Load&nbsp;</th></tr>
-          </tbody>
+            <caption><span class="table-caption">${table}</span></caption>
+            <thead>
+              <tr>
+                <th class="firstcell">Server&nbsp;</th>
+                <th>Hosted&nbsp;Tablets&nbsp;</th>
+                <th>Last&nbsp;Contact&nbsp;</th>
+                <th title="Key/value pairs over each instance, table or tablet.">Entries&nbsp;</th>
+                <th title="The number of Key/Value pairs inserted. (Note that deletes are considered inserted)">Ingest&nbsp;</th>
+                <th title="The number of key/value pairs returned to clients. (Not the number of scans)">Query&nbsp;</th>
+                <th title="The amount of time that ingest operations are suspended while waiting for data to be written to disk.">Hold&nbsp;Time&nbsp;</th>
+                <th title="Information about the scans threads. Shows how many threads are running and how much work is queued for the threads.">Running<br/>Scans&nbsp;</th>
+                <th title="The action of flushing memory to disk. Multiple tablets can be compacted simultaneously, but sometimes they must wait for resources to be available. The number of tablets waiting for compaction are in parentheses.">Minor<br/>Compactions&nbsp;</th>
+                <th title="The action of gathering up many small files and rewriting them as one larger file.">Major<br/>Compactions&nbsp;</th>
+                <th title="The recent index cache hit rate.">Index Cache<br/>Hit Rate&nbsp;</th>
+                <th title="The recent data cache hit rate.">Data Cache<br/>Hit Rate&nbsp;</th>
+                <th title="The Unix one minute load average. The average number of processes in the run queue over a one minute interval.">OS&nbsp;Load&nbsp;</th>
+              </tr>
+            </thead>
+            <tbody></tbody>
           </table>
         </div>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tables.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tables.ftl
index 74330fb..6e125c7 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tables.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tables.ftl
@@ -78,21 +78,24 @@
       </script>
       <div><h3>${tablesTitle}</h3></div>
       <div>
-          <table id="tableList" class="table table-bordered table-striped table-condensed">
+        <table id="tableList" class="table table-bordered table-striped table-condensed">
           <thead>
-            <tr><th>Table&nbsp;Name</th>
-                <th>State</th>
-                <th title="Tables are broken down into ranges of rows called tablets." class="big-num">Tablets</th>
-                <th title="Tablets unavailable for query or ingest. May be a transient condition when tablets are moved for balancing." class="big-num">Offline</th>
-                <th title="Key/value pairs over each instance, table or tablet." class="big-num">Entries</th>
-                <th title="The total number of key/value pairs stored in memory and not yet written to disk." class="big-num">In&nbsp;Mem</th>
-                <th title="The rate of Key/Value pairs inserted. (Note that deletes are considered inserted)" class="big-num">Ingest</th>
-                <th title="The rate of Key/Value pairs read on the server side. Not all key values read may be returned to client because of filtering." class="big-num">Read</th>
-                <th title="The rate of Key/Value pairs returned to clients during queries. This is not the number of scans." class="big-num">Returned</th>
-                <th title="The amount of time that ingest operations are suspended while waiting for data to be written to disk." class="big-num">Hold&nbsp;Time</th>
-                <th title="Running scans. The number queued waiting are in parentheses.">Scans</th>
-                <th title="Minor Compactions. The number of tablets waiting for compaction are in parentheses.">MinC</th>
-                <th title="Major Compactions. The number of tablets waiting for compaction are in parentheses.">MajC</th></tr>
+            <tr>
+              <th>Table&nbsp;Name</th>
+              <th>State</th>
+              <th title="Tables are broken down into ranges of rows called tablets." class="big-num">Tablets</th>
+              <th title="Tablets unavailable for query or ingest. May be a transient condition when tablets are moved for balancing." class="big-num">Offline</th>
+              <th title="Key/value pairs over each instance, table or tablet." class="big-num">Entries</th>
+              <th title="The total number of key/value pairs stored in memory and not yet written to disk." class="big-num">In&nbsp;Mem</th>
+              <th title="The rate of Key/Value pairs inserted. (Note that deletes are considered inserted)" class="big-num">Ingest</th>
+              <th title="The rate of Key/Value pairs read on the server side. Not all key values read may be returned to client because of filtering." class="big-num">Read</th>
+              <th title="The rate of Key/Value pairs returned to clients during queries. This is not the number of scans." class="big-num">Returned</th>
+              <th title="The amount of time that ingest operations are suspended while waiting for data to be written to disk." class="big-num">Hold&nbsp;Time</th>
+              <th title="Running scans. The number queued waiting are in parentheses.">Scans</th>
+              <th title="Minor Compactions. The number of tablets waiting for compaction are in parentheses.">MinC</th>
+              <th title="Major Compactions. The number of tablets waiting for compaction are in parentheses.">MajC</th>
+            </tr>
           </thead>
+          <tbody></tbody>
         </table>
       </div>
diff --git a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tservers.ftl b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tservers.ftl
index 4b332c5..850c7bd 100644
--- a/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tservers.ftl
+++ b/server/monitor/src/main/resources/org/apache/accumulo/monitor/templates/tservers.ftl
@@ -24,25 +24,31 @@
           <table id="badtservers" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Non-Functioning Tablet Servers</span><br/>
               <span class="table-subcaption">The following tablet servers reported a status other than Online</span></caption>
-            <thead><tr>
+            <thead>
+              <tr>
                 <th>Server</th>
-                <th>Status</th></tr>
+                <th>Status</th>
+              </tr>
             </thead>
             <tbody></tbody>
           </table>
           <table id="deadtservers" class="table table-bordered table-striped table-condensed">
             <caption><span class="table-caption">Dead Tablet Servers</span><br/>
               <span class="table-subcaption">The following tablet servers are no longer reachable.</span><br/></caption>
-            <thead><tr>
+            <thead>
+              <tr>
                 <th>Server</th>
                 <th class="duration">Last Updated</th>
                 <th>Event</th>
-                <th>Clear</th></tr>
+                <th>Clear</th>
+              </tr>
             </thead>
             <tbody></tbody>
           </table>
           <table id="tservers" class="table table-bordered table-striped table-condensed">
-            <thead><tr><th class="firstcell">Server&nbsp;</th>
+            <thead>
+              <tr>
+                <th class="firstcell">Server&nbsp;</th>
                 <th class="big-num">Hosted&nbsp;Tablets&nbsp;</th>
                 <th class="duration">Last&nbsp;Contact&nbsp;</th>
                 <th title="The time it took for the tserver to return its status." class="duration">Response&nbsp;Time&nbsp;</th>