You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by de...@apache.org on 2017/04/06 20:41:56 UTC

[12/15] incubator-trafficcontrol git commit: adds offline reason popover to all server tables

adds offline reason popover to all server tables


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/8b7a49fa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/8b7a49fa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/8b7a49fa

Branch: refs/heads/master
Commit: 8b7a49fa3d0b51638aa0a20d82103458371dcf60
Parents: 40b90a5
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Tue Mar 14 21:51:17 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../TableCacheGroupServersController.js         |  8 +++--
 .../table.cacheGroupServers.tpl.html            |  5 ++-
 .../cdnServers/TableCDNServersController.js     |  8 +++--
 .../table/cdnServers/table.cdnServers.tpl.html  |  5 ++-
 .../TableDeliveryServiceServersController.js    |  8 +++--
 .../table.deliveryServiceServers.tpl.html       |  5 ++-
 .../TablePhysLocationServersController.js       |  8 +++--
 .../table.physLocationServers.tpl.html          |  5 ++-
 .../TableProfileServersController.js            |  8 +++--
 .../table.profileServers.tpl.html               |  5 ++-
 .../table/servers/TableServersController.js     |  8 +++--
 .../table/servers/table.servers.tpl.html        |  5 ++-
 .../TableStatusServersController.js             |  8 +++--
 .../statusServers/table.statusServers.tpl.html  |  5 ++-
 .../typeServers/TableTypeServersController.js   |  8 +++--
 .../typeServers/table.typeServers.tpl.html      |  5 ++-
 .../app/src/common/service/utils/ServerUtils.js | 33 ++++++++++++++++++++
 .../ui/app/src/common/service/utils/index.js    |  1 +
 18 files changed, 114 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
