accumulo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ctubb...@apache.org
Subject [27/54] [abbrv] accumulo git commit: ACCUMULO-2181 Fixed from PR
Date Thu, 06 Jul 2017 20:43:21 GMT
http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/resources/tservers.js
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/resources/tservers.js b/server/monitor/src/main/resources/resources/tservers.js
deleted file mode 100644
index 7f19c2d..0000000
--- a/server/monitor/src/main/resources/resources/tservers.js
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements.  See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-/**
- * Creates tservers initial table
- */
-$(document).ready(function() {
-  createHeader();
-  refreshTServers();
-});
-
-/**
- * Makes the REST calls, generates the tables with the new information
- */
-function refreshTServers() {
-  $.ajaxSetup({
-    async: false
-  });
-  getTServers();
-  $.ajaxSetup({
-    async: true
-  });
-  refreshBadTServersTable();
-  refreshDeadTServersTable();
-  refreshTServersTable();
-}
-
-/**
- * Used to redraw the page
- */
-function refresh() {
-  refreshTServers();
-}
-
-/**
- * Generates the tservers table
- */
-function refreshBadTServersTable() {
-  var data = sessionStorage.tservers === undefined ?
-      [] : JSON.parse(sessionStorage.tservers);
-
-  $('#badtservers tr').remove();
-  $('#badtservers caption').remove();
-
-  if (data.length === 0 || data.badServers.length === 0) {
-
-    $('#badtservers').hide();
-  } else {
-
-    $('#badtservers').show();
-
-    var caption = [];
-
-    caption.push('<span class="table-caption">Non-Functioning&nbsp;' +
-        'Tablet&nbsp;Servers</span><br />');
-    caption.push('<span class="table-subcaption">The following tablet' +
-        ' servers reported a status other than Online</span><br />');
-
-    $('<caption/>', {
-      html: caption.join('')
-    }).appendTo('#badtservers');
-
-    var items = [];
-
-    items.push('<th class="firstcell" onclick="sortTable(0,0)">' +
-        'Tablet&nbsp;Server&nbsp;</th>');
-    items.push('<th onclick="sortTable(0,1)">Tablet&nbsp;Server&nbsp;' +
-        'Status&nbsp;</th>');
-
-    $('<tr/>', {
-      html: items.join('')
-    }).appendTo('#badtservers');
-
-    $.each(data.badServers, function(key, val) {
-      var items = [];
-      items.push('<td class="firstcell left" data-value="' + val.id +
-          '">' + val.id + '</td>');
-      items.push('<td class="right" data-value="' + val.status +
-          '">' + val.status + '</td>');
-
-      $('<tr/>', {
-        html: items.join('')
-      }).appendTo('#badtservers');
-    });
-  }
-}
-
-/**
- * Generates the deadtservers table
- */
-function refreshDeadTServersTable() {
-  var data = sessionStorage.tservers === undefined ?
-      [] : JSON.parse(sessionStorage.tservers);
-
-  $('#deadtservers tr').remove();
-  $('#deadtservers caption').remove();
-
-  if (data.length === 0 || data.deadServers.length === 0) {
-
-    $('#deadtservers').hide();
-  } else {
-
-    $('#deadtservers').show();
-
-
-    var caption = [];
-
-    caption.push('<span class="table-caption">Dead&nbsp;' +
-        'Tablet&nbsp;Servers</span><br />');
-    caption.push('<span class="table-subcaption">The following' +
-        ' tablet servers are no longer reachable.</span><br />');
-
-    $('<caption/>', {
-      html: caption.join('')
-    }).appendTo('#deadtservers');
-
-    var items = [];
-
-    items.push('<th class="firstcell" onclick="sortTable(1,0)">' +
-        'Server&nbsp;</th>');
-    items.push('<th onclick="sortTable(1,1)">Last&nbsp;Updated&nbsp;</th>');
-    items.push('<th onclick="sortTable(1,2)">Event&nbsp;</th>');
-    items.push('<th>Clear</th>');
-
-    $('<tr/>', {
-      html: items.join('')
-    }).appendTo('#deadtservers');
-
-    $.each(data.deadServers, function(key, val) {
-      var items = [];
-      items.push('<td class="firstcell left" data-value="' + val.server +
-          '">' + val.server + '</td>');
-
-      var date = new Date(val.lastStatus);
-      date = date.toLocaleString().split(' ').join('&nbsp;');
-      items.push('<td class="right" data-value="' + val.lastStatus +
-          '">' + date + '</td>');
-      items.push('<td class="right" data-value="' + val.status +
-          '">' + val.status + '</td>');
-      items.push('<td class="right"> ' +
-          '<a href="javascript:clearDeadTServers(\'' +
-          val.server + '\');">clear</a></td>');
-
-      $('<tr/>', {
-        html: items.join('')
-      }).appendTo('#deadtservers');
-    });
-  }
-}
-
-/**
- * Makes the REST POST call to clear dead table server
- *
- * @param {string} server Dead TServer to clear
- */
-function clearDeadTServers(server) {
-  clearDeadServers(server);
-  refreshTServers();
-  refreshNavBar();
-}
-
-/**
- * Generates the tserver table
- */
-function refreshTServersTable() {
-  var data = sessionStorage.tservers === undefined ?
-      [] : JSON.parse(sessionStorage.tservers);
-
-  $('#tservers tr:gt(0)').remove();
-
-  if (data.length === 0 || data.servers.length === 0) {
-    var item = '<td class="center" colspan="13"><i>Empty</i></td>';
-
-    $('<tr/>', {
-      html: item
-    }).appendTo('#tservers');
-  } else {
-
-    $.each(data.servers, function(key, val) {
-      var items = [];
-      items.push('<td class="firstcell left" data-value="' + val.hostname +
-          '"><a href="/tservers?s=' + val.id + '">' + val.hostname +
-          '</a></td>');
-
-      items.push('<td class="right" data-value="' + val.tablets +
-          '">' + bigNumberForQuantity(val.tablets) + '</td>');
-
-      items.push('<td class="right" data-value="' + val.lastContact +
-          '">' + timeDuration(val.lastContact) + '</td>');
-
-      items.push('<td class="right" data-value="' + val.entries +
-          '">' + bigNumberForQuantity(val.entries) + '</td>');
-
-      items.push('<td class="right" data-value="' + val.ingest +
-          '">' + bigNumberForQuantity(Math.floor(val.ingest)) + '</td>');
-
-      items.push('<td class="right" data-value="' + val.query +
-          '">' + bigNumberForQuantity(Math.floor(val.query)) + '</td>');
-
-      items.push('<td class="right" data-value="' + val.holdtime +
-          '">' + timeDuration(val.holdtime) + '</td>');
-
-      items.push('<td class="right" data-value="' +
-          (val.compactions.scans.running + val.compactions.scans.queued) +
-          '">' + bigNumberForQuantity(val.compactions.scans.running) +
-          '&nbsp;(' + bigNumberForQuantity(val.compactions.scans.queued) +
-          ')</td>');
-
-      items.push('<td class="right" data-value="' +
-          (val.compactions.minor.running + val.compactions.minor.queued) +
-          '">' + bigNumberForQuantity(val.compactions.minor.running) +
-          '&nbsp;(' + bigNumberForQuantity(val.compactions.minor.queued) +
-          ')</td>');
-
-      items.push('<td class="right" data-value="' +
-          (val.compactions.major.running + val.compactions.major.queued) +
-          '">' + bigNumberForQuantity(val.compactions.major.running) +
-          '&nbsp;(' + bigNumberForQuantity(val.compactions.major.queued) +
-          ')</td>');
-
-      items.push('<td class="right" data-value="' +
-          val.indexCacheHitRate * 100 + '">' +
-          Math.round(val.indexCacheHitRate * 100) +
-          '%</td>');
-
-      items.push('<td class="right" data-value="' + val.dataCacheHitRate * 100 +
-          '">' + Math.round(val.dataCacheHitRate * 100) +
-          '%</td>');
-
-      items.push('<td class="right" data-value="' + val.osload +
-          '">' + bigNumberForQuantity(val.osload) + '</td>');
-
-      $('<tr/>', {
-        html: items.join('')
-      }).appendTo('#tservers');
-    });
-  }
-}
-
-/**
- * Sorts the tservers table on the selected column
- *
- * @param {string} table Table ID to sort
- * @param {number} n Column number to sort by
- */
-function sortTable(table, n) {
-  var tableIDs = ['badtservers', 'deadtservers', 'tservers'];
-
-  if (sessionStorage.tableColumnSort !== undefined &&
-      sessionStorage.tableColumnSort == n &&
-      sessionStorage.direction !== undefined) {
-    direction = sessionStorage.direction === 'asc' ? 'desc' : 'asc';
-  } else {
-    direction = sessionStorage.direction === undefined ?
-        'asc' : sessionStorage.direction;
-  }
-  sessionStorage.tableColumn = tableIDs[table];
-  sessionStorage.tableColumnSort = n;
-  sortTables(tableIDs[table], direction, n);
-}
-
-/**
- * Creates the tservers header
- */
-function createHeader() {
-  var caption = [];
-
-  caption.push('<span class="table-caption">Tablet&nbsp;Servers</span><br />');
-  caption.push('<span class="table-subcaption">Click on the ' +
-      '<span style="color: #0000ff;">server address</span> to ' +
-      'view detailed performance statistics for that server.</span><br />');
-
-  $('<caption/>', {
-    html: caption.join('')
-  }).appendTo('#tservers');
-
-  var items = [];
-
-  items.push('<th class="firstcell" onclick="sortTable(2,0)">Server&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,1)">Hosted&nbsp;Tablets&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,2)">Last&nbsp;Contact&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,3)" title="' +
-      descriptions['Entries'] + '">Entries&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,4)" title="' +
-      descriptions['Ingest'] + '">Ingest&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,5)" title="' +
-      descriptions['Query'] + '">Query&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,6)" title="' +
-      descriptions['Hold Time'] + '">Hold&nbsp;Time&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,7)" title="' +
-      descriptions['Running Scans'] + '">Running<br />Scans&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,8)" title="' +
-      descriptions['Minor Compactions'] +
-      '">Minor<br />Compactions&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,9)" title="' +
-      descriptions['Major Compactions'] +
-      '">Major<br />Compactions&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,10)" title="' +
-      descriptions['Index Cache Hit Rate'] +
-      '">Index Cache<br />Hit Rate&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,11)" title="' +
-      descriptions['Data Cache Hit Rate'] +
-      '">Data Cache<br />Hit Rate&nbsp;</th>');
-  items.push('<th onclick="sortTable(2,12)" title="' +
-      descriptions['OS Load'] + '">OS&nbsp;Load&nbsp;</th>');
-
-  $('<tr/>', {
-    html: items.join('')
-  }).appendTo('#tservers');
-}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/resources/up.gif
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/resources/up.gif b/server/monitor/src/main/resources/resources/up.gif
deleted file mode 100644
index b272cbb..0000000
Binary files a/server/monitor/src/main/resources/resources/up.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/resources/vis.js
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/resources/vis.js b/server/monitor/src/main/resources/resources/vis.js
deleted file mode 100644
index bcf5327..0000000
--- a/server/monitor/src/main/resources/resources/vis.js
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Server Stats
-var statNames = {}, maxStatValues = {}, adjustMax = {}, significance = {};
-
-/**
- * Sets the options for the server visualization
- *
- * @param {string} shape Circle or Square
- * @param {number} size Size of shape
- * @param {string} motion Stat to display motion
- * @param {string} color Stat to display color
- */
-function setOptions(shape, size, motion, color) {
-  var data = sessionStorage.serverStats === undefined ?
-      {} : JSON.parse(sessionStorage.serverStats);
-  $('#motion').empty();
-  $('#color').empty();
-
-  $.each(data.serverStats, function(key, val) {
-    var item = val.description;
-
-    $('#motion').append('<option ' + (motion === val.name ? 'selected' : '') +
-        '>' + item + '</option>');
-    $('#color').append('<option ' + (color === val.name ? 'selected' : '') +
-        '>' + item + '</option>');
-
-  });
-  if (speedStatType === undefined) {
-    speedStatType = motion !== undefined || motion !== '' ? motion : '';
-    speedDisabled = motion !== '' ? false : true;
-  }
-  if (speedStatType !== motion && motion !== undefined &&
-      motion !== 'osload' && motion !== '') {
-    speedStatType = motion;
-    speedDisabled = false;
-  }
-  if (colorStatType === undefined) {
-    colorStatType = color !== undefined ? color : 'osload';
-  }
-  if (colorStatType !== color && color !== undefined) {
-    colorStatType = color;
-  }
-}
-
-/**
- * Sets the stats values from the REST call
- */
-function setStats() {
-
-  var data = JSON.parse(sessionStorage.serverStats);
-
-  $.each(data.serverStats, function(key, val) {
-    statNames[val.name] = val.derived;
-    maxStatValues[val.name] = val.max;
-    adjustMax[val.name] = val.adjustMax;
-    significance[val.name] = val.significance;
-  });
-
-  var numNormalStats = 8;
-}
-
-// size and spacing variables
-var dotSpacing = 10; // spacing between centers of dots (radius)
-var dotPadding = 0.5; // dot padding
-var minDotRadius = 3; // min dot radius
-var maxDotRadius = dotSpacing - dotPadding;
-
-// arrays of information about each dot
-var stats = {'servers': []};
-var dots = new Array(0); // current sizes and change directions
-var mousedDot = -1; // the dot currently under the mouse
-
-var colorPalette = ['#0000CC', '#0014B8', '#0029A3', '#003D8F', '#00527A',
-    '#006666', '#007A52', '#008F3D', '#00A329', '#00B814', '#00CC00',
-    '#14D100', '#29D600', '#3DDB00', '#52E000', '#66E600', '#7AEB00',
-    '#8FF000', '#A3F500', '#B8FA00', '#CCFF00', '#CCFF00', '#CCF200',
-    '#CCE600', '#CCD900', '#CCCC00', '#CCBF00', '#CCB200', '#CCA600',
-    '#CC9900', '#CC8C00', '#CC8000', '#CC7300', '#CC6600', '#CC5900',
-    '#CC4C00', '#CC4000', '#CC3300', '#CC2600', '#CC1A00', '#CC0D00',
-    '#CC0000'];
-
-var nullColor = '#F5F8FA';
-var deadColor = '#B000CC';
-
-// animation variables
-var drawing = false;
-var canvas = document.getElementById('visCanvas');
-var context = canvas.getContext('2d');
-
-// mouse handling for server information display
-document.getElementById('hoverable').addEventListener('mouseover',
-    showId, false);
-document.getElementById('hoverable').addEventListener('mousemove',
-    showId, false);
-document.getElementById('hoverable').addEventListener('mouseout',
-    hideId, false);
-document.getElementById('vishoverinfo').addEventListener('click',
-    goToServer, false);
-canvas.addEventListener('click', goToServer, false);
-
-// initialize settings based on request parameters
-var main = document.getElementById('main');
-var speedStatType;
-var colorStatType;
-var speedDisabled = true;
-var useCircles = true;
-setShape(document.getElementById('shape'));
-setSize(document.getElementById('size'));
-setMotion(document.getElementById('motion'));
-setColor(document.getElementById('color'));
-
-// xml loading variables
-var xmlReturned = true;
-// don't bother allowing for IE 5 or 6 since canvas won't work
-var xmlhttp = new XMLHttpRequest();
-xmlhttp.onreadystatechange = function() {
-  handleNewData();
-};
-
-self.setInterval('getXML()', 5000);
-
-//self.setInterval('drawDots()',20);
-
-window.requestAnimFrame = (function(callback) {
-  return window.requestAnimationFrame ||
-  window.webkitRequestAnimationFrame ||
-  window.mozRequestAnimationFrame ||
-  window.oRequestAnimationFrame ||
-  window.msRequestAnimationFrame ||
-  function(callback) {
-    window.setTimeout(callback, 1000 / 60);
-  };
-})();
-
-function handleNewData() {
-  if (xmlhttp.readyState != 4) {
-    return;
-  }
-  if (xmlhttp.status != 200 || xmlhttp.responseText == null) {
-    xmlReturned = true;
-    return;
-  }
-  var newstats = JSON.parse(xmlhttp.responseText);
-  for (var i in newstats.servers) {
-    for (var s in statNames) {
-      if (statNames[s])
-        continue;
-      newstats.servers[i][s] = Math.max(0, Math.floor(significance[s] *
-          newstats.servers[i][s]) / significance[s]);
-      if (adjustMax[s])
-        maxStatValues[s] = Math.max(newstats.servers[i][s], maxStatValues[s]);
-    }
-  }
-
-  initDerivedInfo(newstats);
-  var oldstats = stats;
-  while (drawing) {}
-  stats = newstats;
-  delete oldstats;
-  xmlReturned = true;
-}
-
-// set max and average
-function setDerivedStats(serverStats) {
-  var avgStat = 0;
-  var maxStat = 0;
-  var maxIndex = 0;
-  for (var s in statNames) {
-    if (statNames[s])
-      continue;
-    normStat = serverStats[s] / maxStatValues[s];
-    if (normStat > 0)
-      avgStat += normStat;
-    if (maxStat < normStat) {
-      maxStat = normStat;
-      maxIndex = s;
-    }
-  }
-  serverStats.allmax = Math.floor(significance.allmax *
-      Math.min(1, maxStat)) / significance.allmax;
-  serverStats.allavg = Math.floor(significance.allavg *
-      avgStat / numNormalStats) / significance.allavg;
-  serverStats.maxStat = maxIndex;
-}
-
-function initDerivedInfo(newstats) {
-  for (var i in newstats.servers) {
-    if ('dead' in newstats.servers[i] || 'bad' in newstats.servers[i]) {
-      continue;
-    }
-    if (i >= dots.length) {
-      dots.push({'size': maxDotRadius, 'growing': false});
-    }
-    setDerivedStats(newstats.servers[i]);
-  }
-}
-
-// construct server info for hover
-function getInfo(serverStats) {
-  var extra = '<strong>' + serverStats.ip + '</strong>';
-  if ('dead' in serverStats || 'bad' in serverStats)
-    return extra;
-  extra = extra + ' (' + serverStats.hostname + ')';
-  var j = 0;
-  for (var s in statNames) {
-    if (j % 4 == 0)
-      extra = extra + '<br>\n';
-    extra = extra + '&nbsp;&nbsp;' + s + ': <strong>' +
-        serverStats[s] + '</strong>';
-    j++;
-  }
-  extra = extra + ' (' + serverStats.maxStat + ')';
-  return extra;
-}
-
-// reload xml
-function getXML() {
-  if (xmlReturned == true) {
-    xmlReturned = false;
-    xmlhttp.open('GET', jsonurl, true);
-    xmlhttp.send();
-  }
-}
-
-// redraw
-function drawDots() {
-  requestAnimFrame(drawDots);
-  var width = Math.ceil(Math.sqrt(stats.servers.length));
-  var height = Math.ceil(stats.servers.length / width);
-  var x;
-  var y;
-  var server;
-  var sizeChange;
-  drawing = true;
-  for (var i in stats.servers) {
-    server = stats.servers[i];
-    x = i % width;
-    y = Math.floor(i / width);
-    if ('bad' in server || 'dead' in server) {
-      strokeDot(x, y, maxDotRadius - 1, deadColor);
-      continue;
-    }
-    if (speedDisabled || Math.floor(dots[i].size) > maxDotRadius) {
-      // check for resize by the user
-      dots[i].size = maxDotRadius;
-    } else if (server[speedStatType] <= 0) {
-      // if not changing size, increase to max radius
-      if (dots[i].size < maxDotRadius)
-        dots[i].size = dots[i].size + 1;
-      if (dots[i].size > maxDotRadius)
-        dots[i].size = maxDotRadius;
-    } else {
-      sizeChange = getStat(i, speedStatType);
-      if (dots[i].growing) {
-        dots[i].size = dots[i].size + sizeChange;
-        if (dots[i].size + sizeChange > maxDotRadius) {
-          dots[i].growing = false;
-        }
-      }
-      else {
-        dots[i].size = dots[i].size - sizeChange;
-        if (dots[i].size - sizeChange < minDotRadius) {
-          dots[i].growing = true;
-        }
-      }
-    }
-    drawDot(x, y, Math.floor(dots[i].size),
-        getColor(getStat(i, colorStatType)));
-  }
-  /*
-   * mousedDot shouldn't be set to an invalid dot,
-   * but stats might have changed since then
-   */
-  if (mousedDot >= 0 && mousedDot < stats.servers.length)
-    document.getElementById('vishoverinfo').innerHTML =
-        getInfo(stats.servers[mousedDot]);
-  drawing = false;
-}
-
-// fill in a few grey dots
-function drawGrid() {
-  context.clearRect(0, 0, canvas.width, canvas.height);
-  for (var i = 0, k = 0; i < canvas.width; i += dotSpacing * 2, k++) {
-    for (var j = 0, l = 0; j < canvas.height; j += dotSpacing * 2, l++) {
-      drawDot(k, l, maxDotRadius, nullColor);
-    }
-  }
-}
-
-// fill a dot specified by indices into dot grid
-function drawDot(i, j, r, c) {
-  var x = i * dotSpacing * 2 + dotSpacing;
-  var y = j * dotSpacing * 2 + dotSpacing;
-  context.clearRect(x - dotSpacing, y - dotSpacing, dotSpacing * 2,
-      dotSpacing * 2);
-  if (useCircles)
-    fillCircle(x, y, r - dotPadding, c);
-  else
-    fillSquare(x - r, y - r, (r - dotPadding) * 2, c);
-}
-
-// stroke a dot specified by indices into dot grid
-function strokeDot(i, j, r, c) {
-  var x = i * dotSpacing * 2 + dotSpacing;
-  var y = j * dotSpacing * 2 + dotSpacing;
-  context.clearRect(x - dotSpacing, y - dotSpacing, dotSpacing * 2,
-      dotSpacing * 2);
-  if (useCircles)
-    strokeCircle(x, y, r - dotPadding, c);
-  else
-    strokeSquare(x - r, y - r, (r - dotPadding) * 2, c);
-}
-
-function getStat(dotIndex, statIndex) {
-  return Math.min(1, stats.servers[dotIndex][statIndex] /
-      maxStatValues[statIndex]);
-}
-
-// translate color between 0 and maxObservedColor into an html color code
-function getColor(normColor) {
-  return colorPalette[Math.round((colorPalette.length - 1) * normColor)];
-}
-
-function strokeCircle(x, y, r, c) {
-  context.strokeStyle = c;
-  context.lineWidth = 2;
-  context.beginPath();
-  context.arc(x, y, r, 0, Math.PI * 2, true);
-  context.closePath();
-  context.stroke();
-}
-
-function fillCircle(x, y, r, c) {
-  context.fillStyle = c;
-  context.beginPath();
-  context.arc(x, y, r, 0, Math.PI * 2, true);
-  context.closePath();
-  context.fill();
-}
-
-function strokeSquare(x, y, d, c) {
-  context.strokeStyle = c;
-  context.lineWidth = 2;
-  context.strokeRect(x, y, d, d);
-}
-
-function fillSquare(x, y, d, c) {
-  context.fillStyle = c;
-  context.fillRect(x, y, d, d);
-}
-
-// callback for shape selection
-function setShape(obj) {
-  switch (obj.selectedIndex) {
-    case 0:
-      useCircles = true;
-      break;
-    case 1:
-      useCircles = false;
-      break;
-    default:
-      useCircles = true;
-  }
-  drawGrid();
-  setState();
-}
-
-// callback for size selection
-function setSize(obj) {
-  switch (obj.selectedIndex) {
-    case 0:
-      dotSpacing = 5;
-      minDotRadius = 1;
-      break;
-    case 1:
-      dotSpacing = 10;
-      minDotRadius = 3;
-      break;
-    case 2:
-      dotSpacing = 20;
-      minDotRadius = 5;
-      break;
-    case 3:
-      dotSpacing = 40;
-      minDotRadius = 7;
-      break;
-    default:
-      dotSpacing = 10;
-      minDotRadius = 3;
-  }
-  maxDotRadius = dotSpacing - dotPadding;
-  drawGrid();
-  setState();
-}
-
-// callback for motion selection
-function setMotion(obj) {
-  if (obj.selectedIndex <= 0) {
-    speedDisabled = true;
-    setState();
-    return;
-  }
-  var i = 0;
-  for (var s in statNames) {
-    if (i == obj.selectedIndex) {
-      speedStatType = s;
-      break;
-    }
-    i++;
-  }
-  speedDisabled = false;
-  setState();
-}
-
-// callback for color selection
-function setColor(obj) {
-  var i = 0;
-  for (var s in statNames) {
-    if (i == obj.selectedIndex) {
-      colorStatType = s;
-      break;
-    }
-    i++;
-  }
-  setState();
-}
-
-// hide server info on mouseout
-function hideId(e) {
-  document.getElementById('vishoverinfo').style.visibility = 'hidden';
-}
-
-// display server info on mouseover
-function showId(e) {
-  var x;
-  var y;
-  if (e.pageX || e.pageY) {
-    x = e.pageX + main.scrollLeft;
-    y = e.pageY + main.scrollTop;
-  }
-  else {
-    // clientX and clientY unimplemented
-    return;
-  }
-  var relx = x - canvas.offsetLeft - main.offsetLeft;
-  var rely = y - canvas.offsetTop - main.offsetTop;
-  var width = Math.ceil(Math.sqrt(stats.servers.length));
-  gotDot = Math.floor(relx / (dotSpacing * 2)) + width *
-      Math.floor(rely / (dotSpacing * 2));
-  mousedDot = -1;
-  if (relx < (width * dotSpacing * 2) && gotDot >= 0 &&
-      gotDot < stats.servers.length) {
-    mousedDot = gotDot;
-    document.getElementById('vishoverinfo').style.left = relx +
-        canvas.offsetLeft;
-    document.getElementById('vishoverinfo').style.top = Math.max(0,
-        rely + canvas.offsetTop - 70);
-    document.getElementById('vishoverinfo').style.visibility = 'visible';
-  }
-  else {
-    document.getElementById('vishoverinfo').style.visibility = 'hidden';
-  }
-}
-
-function setState() {
-  var url = visurl + '?shape=' + (useCircles ? 'circles' : 'squares') +
-      '&size=' + (dotSpacing * 2) + (speedDisabled ? '' :
-      '&motion=' + speedStatType) +
-      '&color=' + colorStatType;
-  window.history.replaceState(window.history.state, 'Server Activity', url);
-
-  setOptions(useCircles ? 'circles' : 'squares', dotSpacing * 2,
-      speedDisabled ? '' : speedStatType, colorStatType);
-}
-
-// go to server page on click
-function goToServer(e) {
-  /*
-   * mousedDot shouldn't be set to an invalid dot,
-   * but stats might have changed since then
-   */
-  if (mousedDot >= 0 && mousedDot < stats.servers.length)
-    window.location = serverurl + stats.servers[mousedDot].ip;
-}
-
-/*window.onload = function() {
-  drawGrid();
-  drawDots();
-  getXML();
-}*/

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/resources/vis.js.old
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/resources/vis.js.old b/server/monitor/src/main/resources/resources/vis.js.old
deleted file mode 100644
index 8f2bc20..0000000
--- a/server/monitor/src/main/resources/resources/vis.js.old
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- 
-// size and spacing variables
-var dotSpacing = 10; // spacing between centers of dots (radius)
-var dotPadding = 0.5; // dot padding
-var minDotRadius = 3; // min dot radius
-var maxDotRadius = dotSpacing - dotPadding;
-
-// arrays of information about each dot
-var stats = {'servers': []};
-var dots = new Array(0); // current sizes and change directions
-var mousedDot = -1; // the dot currently under the mouse
-
-var colorPalette = ['#0000CC', '#0014B8', '#0029A3', '#003D8F', '#00527A', '#006666', '#007A52', '#008F3D', '#00A329', '#00B814', '#00CC00', '#14D100', '#29D600', '#3DDB00', '#52E000', '#66E600', '#7AEB00', '#8FF000', '#A3F500', '#B8FA00', '#CCFF00', '#CCFF00', '#CCF200', '#CCE600', '#CCD900', '#CCCC00', '#CCBF00', '#CCB200', '#CCA600', '#CC9900', '#CC8C00', '#CC8000', '#CC7300', '#CC6600', '#CC5900', '#CC4C00', '#CC4000', '#CC3300', '#CC2600', '#CC1A00', '#CC0D00', '#CC0000'];
-
-var nullColor = '#F5F8FA';
-var deadColor = '#B000CC';
-
-// animation variables
-var drawing = false;
-var canvas = document.getElementById('visCanvas');
-var context = canvas.getContext('2d');
-
-// mouse handling for server information display
-document.getElementById('hoverable').addEventListener('mouseover', showId, false);
-document.getElementById('hoverable').addEventListener('mousemove', showId, false);
-document.getElementById('hoverable').addEventListener('mouseout', hideId, false);
-document.getElementById('vishoverinfo').addEventListener('click', goToServer, false);
-canvas.addEventListener('click', goToServer, false);
-
-// initialize settings based on request parameters
-var main = document.getElementById('main');
-var speedStatType;
-var colorStatType;
-var speedDisabled = true;
-var useCircles = true;
-setShape(document.getElementById('shape'));
-setSize(document.getElementById('size'));
-setMotion(document.getElementById('motion'));
-setColor(document.getElementById('color'));
-
-// xml loading variables
-var xmlReturned = true;
-var xmlhttp=new XMLHttpRequest(); // don't bother allowing for IE 5 or 6 since canvas won't work
-xmlhttp.onreadystatechange=function() {
-  handleNewData();
-}
-self.setInterval("getXML()",5000);
-//self.setInterval("drawDots()",20);
-
-window.requestAnimFrame = (function(callback){
-  return window.requestAnimationFrame ||
-  window.webkitRequestAnimationFrame ||
-  window.mozRequestAnimationFrame ||
-  window.oRequestAnimationFrame ||
-  window.msRequestAnimationFrame ||
-  function(callback){
-    window.setTimeout(callback, 1000 / 60);
-  };
-})();
-
-function handleNewData() {
-  if (xmlhttp.readyState!=4) {
-    return;
-  }
-  if (xmlhttp.status!=200 || xmlhttp.responseText==null) {
-    xmlReturned = true;
-    return;
-  }
-  var newstats = JSON.parse(xmlhttp.responseText);
-  for (var i in newstats.servers) {
-    for (var s in statNames) {
-      if (statNames[s])
-        continue;
-      newstats.servers[i][s] = Math.max(0,Math.floor(significance[s]*newstats.servers[i][s])/significance[s]);
-      if (adjustMax[s])
-        maxStatValues[s] = Math.max(newstats.servers[i][s],maxStatValues[s]);
-    }
-  }
-  
-  initDerivedInfo(newstats);
-  var oldstats = stats;
-  while(drawing) {}
-  stats = newstats;
-  delete oldstats;
-  xmlReturned = true;
-}
-
-// set max and average
-function setDerivedStats(serverStats) {
-  var avgStat = 0;
-  var maxStat = 0;
-  var maxIndex = 0;
-  for (var s in statNames) {
-    if (statNames[s])
-      continue;
-    normStat = serverStats[s]/maxStatValues[s];
-    if (normStat > 0)
-      avgStat += normStat;
-    if (maxStat < normStat) {
-      maxStat = normStat;
-      maxIndex = s;
-    }
-  }
-  serverStats.allmax = Math.floor(significance.allmax*Math.min(1,maxStat))/significance.allmax;
-  serverStats.allavg = Math.floor(significance.allavg*avgStat/numNormalStats)/significance.allavg;
-  serverStats.maxStat = maxIndex;
-}
-
-function initDerivedInfo(newstats) {
-  for (var i in newstats.servers) {
-    if ('dead' in newstats.servers[i] || 'bad' in newstats.servers[i]) {
-      continue;
-    }
-    if (i >= dots.length) {
-      dots.push({'size': maxDotRadius, 'growing': false});
-    }
-    setDerivedStats(newstats.servers[i]);
-  }
-}
-
-// construct server info for hover
-function getInfo(serverStats) {
-  var extra = '<strong>' + serverStats.ip + '</strong>';
-  if ('dead' in serverStats || 'bad' in serverStats)
-    return extra;
-  extra = extra + ' (' + serverStats.hostname + ')';
-  var j = 0;
-  for (var s in statNames) {
-    if (j % 4 == 0)
-      extra = extra + '<br>\n';
-    extra = extra + '&nbsp;&nbsp;' + s + ': <strong>' + serverStats[s] + '</strong>';
-    j++;
-  }
-  extra = extra + ' (' + serverStats.maxStat + ')';
-  return extra;
-}
-
-// reload xml
-function getXML() {
-  if (xmlReturned == true) {
-    xmlReturned = false;
-    xmlhttp.open('POST',jsonurl,true);
-    xmlhttp.send();
-  }
-}
-
-// redraw
-function drawDots() {
-  requestAnimFrame(drawDots);
-  
-  var width = Math.ceil(Math.sqrt(stats.servers.length));
-  var height = Math.ceil(stats.servers.length/width);
-  var x;
-  var y;
-  var server
-  var sizeChange;
-  drawing = true;
-  for (var i in stats.servers) {
-    server = stats.servers[i];
-    x = i % width;
-    y = Math.floor(i / width);
-    if ('bad' in server || 'dead' in server) {
-      strokeDot(x,y,maxDotRadius-1,deadColor);
-      continue;
-    }
-    if (speedDisabled || Math.floor(dots[i].size) > maxDotRadius) {
-      // check for resize by the user
-      dots[i].size = maxDotRadius;
-    } else if (server[speedStatType]<=0) {
-      // if not changing size, increase to max radius
-      if (dots[i].size < maxDotRadius)
-        dots[i].size = dots[i].size + 1;
-      if (dots[i].size > maxDotRadius)
-        dots[i].size = maxDotRadius;
-    } else {
-      sizeChange = getStat(i,speedStatType);
-      if (dots[i].growing) {
-        dots[i].size = dots[i].size + sizeChange;
-        if (dots[i].size + sizeChange > maxDotRadius) {
-          dots[i].growing = false;
-        }
-      }
-      else {
-        dots[i].size = dots[i].size - sizeChange;
-        if (dots[i].size - sizeChange < minDotRadius) {
-          dots[i].growing = true;
-        }
-      }
-    }
-    drawDot(x,y,Math.floor(dots[i].size),getColor(getStat(i,colorStatType)));
-  }
-  // mousedDot shouldn't be set to an invalid dot, but stats might have changed since then
-  if (mousedDot >= 0 && mousedDot < stats.servers.length)
-    document.getElementById('vishoverinfo').innerHTML=getInfo(stats.servers[mousedDot]);
-  drawing = false;
-}
-
-// fill in a few grey dots
-function drawGrid() {
-  context.clearRect(0, 0, canvas.width, canvas.height);
-  for (var i=0, k=0; i < canvas.width; i+=dotSpacing*2,k++) {
-    for (var j=0, l=0; j < canvas.height; j+=dotSpacing*2,l++) {
-      drawDot(k,l,maxDotRadius,nullColor);
-    }
-  }
-}
-
-// fill a dot specified by indices into dot grid
-function drawDot(i,j,r,c) {
-  var x = i*dotSpacing*2 + dotSpacing;
-  var y = j*dotSpacing*2 + dotSpacing;
-  context.clearRect(x-dotSpacing, y-dotSpacing, dotSpacing*2, dotSpacing*2);
-  if (useCircles)
-    fillCircle(x,y,r-dotPadding,c);
-  else
-    fillSquare(x-r,y-r,(r-dotPadding)*2,c);
-}
-
-// stroke a dot specified by indices into dot grid
-function strokeDot(i,j,r,c) {
-  var x = i*dotSpacing*2 + dotSpacing;
-  var y = j*dotSpacing*2 + dotSpacing;
-  context.clearRect(x-dotSpacing, y-dotSpacing, dotSpacing*2, dotSpacing*2);
-  if (useCircles)
-    strokeCircle(x,y,r-dotPadding,c);
-  else
-    strokeSquare(x-r,y-r,(r-dotPadding)*2,c);
-}
-
-function getStat(dotIndex,statIndex) {
-  return Math.min(1,stats.servers[dotIndex][statIndex]/maxStatValues[statIndex]);
-}
-
-// translate color between 0 and maxObservedColor into an html color code
-function getColor(normColor) {
-  return colorPalette[Math.round((colorPalette.length-1)*normColor)];
-}
-
-function strokeCircle(x,y,r,c) {
-  context.strokeStyle = c;
-  context.lineWidth = 2;
-  context.beginPath();
-  context.arc(x,y,r,0,Math.PI*2,true);
-  context.closePath();
-  context.stroke();
-}
-
-function fillCircle(x,y,r,c) {
-  context.fillStyle = c;
-  context.beginPath();
-  context.arc(x,y,r,0,Math.PI*2,true);
-  context.closePath();
-  context.fill();
-}
-
-function strokeSquare(x,y,d,c) {
-  context.strokeStyle = c;
-  context.lineWidth = 2;
-  context.strokeRect(x,y,d,d);
-}
-
-function fillSquare(x,y,d,c) {
-  context.fillStyle = c;
-  context.fillRect(x,y,d,d);
-}
-
-// callback for shape selection
-function setShape(obj) {
-  switch (obj.selectedIndex) {
-    case 0:
-      useCircles = true;
-      break;
-    case 1:
-      useCircles = false;
-      break;
-    default:
-      useCircles = true;
-  }
-  drawGrid();
-  setState();
-}
-
-// callback for size selection
-function setSize(obj) {
-  switch (obj.selectedIndex) {
-    case 0:
-      dotSpacing = 5;
-      minDotRadius = 1;
-      break;
-    case 1:
-      dotSpacing = 10;
-      minDotRadius = 3;
-      break;
-    case 2:
-      dotSpacing = 20;
-      minDotRadius = 5;
-      break;
-    case 3:
-      dotSpacing = 40;
-      minDotRadius = 7;
-      break;
-    default:
-      dotSpacing = 10;
-      minDotRadius = 3;
-  }
-  maxDotRadius = dotSpacing - dotPadding;
-  drawGrid();
-  setState();
-}
-
-// callback for motion selection
-function setMotion(obj) {
-  if (obj.selectedIndex==0) {
-    speedDisabled = true;
-    setState();
-    return;
-  }
-  var i = 1;
-  for (var s in statNames) {
-    if (i==obj.selectedIndex) {
-      speedStatType = s;
-      break;
-    }
-    i++;
-  }
-  speedDisabled = false;
-  setState();
-}
-
-// callback for color selection
-function setColor(obj) {
-  var i = 0;
-  for (var s in statNames) {
-    if (i==obj.selectedIndex) {
-      colorStatType = s;
-      break;
-    }
-    i++;
-  }
-  setState();
-}
-
-// hide server info on mouseout
-function hideId(e) {
-  document.getElementById('vishoverinfo').style.visibility='hidden';
-}
-
-// display server info on mouseover
-function showId(e) {
-  var x;
-  var y;
-  if (e.pageX || e.pageY) {
-    x = e.pageX + main.scrollLeft;
-    y = e.pageY + main.scrollTop;
-  }
-  else {
-    // clientX and clientY unimplemented
-    return;
-  }
-  var relx = x - canvas.offsetLeft - main.offsetLeft;
-  var rely = y - canvas.offsetTop - main.offsetTop;
-  var width = Math.ceil(Math.sqrt(stats.servers.length));
-  gotDot = Math.floor(relx/(dotSpacing*2)) + width*Math.floor(rely/(dotSpacing*2));
-  mousedDot = -1;
-  if (relx < (width*dotSpacing*2) && gotDot >= 0 && gotDot < stats.servers.length) {
-    mousedDot = gotDot;
-    document.getElementById('vishoverinfo').style.left=relx+canvas.offsetLeft;
-    document.getElementById('vishoverinfo').style.top=Math.max(0,rely+canvas.offsetTop-70);
-    document.getElementById('vishoverinfo').style.visibility='visible';
-  }
-  else {
-    document.getElementById('vishoverinfo').style.visibility='hidden';
-  }
-}
-
-function setState() {
-  var url = visurl+'?shape='+(useCircles?'circles':'squares')+'&size='+(dotSpacing*2)+(speedDisabled ? '' : '&motion='+speedStatType)+'&color='+colorStatType;
-  window.history.replaceState(window.history.state,'Server Activity',url);
-}
-
-// go to server page on click
-function goToServer(e) {
-  // mousedDot shouldn't be set to an invalid dot, but stats might have changed since then
-  if (mousedDot >= 0 && mousedDot < stats.servers.length)
-    window.location = serverurl + stats.servers[mousedDot].ip;
-}
-
-window.onload = function() {
-  drawGrid();
-  drawDots();
-  getXML();
-}
-

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/bulkImport.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/bulkImport.ftl b/server/monitor/src/main/resources/templates/bulkImport.ftl
index 649a1b1..958fa69 100644
--- a/server/monitor/src/main/resources/templates/bulkImport.ftl
+++ b/server/monitor/src/main/resources/templates/bulkImport.ftl
@@ -17,12 +17,12 @@
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="masterBulkImportStatus" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>
 
       <div class="center-block">
         <table id="bulkImportStatus" class="table table-bordered table-striped table-condensed">
-         
+
         </table>
       </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/default.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/default.ftl b/server/monitor/src/main/resources/templates/default.ftl
new file mode 100644
index 0000000..77a5ce8
--- /dev/null
+++ b/server/monitor/src/main/resources/templates/default.ftl
@@ -0,0 +1,71 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<html>
+  <head>
+    <title>${title} - Accumulo ${version}</title>
+    <meta http-equiv="Content-Type" content="test/html" />
+    <meta http-equiv="Content-Script-Type" content="text/javascript" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="shortcut icon" type="image/jng" href="/resources/images/favicon.png" />
+    <script src="/resources/js/global.js" type="text/javascript"></script>
+    <script src="/resources/js/functions.js" type="text/javascript"></script>
+
+    <script src="https://code.jquery.com/jquery-2.2.4.js"></script>
+    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
+
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
+    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
+    <script language="javascript" type="text/javascript" src="/resources/js/flot/jquery.flot.js"></script>
+    <script language="javascript" type="text/javascript" src="/resources/js/flot/jquery.flot.time.js"></script>
+    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
+
+    <link rel="stylesheet" type="text/css" href="/resources/css/screen.css" media="screen" />
+    <script>
+      /**
+       * Sets up autorefresh on initial load
+       */
+      $(document).ready(function() {
+        setupAutoRefresh();
+      });
+    </script>
+    <#if js??>
+      <script src="/resources/js/${js}"></script>
+    </#if>
+    <script src="/resources/js/navbar.js"></script>
+  </head>
+
+  <body>
+    <#include "/templates/modals.ftl">
+    <div id="content-wrapper">
+      <div id="content">
+        <div id="navbar" class="navbar navbar-inverse navbar-fixed-top">
+          <#include "/templates/navbar.ftl">
+        </div>
+
+        <div id="main">
+          <#include "/templates/${template}">
+
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/gc.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/gc.ftl b/server/monitor/src/main/resources/templates/gc.ftl
index 94426c2..eb00261 100644
--- a/server/monitor/src/main/resources/templates/gc.ftl
+++ b/server/monitor/src/main/resources/templates/gc.ftl
@@ -13,11 +13,11 @@
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
--->    
+-->
       <div><h3>${title}</h3></div>
       <div id="gcBanner"></div>
       <div class="center-block">
         <table id="gcActivity" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/header.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/header.ftl b/server/monitor/src/main/resources/templates/header.ftl