index 18740a3..9a97660 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $state, $uibModal, cacheGroupService, locationUtils) {
+var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $state, $uibModal, cacheGroupService, locationUtils, serverUtils) {
 
 	$scope.cacheGroup = cacheGroup;
 
@@ -101,6 +101,10 @@ var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $s
 
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	angular.element(document).ready(function () {
 		$('#serversTable').dataTable({
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
@@ -110,5 +114,5 @@ var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $s
 
 };
 
-TableCacheGroupsServersController.$inject = ['cacheGroup', 'servers', '$scope', '$state', '$uibModal', 'cacheGroupService', 'locationUtils'];
+TableCacheGroupsServersController.$inject = ['cacheGroup', 'servers', '$scope', '$state', '$uibModal', 'cacheGroupService', 'locationUtils', 'serverUtils'];
 module.exports = TableCacheGroupsServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
index b146972..ba792b6 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
@@ -65,7 +65,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
index 1c3d1e9..787bf37 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableCDNServersController = function(cdn, servers, $scope, $state, locationUtils, cdnService) {
+var TableCDNServersController = function(cdn, servers, $scope, $state, locationUtils, serverUtils, cdnService) {
 
 	$scope.cdn = cdn;
 
@@ -49,6 +49,10 @@ var TableCDNServersController = function(cdn, servers, $scope, $state, locationU
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -60,5 +64,5 @@ var TableCDNServersController = function(cdn, servers, $scope, $state, locationU
 
 };
 
-TableCDNServersController.$inject = ['cdn', 'servers', '$scope', '$state', 'locationUtils', 'cdnService'];
+TableCDNServersController.$inject = ['cdn', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils', 'cdnService'];
 module.exports = TableCDNServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
index 9189f43..0b211e5 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
@@ -65,7 +65,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
index c8f082c..805fbea 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableDeliveryServiceServersController = function(deliveryService, servers, $scope, $state, locationUtils) {
+var TableDeliveryServiceServersController = function(deliveryService, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.deliveryService = deliveryService;
 
@@ -35,6 +35,10 @@ var TableDeliveryServiceServersController = function(deliveryService, servers, $
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -46,5 +50,5 @@ var TableDeliveryServiceServersController = function(deliveryService, servers, $
 
 };
 
-TableDeliveryServiceServersController.$inject = ['deliveryService', 'servers', '$scope', '$state', 'locationUtils'];
+TableDeliveryServiceServersController.$inject = ['deliveryService', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableDeliveryServiceServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
index e3a9481..91feddc 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
@@ -65,7 +65,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js
index eb14902..3af755c 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TablePhysLocationServersController = function(physLocation, servers, $scope, $state, locationUtils) {
+var TablePhysLocationServersController = function(physLocation, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.physLocation = physLocation;
 
@@ -31,6 +31,10 @@ var TablePhysLocationServersController = function(physLocation, servers, $scope,
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TablePhysLocationServersController = function(physLocation, servers, $scope,
 
 };
 
-TablePhysLocationServersController.$inject = ['physLocation', 'servers', '$scope', '$state', 'locationUtils'];
+TablePhysLocationServersController.$inject = ['physLocation', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TablePhysLocationServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html
index bef4077..7e99de4 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js
index 4fd5f69..f84699a 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableProfileServersController = function(profile, servers, $scope, $state, locationUtils) {
+var TableProfileServersController = function(profile, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.profile = profile;
 
@@ -31,6 +31,10 @@ var TableProfileServersController = function(profile, servers, $scope, $state, l
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TableProfileServersController = function(profile, servers, $scope, $state, l
 
 };
 
-TableProfileServersController.$inject = ['profile', 'servers', '$scope', '$state', 'locationUtils'];
+TableProfileServersController.$inject = ['profile', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableProfileServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html
index e94b619..fcf64c7 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
index b1c966e..bb98d28 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableServersController = function(servers, $scope, $state, locationUtils) {
+var TableServersController = function(servers, $scope, $state, locationUtils, serverUtils) {
 
     $scope.servers = servers;
 
@@ -37,6 +37,10 @@ var TableServersController = function(servers, $scope, $state, locationUtils) {
         $state.reload(); // reloads all the resolves for the view
     };
 
+    $scope.isOffline = serverUtils.isOffline;
+
+    $scope.offlineReason = serverUtils.offlineReason;
+
     angular.element(document).ready(function () {
         $('#serversTable').dataTable({
             "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
@@ -46,5 +50,5 @@ var TableServersController = function(servers, $scope, $state, locationUtils) {
 
 };
 
-TableServersController.$inject = ['servers', '$scope', '$state', 'locationUtils'];
+TableServersController.$inject = ['servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
index 137f046..c8d793e 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
@@ -71,7 +71,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js
index 8ba4daf..dd06a76 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableStatusServersController = function(status, servers, $scope, $state, locationUtils) {
+var TableStatusServersController = function(status, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.status = status;
 
@@ -31,6 +31,10 @@ var TableStatusServersController = function(status, servers, $scope, $state, loc
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TableStatusServersController = function(status, servers, $scope, $state, loc
 
 };
 
-TableStatusServersController.$inject = ['status', 'servers', '$scope', '$state', 'locationUtils'];
+TableStatusServersController.$inject = ['status', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableStatusServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html
index 815d82f..9659649 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js
index 786344e..30f1fa4 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableTypeServersController = function(type, servers, $scope, $state, locationUtils) {
+var TableTypeServersController = function(type, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.type = type;
 
@@ -31,6 +31,10 @@ var TableTypeServersController = function(type, servers, $scope, $state, locatio
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TableTypeServersController = function(type, servers, $scope, $state, locatio
 
 };
 
-TableTypeServersController.$inject = ['type', 'servers', '$scope', '$state', 'locationUtils'];
+TableTypeServersController.$inject = ['type', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableTypeServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html
index 99ab56a..b15c246 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js b/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js
new file mode 100644
index 0000000..a4d2c4c
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+var ServerUtils = function() {
+
+	this.isOffline = function(status) {
+		return (status == 'OFFLINE' || status == 'ADMIN_DOWN');
+	};
+
+	this.offlineReason = function(server) {
+		return (server.offlineReason) ? server.offlineReason : 'None';
+	};
+
+};
+
+ServerUtils.$inject = [];
+module.exports = ServerUtils;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/service/utils/index.js b/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
index c9d1977..82f5bb7 100644
--- a/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
+++ b/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
@@ -20,4 +20,5 @@
 module.exports = angular.module('trafficOps.utils', [])
     .service('formUtils', require('./FormUtils'))
     .service('locationUtils', require('./LocationUtils'))
+    .service('serverUtils', require('./serverUtils'))
     .service('stringUtils', require('./StringUtils'));