deleted file mode 100644
index b69af52..0000000
--- a/server/monitor/src/main/resources/templates/header.ftl
+++ /dev/null
@@ -1,21 +0,0 @@
-<#--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-      <div id="headertitle">
-        <ul class="nav nav-pills">
-          <li><a href="/">${instance_name}</a></li>
-        </ul>
-      </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/index.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/index.ftl b/server/monitor/src/main/resources/templates/index.ftl
deleted file mode 100644
index 773c4c2..0000000
--- a/server/monitor/src/main/resources/templates/index.ftl
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<html>
-  <head>
-    <title>${title} - Accumulo ${version}</title>
-    <meta http-equiv="Content-Type" content="test/html" />
-    <meta http-equiv="Content-Script-Type" content="text/javascript" />
-    <meta http-equiv="Content-Style-Type" content="text/css" />
-    <link rel="shortcut icon" type="image/jng" href="/resources/favicon.png" />
-    <script src="/resources/global.js" type="text/javascript"></script>
-    <script src="/resources/functions.js" type="text/javascript"></script>
-    
-    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
-    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
-    
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
-
-    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
-    <script language="javascript" type="text/javascript" src="/resources/flot/jquery.flot.js"></script>
-    <script language="javascript" type="text/javascript" src="/resources/flot/jquery.flot.time.js"></script>
-    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
-    
-    <link rel="stylesheet" type="text/css" href="/resources/screen.css" media="screen" />
-    <script>
-      /**
-       * Sets up autorefresh on initial load
-       */
-      $(document).ready(function() {
-        setupAutoRefresh();
-      });
-    </script>
-    <#if js??>
-      <script src="/resources/${js}"></script>
-    </#if>
-    <script src="/resources/sidebar.js"></script>
-  </head>
-
-  <body>
-    <#include "/templates/modals.ftl">
-    <div id="content-wrapper">
-      <div id="content">
-        <div id="sidebar" class="navbar navbar-inverse navbar-fixed-top">
-          <!--<#include "/templates/header.ftl">-->
-          <#include "/templates/sidebar.ftl">
-        </div>
-
-        <div id="main">
-          <#include "/templates/${template}">
-          
-        </div>
-      </div>
-    </div>
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/listType.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/listType.ftl b/server/monitor/src/main/resources/templates/listType.ftl
index caae21c..6f7f400 100644
--- a/server/monitor/src/main/resources/templates/listType.ftl
+++ b/server/monitor/src/main/resources/templates/listType.ftl
@@ -23,7 +23,7 @@
           refreshListType();
         });
       </script>
-           
+
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="trace" class="table table-bordered table-striped table-condensed">

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/log.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/log.ftl b/server/monitor/src/main/resources/templates/log.ftl
index 9bebd24..2109934 100644
--- a/server/monitor/src/main/resources/templates/log.ftl
+++ b/server/monitor/src/main/resources/templates/log.ftl
@@ -13,10 +13,10 @@
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
--->       
+-->
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="logTable" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/master.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/master.ftl b/server/monitor/src/main/resources/templates/master.ftl
index 128b695..72c9cb0 100644
--- a/server/monitor/src/main/resources/templates/master.ftl
+++ b/server/monitor/src/main/resources/templates/master.ftl
@@ -18,12 +18,12 @@
       <div id="masterBanner"></div>
       <div class="center-block">
         <table id="masterStatus" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
         <table id="recoveryList" class="table table-bordered table-striped table-condensed">
 
         </table>
       </div>
-      <br />
-      <script src="/resources/${tablesJs}"></script>
-      <#include "/templates/${tablesTemplate}">
\ No newline at end of file
+      <br>
+      <script src="/resources/js/${tablesJs}"></script>
+      <#include "/templates/${tablesTemplate}">

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/modals.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/modals.ftl b/server/monitor/src/main/resources/templates/modals.ftl
index 49cd390..d2205c0 100644
--- a/server/monitor/src/main/resources/templates/modals.ftl
+++ b/server/monitor/src/main/resources/templates/modals.ftl
@@ -17,7 +17,6 @@
     <!-- Modal -->
     <div id="aboutModal" data-target="#aboutModal" class="modal fade" role="dialog">
       <div class="modal-dialog" role="document">
-        
         <!-- Modal content -->
         <div class="modal-content">
           <div class="modal-header">
@@ -36,4 +35,4 @@
           </div>
         </div>
       </div>
-    </div>
\ No newline at end of file
+    </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/navbar.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/navbar.ftl b/server/monitor/src/main/resources/templates/navbar.ftl
new file mode 100644
index 0000000..6cd2beb
--- /dev/null
+++ b/server/monitor/src/main/resources/templates/navbar.ftl
@@ -0,0 +1,85 @@
+<#--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+      <div class="container-fluid">
+        <!-- toggle -->
+        <div class="navbar-header">
+          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav-items" aria-expanded="false">
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <a class="navbar-brand" id="headertitle" href="/">${instance_name}</a>
+        </div>
+        <!-- Nav links -->
+        <div class="collapse navbar-collapse" id="nav-items">
+          <ul class="nav navbar-nav navbar-right">
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"><span id="statusNotification" class="icon-dot normal"></span>&nbsp;Servers&nbsp;<span class="caret"></span>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/master"><span id="masterStatusNotification" class="icon-dot normal"></span>&nbsp;Master&nbsp;Server&nbsp;</a></li>
+                <li><a href="/tservers"><span id="serverStatusNotification" class="icon-dot normal"></span>&nbsp;Tablet&nbsp;Servers&nbsp;</a></li>
+                <li><a href="/gc"><span id="gcStatusNotification" class="icon-dot normal"></span>&nbsp;Garbage&nbsp;collector&nbsp;</a></li>
+              </ul>
+            </li>
+            <li><a href="/tables">Tables</a></li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
+                Activity <span class="caret"></span>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/scans">Active&nbsp;Scans</a></li>
+                <li><a href="/bulkImports">Bulk&nbsp;Imports</a></li>
+                <li><a href="/vis">Server&nbsp;Activity</a></li>
+                <li><a href="/replication">Replication</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Debug&nbsp;<span id="errorsNotification" class="badge"></span><span class="caret"></span>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/trace/summary?minutes=10">Recent&nbsp;Traces</a></li>
+                <li><a href="/log">Recent&nbsp;Logs&nbsp;<span id="recentLogsNotifications" class="badge"></span></a></li>
+                <li><a href="/problems">Table&nbsp;Problems&nbsp;<span id="tableProblemsNotifications" class="badge"></span></a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
+                API <span class="caret"></span>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a href="/rest">XML</a></li>
+                <li><a href="/rest/tservers">JSON</a></li>
+              </ul>
+            </li>
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
+                <span class="glyphicon glyphicon-option-vertical"></span>
+              </a>
+              <ul class="dropdown-menu">
+                <li><a class="auto-refresh" style="cursor:pointer">Auto-Refresh</a></li>
+                <li><a data-toggle="modal" href="#aboutModal">About</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
+      <script>
+        // Obtain the current time
+        document.getElementById('currentDate').innerHTML = Date();
+      </script>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/overview.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/overview.ftl b/server/monitor/src/main/resources/templates/overview.ftl
index 0d7233c..8d95ba0 100644
--- a/server/monitor/src/main/resources/templates/overview.ftl
+++ b/server/monitor/src/main/resources/templates/overview.ftl
@@ -17,74 +17,74 @@
       <div><h3>${title}</h3></div>
       <br>
       <div class="center-block">
-        <table class="overview-table">
-          <tr>
-            <td class="noborder" id="master"></td>
-            <td class="noborder" id="zookeeper"></td>
-          </tr>
-        </table>
+        <div class="container">
+          <div class="row">
+            <div class="col-md-6" id="master"></div>
+            <div class="col-md-6" id="zookeeper"></div>
+          </div>
+        </div>
       </div>
       <div class="center-block">
-        <table class="overview-table">
-          <tr>
-            <td>
+        <div class="container">
+          <div class="row">
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Ingest (Entries/s)</div>
               <div id="ingest_entries" style="width:100%;height:200px;"></div>
-            </td>
-            <td>
+            </div>
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Scan (Entries/s)</div>
               <div id="scan_entries" style="width:100%;height:200px;"></div>
-            </td>
-          </tr>
-          <tr>
-            <td>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Ingest (MB/s)</div>
               <div id="ingest_mb" style="width:100%;height:200px;"></div>
-            </td>
-            <td>
+            </div>
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Scan (MB/s)</div>
               <div id="scan_mb" style="width:100%;height:200px;"></div>
-            </td>
-          </tr>
-          <tr>
-            <td>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Load Average</div>
               <div id="load_avg" style="width:100%;height:200px;"></div>
-            </td>
-            <td>
+            </div>
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Seeks</div>
               <div id="seeks" style="width:100%;height:200px;"></div>
-            </td>
-          </tr>
-          <tr>
-            <td>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Minor Compactions</div>
               <div id="minor" style="width:100%;height:200px;"></div>
-            </td>
-            <td>
+            </div>
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Major Compactions</div>
               <div id="major" style="width:100%;height:200px;"></div>
-            </td>
-          </tr>
-          <tr>
-            <td>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Index Cache Hit Rate</div>
               <div id="index_cache" style="width:100%;height:200px;"></div>
-            </td>
-            <td>
+            </div>
+            <div class="col-md-6">
               <br>
               <div class="plotHeading">Data Cache Hit Rate</div>
               <div id="data_cache" style="width:100%;height:200px;"></div>
-            </td>
-          </tr>
-        </table>
+            </div>
+          </div>
+        </div>
       </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/problems.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/problems.ftl b/server/monitor/src/main/resources/templates/problems.ftl
index bdbb4f6..82b1a19 100644
--- a/server/monitor/src/main/resources/templates/problems.ftl
+++ b/server/monitor/src/main/resources/templates/problems.ftl
@@ -28,9 +28,9 @@
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="problemSummary" class="table table-bordered table-striped table-condensed">
-        
+
         </table>
         <table id="problemDetails" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/replication.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/replication.ftl b/server/monitor/src/main/resources/templates/replication.ftl
index 3c2dff9..13856fa 100644
--- a/server/monitor/src/main/resources/templates/replication.ftl
+++ b/server/monitor/src/main/resources/templates/replication.ftl
@@ -13,10 +13,10 @@
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
--->       
+-->
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="replicationStats" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/server.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/server.ftl b/server/monitor/src/main/resources/templates/server.ftl
index 53d6b11..3066dd1 100644
--- a/server/monitor/src/main/resources/templates/server.ftl
+++ b/server/monitor/src/main/resources/templates/server.ftl
@@ -29,21 +29,21 @@
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="tServerDetail" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>
       <div class="center-block">
         <table id="opHistoryDetails" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>
       <div class="center-block">
         <table id="currentTabletOps" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>
       <div class="center-block">
         <table id="perTabletResults" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
-      </div>
\ No newline at end of file
+      </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/show.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/show.ftl b/server/monitor/src/main/resources/templates/show.ftl
index e856729..95912b3 100644
--- a/server/monitor/src/main/resources/templates/show.ftl
+++ b/server/monitor/src/main/resources/templates/show.ftl
@@ -25,10 +25,12 @@
          */
         $(document).ready(function() {
           createHeader('${id}');
-          
           refreshTraceShow();
+
+          // Create tooltip for table column information
+          $(document).tooltip();
         });
-        
+
         /**
          * Toggles row
          *
@@ -42,7 +44,7 @@
             elt.style.display='none';
           }
         }
-        
+
         /**
          * Selects where to display the row
          */
@@ -60,6 +62,6 @@
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="trace" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
-      </div>
\ No newline at end of file
+      </div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/sidebar.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/sidebar.ftl b/server/monitor/src/main/resources/templates/sidebar.ftl
deleted file mode 100644
index 6cd2beb..0000000
--- a/server/monitor/src/main/resources/templates/sidebar.ftl
+++ /dev/null
@@ -1,85 +0,0 @@
-<#--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-      <div class="container-fluid">
-        <!-- toggle -->
-        <div class="navbar-header">
-          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav-items" aria-expanded="false">
-            <span class="sr-only">Toggle navigation</span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-          </button>
-          <a class="navbar-brand" id="headertitle" href="/">${instance_name}</a>
-        </div>
-        <!-- Nav links -->
-        <div class="collapse navbar-collapse" id="nav-items">
-          <ul class="nav navbar-nav navbar-right">
-            <li class="dropdown">
-              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"><span id="statusNotification" class="icon-dot normal"></span>&nbsp;Servers&nbsp;<span class="caret"></span>
-              </a>
-              <ul class="dropdown-menu">
-                <li><a href="/master"><span id="masterStatusNotification" class="icon-dot normal"></span>&nbsp;Master&nbsp;Server&nbsp;</a></li>
-                <li><a href="/tservers"><span id="serverStatusNotification" class="icon-dot normal"></span>&nbsp;Tablet&nbsp;Servers&nbsp;</a></li>
-                <li><a href="/gc"><span id="gcStatusNotification" class="icon-dot normal"></span>&nbsp;Garbage&nbsp;collector&nbsp;</a></li>
-              </ul>
-            </li>
-            <li><a href="/tables">Tables</a></li>
-            <li class="dropdown">
-              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
-                Activity <span class="caret"></span>
-              </a>
-              <ul class="dropdown-menu">
-                <li><a href="/scans">Active&nbsp;Scans</a></li>
-                <li><a href="/bulkImports">Bulk&nbsp;Imports</a></li>
-                <li><a href="/vis">Server&nbsp;Activity</a></li>
-                <li><a href="/replication">Replication</a></li>
-              </ul>
-            </li>
-            <li class="dropdown">
-              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Debug&nbsp;<span id="errorsNotification" class="badge"></span><span class="caret"></span>
-              </a>
-              <ul class="dropdown-menu">
-                <li><a href="/trace/summary?minutes=10">Recent&nbsp;Traces</a></li>
-                <li><a href="/log">Recent&nbsp;Logs&nbsp;<span id="recentLogsNotifications" class="badge"></span></a></li>
-                <li><a href="/problems">Table&nbsp;Problems&nbsp;<span id="tableProblemsNotifications" class="badge"></span></a></li>
-              </ul>
-            </li>
-            <li class="dropdown">
-              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
-                API <span class="caret"></span>
-              </a>
-              <ul class="dropdown-menu">
-                <li><a href="/rest">XML</a></li>
-                <li><a href="/rest/tservers">JSON</a></li>
-              </ul>
-            </li>
-            <li class="dropdown">
-              <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
-                <span class="glyphicon glyphicon-option-vertical"></span>
-              </a>
-              <ul class="dropdown-menu">
-                <li><a class="auto-refresh" style="cursor:pointer">Auto-Refresh</a></li>
-                <li><a data-toggle="modal" href="#aboutModal">About</a></li>
-              </ul>
-            </li>
-          </ul>
-        </div>
-      </div>
-      <script>
-        // Obtain the current time
-        document.getElementById('currentDate').innerHTML = Date();
-      </script>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/summary.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/summary.ftl b/server/monitor/src/main/resources/templates/summary.ftl
index 02b69d0..583753e 100644
--- a/server/monitor/src/main/resources/templates/summary.ftl
+++ b/server/monitor/src/main/resources/templates/summary.ftl
@@ -21,13 +21,15 @@
         $(document).ready(function() {
           createHeader('${minutes}');
           refreshSummary();
+
+          // Create tooltip for table column information
+          $(document).tooltip();
         });
       </script>
-            
+
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="traceSummary" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>
-

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/table.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/table.ftl b/server/monitor/src/main/resources/templates/table.ftl
index 0f7c701..52a22b7 100644
--- a/server/monitor/src/main/resources/templates/table.ftl
+++ b/server/monitor/src/main/resources/templates/table.ftl
@@ -21,6 +21,9 @@
         $(document).ready(function() {
           createHeader('${table}', '${tableID}');
           refreshTable();
+
+          // Create tooltip for table column information
+          $(document).tooltip();
         });
       </script>
       <div><h3>${title}</h3></div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/tables.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/tables.ftl b/server/monitor/src/main/resources/templates/tables.ftl
index fcdc221..a621b65 100644
--- a/server/monitor/src/main/resources/templates/tables.ftl
+++ b/server/monitor/src/main/resources/templates/tables.ftl
@@ -24,6 +24,9 @@
           <#if tablesJs??>
             toggleMaster(true);
           </#if>
+
+          // Create tooltip for table column information
+          $(document).tooltip();
         });
       </script>
       <div><h3>${tablesTitle}</h3></div>

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/tservers.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/tservers.ftl b/server/monitor/src/main/resources/templates/tservers.ftl
index f38fc50..115a20c 100644
--- a/server/monitor/src/main/resources/templates/tservers.ftl
+++ b/server/monitor/src/main/resources/templates/tservers.ftl
@@ -17,13 +17,12 @@
       <div><h3>${title}</h3></div>
       <div class="center-block">
         <table id="badtservers" class="table table-bordered table-striped table-condensed">
-        
+
         </table>
         <table id="deadtservers" class="table table-bordered table-striped table-condensed">
-        
+
         </table>
         <table id="tservers" class="table table-bordered table-striped table-condensed">
-          
+
         </table>
       </div>
-        

http://git-wip-us.apache.org/repos/asf/accumulo/blob/680b3a21/server/monitor/src/main/resources/templates/vis.ftl
----------------------------------------------------------------------
diff --git a/server/monitor/src/main/resources/templates/vis.ftl b/server/monitor/src/main/resources/templates/vis.ftl
index 84f8704..3b504c7 100644
--- a/server/monitor/src/main/resources/templates/vis.ftl
+++ b/server/monitor/src/main/resources/templates/vis.ftl
@@ -35,7 +35,7 @@
           </div>
         </div>
       </div>
-      
+
       <script type="text/javascript">
         /**
          * Creates initial visualization table, passes the shape, size, motion, and color from the template
@@ -48,11 +48,11 @@
           $.ajaxSetup({
             async: true
           });
-          
+
           setStats();
           setOptions('${shape}', '${size}', '${motion}', '${color}');
           setState();
-          
+
           drawGrid();
           getXML();
           refresh();
@@ -62,11 +62,11 @@
       <script type="text/javascript">
         // Populates variables to be used in the visualization
         var numCores = 8;
-        var jsonurl = '/rest/json';
+        var jsonurl = '/rest/tservers';
         var visurl = '/vis';
         var serverurl = '/tservers?s=';
 
         var numNormalStats = 8;
       </script>
-      
-      <script src="/resources/vis.js"></script>
+
+      <script src="/resources/js/vis.js"></script>


Mime
View raw message