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 2018/04/18 15:42:21 UTC

[incubator-trafficcontrol] branch master updated: adds chart link to each ds table

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

dewrich pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 5bcd8a5  adds chart link to each ds table
5bcd8a5 is described below

commit 5bcd8a54a75b6a1ee101b1ca3af8197f74d2b6e4
Author: Jeremy Mitchell <mi...@gmail.com>
AuthorDate: Tue Apr 17 08:59:19 2018 -0600

    adds chart link to each ds table
---
 .../form/deliveryService/FormDeliveryServiceController.js  | 13 ++++---------
 .../TableCDNDeliveryServicesController.js                  | 11 +++++++++--
 .../cdnDeliveryServices/table.cdnDeliveryServices.tpl.html |  4 ++++
 .../deliveryServices/TableDeliveryServicesController.js    | 11 +++++++++--
 .../table/deliveryServices/table.deliveryServices.tpl.html |  4 ++++
 .../TableProfileDeliveryServicesController.js              | 11 +++++++++--
 .../table.profileDeliveryServices.tpl.html                 |  5 ++++-
 .../TableServerDeliveryServicesController.js               | 12 +++++++++---
 .../table.serverDeliveryServices.tpl.html                  |  7 +++++--
 .../TableTenantDeliveryServicesController.js               | 11 +++++++++--
 .../table.tenantDeliveryServices.tpl.html                  |  4 ++++
 .../TableTypeDeliveryServicesController.js                 | 11 +++++++++--
 .../table.typeDeliveryServices.tpl.html                    |  4 ++++
 .../TableUserDeliveryServicesController.js                 | 12 +++++++++---
 .../table.userDeliveryServices.tpl.html                    |  7 +++++--
 .../app/src/common/service/utils/DeliveryServiceUtils.js   | 14 ++++++++++++--
 traffic_portal/app/src/common/service/utils/ServerUtils.js |  4 +++-
 17 files changed, 112 insertions(+), 33 deletions(-)

diff --git a/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js b/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
index 834949b..377c934 100644
--- a/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
+++ b/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormDeliveryServiceController = function(deliveryService, dsCurrent, type, types, $scope, $location, $uibModal, $window, formUtils, locationUtils, tenantUtils, cdnService, profileService, tenantService, propertiesModel) {
+var FormDeliveryServiceController = function(deliveryService, dsCurrent, type, types, $scope, $location, $uibModal, $window, formUtils, locationUtils, tenantUtils, deliveryServiceUtils, cdnService, profileService, tenantService, propertiesModel) {
 
     var getCDNs = function() {
         cdnService.getCDNs()
@@ -49,6 +49,8 @@ var FormDeliveryServiceController = function(deliveryService, dsCurrent, type, t
 
     $scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
 
+    $scope.openCharts = deliveryServiceUtils.openCharts;
+
     $scope.dsRequestsEnabled = propertiesModel.properties.dsRequests.enabled;
 
 	$scope.edgeFQDNs = function(ds) {
@@ -200,13 +202,6 @@ var FormDeliveryServiceController = function(deliveryService, dsCurrent, type, t
         return '-'.repeat(tenant.level) + ' ' + tenant.name;
     };
 
-    $scope.openCharts = function(ds) {
-        $window.open(
-            propertiesModel.properties.deliveryServices.charts.baseUrl + ds.xmlId,
-            '_blank'
-        );
-    };
-
     $scope.clone = function(ds) {
         var params = {
             title: 'Clone Delivery Service: ' + ds.xmlId,
@@ -286,5 +281,5 @@ var FormDeliveryServiceController = function(deliveryService, dsCurrent, type, t
 
 };
 
-FormDeliveryServiceController.$inject = ['deliveryService', 'dsCurrent', 'type', 'types', '$scope', '$location', '$uibModal', '$window', 'formUtils', 'locationUtils', 'tenantUtils', 'cdnService', 'profileService', 'tenantService', 'propertiesModel'];
+FormDeliveryServiceController.$inject = ['deliveryService', 'dsCurrent', 'type', 'types', '$scope', '$location', '$uibModal', '$window', 'formUtils', 'locationUtils', 'tenantUtils', 'deliveryServiceUtils', 'cdnService', 'profileService', 'tenantService', 'propertiesModel'];
 module.exports = FormDeliveryServiceController;
diff --git a/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.js b/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.js
index 74d477b..1e29df4 100644
--- a/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.js
+++ b/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableCDNDeliveryServicesController = function(cdn, deliveryServices, $scope, $state, dateUtils, deliveryServiceUtils,  locationUtils) {
+var TableCDNDeliveryServicesController = function(cdn, deliveryServices, $scope, $state, dateUtils, deliveryServiceUtils, locationUtils, propertiesModel) {
 
 	var protocols = deliveryServiceUtils.protocols;
 
@@ -27,6 +27,10 @@ var TableCDNDeliveryServicesController = function(cdn, deliveryServices, $scope,
 
 	$scope.deliveryServices = deliveryServices;
 
+	$scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
+
+	$scope.openCharts = deliveryServiceUtils.openCharts;
+
 	$scope.protocol = function(ds) {
 		return protocols[ds.protocol];
 	};
@@ -51,11 +55,14 @@ var TableCDNDeliveryServicesController = function(cdn, deliveryServices, $scope,
 		$('#deliveryServicesTable').dataTable({
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
 			"iDisplayLength": 25,
+			"columnDefs": [
+				{ 'orderable': false, 'targets': 12 }
+			],
 			"aaSorting": []
 		});
 	});
 
 };
 
-TableCDNDeliveryServicesController.$inject = ['cdn', 'deliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils'];
+TableCDNDeliveryServicesController.$inject = ['cdn', 'deliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils', 'propertiesModel'];
 module.exports = TableCDNDeliveryServicesController;
diff --git a/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html b/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
index 8bde966..1ef942e 100644
--- a/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
+++ b/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
@@ -46,6 +46,7 @@ under the License.
                 <th>Signing Algorithm</th>
                 <th>Qstring Handling</th>
                 <th>Last Updated</th>
+                <th style="text-align: right;">Actions</th>
             </tr>
             </thead>
             <tbody>
@@ -62,6 +63,9 @@ under the License.
                 <td data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
                 <td data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
                 <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$" data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
+                <td style="text-align: right;">
+                    <span ng-if="showChartsButton"><a class="link action-link" title="View Charts" ng-click="openCharts(ds, $event)"><i class="fa fa-sm fa-bar-chart"></i></a></span>
+                </td>
             </tr>
             </tbody>
         </table>
diff --git a/traffic_portal/app/src/common/modules/table/deliveryServices/TableDeliveryServicesController.js b/traffic_portal/app/src/common/modules/table/deliveryServices/TableDeliveryServicesController.js
index ada2c39..558d28f 100644
--- a/traffic_portal/app/src/common/modules/table/deliveryServices/TableDeliveryServicesController.js
+++ b/traffic_portal/app/src/common/modules/table/deliveryServices/TableDeliveryServicesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableDeliveryServicesController = function(deliveryServices, $scope, $state, $location, $uibModal, dateUtils, deliveryServiceUtils, locationUtils) {
+var TableDeliveryServicesController = function(deliveryServices, $scope, $state, $location, $uibModal, dateUtils, deliveryServiceUtils, locationUtils, propertiesModel) {
 
     var protocols = deliveryServiceUtils.protocols;
 
@@ -30,6 +30,10 @@ var TableDeliveryServicesController = function(deliveryServices, $scope, $state,
 
     $scope.deliveryServices = deliveryServices;
 
+    $scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
+
+    $scope.openCharts = deliveryServiceUtils.openCharts;
+
     $scope.getRelativeTime = dateUtils.getRelativeTime;
 
     $scope.editDeliveryService = function(ds) {
@@ -111,11 +115,14 @@ var TableDeliveryServicesController = function(deliveryServices, $scope, $state,
         $('#deliveryServicesTable').dataTable({
             "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
             "iDisplayLength": 25,
+            "columnDefs": [
+                { 'orderable': false, 'targets': 12 }
+            ],
             "aaSorting": []
         });
     });
 
 };
 
-TableDeliveryServicesController.$inject = ['deliveryServices', '$scope', '$state', '$location', '$uibModal', 'dateUtils', 'deliveryServiceUtils', 'locationUtils'];
+TableDeliveryServicesController.$inject = ['deliveryServices', '$scope', '$state', '$location', '$uibModal', 'dateUtils', 'deliveryServiceUtils', 'locationUtils', 'propertiesModel'];
 module.exports = TableDeliveryServicesController;
diff --git a/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html b/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
index 91ba83e..af43709 100644
--- a/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
+++ b/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
@@ -54,6 +54,7 @@ under the License.
                     <th>Signing Algorithm</th>
                     <th>Qstring Handling</th>
                     <th>Last Updated</th>
+                    <th style="text-align: right;">Actions</th>
                 </tr>
             </thead>
             <tbody>
@@ -70,6 +71,9 @@ under the License.
                     <td data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
                     <td data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
                     <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$" data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
+                    <td style="text-align: right;">
+                        <span ng-if="showChartsButton"><a class="link action-link" title="View Charts" ng-click="openCharts(ds, $event)"><i class="fa fa-sm fa-bar-chart"></i></a></span>
+                    </td>
                 </tr>
             </tbody>
         </table>
diff --git a/traffic_portal/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.js b/traffic_portal/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.js
index c0760aa..96f581b 100644
--- a/traffic_portal/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.js
+++ b/traffic_portal/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableProfileDeliveryServicesController = function(profile, deliveryServices, $scope, $state, dateUtils, deliveryServiceUtils, locationUtils) {
+var TableProfileDeliveryServicesController = function(profile, deliveryServices, $scope, $state, dateUtils, deliveryServiceUtils, locationUtils, propertiesModel) {
 
 	var protocols = deliveryServiceUtils.protocols;
 
@@ -27,6 +27,10 @@ var TableProfileDeliveryServicesController = function(profile, deliveryServices,
 
 	$scope.deliveryServices = deliveryServices;
 
+	$scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
+
+	$scope.openCharts = deliveryServiceUtils.openCharts;
+
 	$scope.protocol = function(ds) {
 		return protocols[ds.protocol];
 	};
@@ -51,11 +55,14 @@ var TableProfileDeliveryServicesController = function(profile, deliveryServices,
 		$('#deliveryServicesTable').dataTable({
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
 			"iDisplayLength": 25,
+			"columnDefs": [
+				{ 'orderable': false, 'targets': 12 }
+			],
 			"aaSorting": []
 		});
 	});
 
 };
 
-TableProfileDeliveryServicesController.$inject = ['profile', 'deliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils'];
+TableProfileDeliveryServicesController.$inject = ['profile', 'deliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils', 'propertiesModel'];
 module.exports = TableProfileDeliveryServicesController;
diff --git a/traffic_portal/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html b/traffic_portal/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html
index d8b49b0..61cf502 100644
--- a/traffic_portal/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html
+++ b/traffic_portal/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html
@@ -40,13 +40,13 @@ under the License.
                 <th>Active</th>
                 <th>Type</th>
                 <th>Protocol</th>
-                <th>Profile</th>
                 <th>CDN</th>
                 <th>IPv6 Enabled</th>
                 <th>DSCP</th>
                 <th>Signing Algorithm</th>
                 <th>Qstring Handling</th>
                 <th>Last Updated</th>
+                <th style="text-align: right;">Actions</th>
             </tr>
             </thead>
             <tbody>
@@ -63,6 +63,9 @@ under the License.
                 <td data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
                 <td data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
                 <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$" data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
+                <td style="text-align: right;">
+                    <span ng-if="showChartsButton"><a class="link action-link" title="View Charts" ng-click="openCharts(ds, $event)"><i class="fa fa-sm fa-bar-chart"></i></a></span>
+                </td>
             </tr>
             </tbody>
         </table>
diff --git a/traffic_portal/app/src/common/modules/table/serverDeliveryServices/TableServerDeliveryServicesController.js b/traffic_portal/app/src/common/modules/table/serverDeliveryServices/TableServerDeliveryServicesController.js
index 31187f0..f33da87 100644
--- a/traffic_portal/app/src/common/modules/table/serverDeliveryServices/TableServerDeliveryServicesController.js
+++ b/traffic_portal/app/src/common/modules/table/serverDeliveryServices/TableServerDeliveryServicesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableServerDeliveryServicesController = function(server, serverDeliveryServices, $scope, $state, $uibModal, dateUtils, deliveryServiceUtils, locationUtils, serverUtils, deliveryServiceService, serverService) {
+var TableServerDeliveryServicesController = function(server, serverDeliveryServices, $scope, $state, $uibModal, dateUtils, deliveryServiceUtils, locationUtils, serverUtils, deliveryServiceService, serverService, propertiesModel) {
 
 	var protocols = deliveryServiceUtils.protocols;
 
@@ -36,6 +36,10 @@ var TableServerDeliveryServicesController = function(server, serverDeliveryServi
 
 	$scope.serverDeliveryServices = serverDeliveryServices;
 
+	$scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
+
+	$scope.openCharts = deliveryServiceUtils.openCharts;
+
 	$scope.isEdge = serverUtils.isEdge;
 
 	$scope.protocol = function(ds) {
@@ -110,7 +114,9 @@ var TableServerDeliveryServicesController = function(server, serverDeliveryServi
 		});
 	};
 
-	$scope.confirmRemoveDS = function(ds) {
+	$scope.confirmRemoveDS = function(ds, $event) {
+		$event.stopPropagation(); // this kills the click event so it doesn't trigger anything else
+
 		var params = {
 			title: 'Remove Delivery Service from Server?',
 			message: 'Are you sure you want to remove ' + ds.xmlId + ' from this server?'
@@ -152,5 +158,5 @@ var TableServerDeliveryServicesController = function(server, serverDeliveryServi
 
 };
 
-TableServerDeliveryServicesController.$inject = ['server', 'serverDeliveryServices', '$scope', '$state', '$uibModal', 'dateUtils', 'deliveryServiceUtils', 'locationUtils', 'serverUtils', 'deliveryServiceService', 'serverService'];
+TableServerDeliveryServicesController.$inject = ['server', 'serverDeliveryServices', '$scope', '$state', '$uibModal', 'dateUtils', 'deliveryServiceUtils', 'locationUtils', 'serverUtils', 'deliveryServiceService', 'serverService', 'propertiesModel'];
 module.exports = TableServerDeliveryServicesController;
diff --git a/traffic_portal/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html b/traffic_portal/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html
index 2d45912..3b86fa8 100644
--- a/traffic_portal/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html
+++ b/traffic_portal/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html
@@ -56,7 +56,7 @@ under the License.
                 <th>Signing Algorithm</th>
                 <th>Qstring Handling</th>
                 <th>Last Updated</th>
-                <th></th>
+                <th style="text-align: right;">Actions</th>
             </tr>
             </thead>
             <tbody>
@@ -73,7 +73,10 @@ under the License.
                 <td data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
                 <td data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
                 <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$" data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
-                <td><button type="button" class="btn btn-link" title="Unlink Delivery Service from Server" ng-click="confirmRemoveDS(ds)"><i class="fa fa-chain-broken"></i></button></td>
+                <td style="text-align: right;">
+                    <a class="link action-link" title="Unlink Delivery Service from Server" ng-click="confirmRemoveDS(ds, $event)"><i class="fa fa-sm fa-chain-broken"></i></a>
+                    <span ng-if="showChartsButton"><a class="link action-link" title="View Charts" ng-click="openCharts(ds, $event)"><i class="fa fa-sm fa-bar-chart"></i></a></span>
+                </td>
             </tr>
             </tbody>
         </table>
diff --git a/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/TableTenantDeliveryServicesController.js b/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/TableTenantDeliveryServicesController.js
index de6690c..d6a0ce1 100644
--- a/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/TableTenantDeliveryServicesController.js
+++ b/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/TableTenantDeliveryServicesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableTenantDeliveryServicesController = function(tenant, tenantDeliveryServices, $scope, $state, dateUtils, deliveryServiceUtils, locationUtils) {
+var TableTenantDeliveryServicesController = function(tenant, tenantDeliveryServices, $scope, $state, dateUtils, deliveryServiceUtils, locationUtils, propertiesModel) {
 
 	var protocols = deliveryServiceUtils.protocols;
 
@@ -27,6 +27,10 @@ var TableTenantDeliveryServicesController = function(tenant, tenantDeliveryServi
 
 	$scope.tenantDeliveryServices = tenantDeliveryServices;
 
+	$scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
+
+	$scope.openCharts = deliveryServiceUtils.openCharts;
+
 	$scope.protocol = function(ds) {
 		return protocols[ds.protocol];
 	};
@@ -51,11 +55,14 @@ var TableTenantDeliveryServicesController = function(tenant, tenantDeliveryServi
 		$('#tenantDSsTable').dataTable({
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
 			"iDisplayLength": 25,
+			"columnDefs": [
+				{ 'orderable': false, 'targets': 12 }
+			],
 			"aaSorting": []
 		});
 	});
 
 };
 
-TableTenantDeliveryServicesController.$inject = ['tenant', 'tenantDeliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils'];
+TableTenantDeliveryServicesController.$inject = ['tenant', 'tenantDeliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils', 'propertiesModel'];
 module.exports = TableTenantDeliveryServicesController;
diff --git a/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/table.tenantDeliveryServices.tpl.html b/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/table.tenantDeliveryServices.tpl.html
index b01633a..4b84c18 100644
--- a/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/table.tenantDeliveryServices.tpl.html
+++ b/traffic_portal/app/src/common/modules/table/tenantDeliveryServices/table.tenantDeliveryServices.tpl.html
@@ -46,6 +46,7 @@ under the License.
                 <th>Signing Algorithm</th>
                 <th>Qstring Handling</th>
                 <th>Last Updated</th>
+                <th style="text-align: right;">Actions</th>
             </tr>
             </thead>
             <tbody>
@@ -62,6 +63,9 @@ under the License.
                 <td data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
                 <td data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
                 <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$" data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
+                <td style="text-align: right;">
+                    <span ng-if="showChartsButton"><a class="link action-link" title="View Charts" ng-click="openCharts(ds, $event)"><i class="fa fa-sm fa-bar-chart"></i></a></span>
+                </td>
             </tr>
             </tbody>
         </table>
diff --git a/traffic_portal/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.js b/traffic_portal/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.js
index 2cf03f9..26bd088 100644
--- a/traffic_portal/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.js
+++ b/traffic_portal/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableTypeDeliveryServicesController = function(type, deliveryServices, $scope, $state, dateUtils, deliveryServiceUtils, locationUtils) {
+var TableTypeDeliveryServicesController = function(type, deliveryServices, $scope, $state, dateUtils, deliveryServiceUtils, locationUtils, propertiesModel) {
 
 	var protocols = deliveryServiceUtils.protocols;
 
@@ -27,6 +27,10 @@ var TableTypeDeliveryServicesController = function(type, deliveryServices, $scop
 
 	$scope.deliveryServices = deliveryServices;
 
+	$scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
+
+	$scope.openCharts = deliveryServiceUtils.openCharts;
+
 	$scope.protocol = function(ds) {
 		return protocols[ds.protocol];
 	};
@@ -51,11 +55,14 @@ var TableTypeDeliveryServicesController = function(type, deliveryServices, $scop
 		$('#deliveryServicesTable').dataTable({
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
 			"iDisplayLength": 25,
+			"columnDefs": [
+				{ 'orderable': false, 'targets': 12 }
+			],
 			"aaSorting": []
 		});
 	});
 
 };
 
-TableTypeDeliveryServicesController.$inject = ['type', 'deliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils'];
+TableTypeDeliveryServicesController.$inject = ['type', 'deliveryServices', '$scope', '$state', 'dateUtils', 'deliveryServiceUtils', 'locationUtils', 'propertiesModel'];
 module.exports = TableTypeDeliveryServicesController;
diff --git a/traffic_portal/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html b/traffic_portal/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html
index e127ab7..8507f7b 100644
--- a/traffic_portal/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html
+++ b/traffic_portal/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html
@@ -46,6 +46,7 @@ under the License.
                 <th>Signing Algorithm</th>
                 <th>Qstring Handling</th>
                 <th>Last Updated</th>
+                <th style="text-align: right;">Actions</th>
             </tr>
             </thead>
             <tbody>
@@ -62,6 +63,9 @@ under the License.
                 <td data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
                 <td data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
                 <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$" data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
+                <td style="text-align: right;">
+                    <span ng-if="showChartsButton"><a class="link action-link" title="View Charts" ng-click="openCharts(ds, $event)"><i class="fa fa-sm fa-bar-chart"></i></a></span>
+                </td>
             </tr>
             </tbody>
         </table>
diff --git a/traffic_portal/app/src/common/modules/table/userDeliveryServices/TableUserDeliveryServicesController.js b/traffic_portal/app/src/common/modules/table/userDeliveryServices/TableUserDeliveryServicesController.js
index 067e055..5171a85 100644
--- a/traffic_portal/app/src/common/modules/table/userDeliveryServices/TableUserDeliveryServicesController.js
+++ b/traffic_portal/app/src/common/modules/table/userDeliveryServices/TableUserDeliveryServicesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableUserDeliveryServicesController = function(user, userDeliveryServices, useTenancy, $scope, $state, $uibModal, dateUtils, deliveryServiceUtils, locationUtils, userService) {
+var TableUserDeliveryServicesController = function(user, userDeliveryServices, useTenancy, $scope, $state, $uibModal, dateUtils, deliveryServiceUtils, locationUtils, userService, propertiesModel) {
 
 	var protocols = deliveryServiceUtils.protocols;
 
@@ -29,6 +29,10 @@ var TableUserDeliveryServicesController = function(user, userDeliveryServices, u
 
 	$scope.useTenancy = useTenancy[0].value;
 
+	$scope.showChartsButton = propertiesModel.properties.deliveryServices.charts.show;
+
+	$scope.openCharts = deliveryServiceUtils.openCharts;
+
 	$scope.protocol = function(ds) {
 		return protocols[ds.protocol];
 	};
@@ -39,7 +43,9 @@ var TableUserDeliveryServicesController = function(user, userDeliveryServices, u
 
 	$scope.getRelativeTime = dateUtils.getRelativeTime;
 
-	$scope.removeDS = function(dsId) {
+	$scope.removeDS = function(dsId, $event) {
+		$event.stopPropagation(); // this kills the click event so it doesn't trigger anything else
+
 		userService.deleteUserDeliveryService(user.id, dsId)
 			.then(
 				function() {
@@ -94,5 +100,5 @@ var TableUserDeliveryServicesController = function(user, userDeliveryServices, u
 
 };
 
-TableUserDeliveryServicesController.$inject = ['user', 'userDeliveryServices', 'useTenancy', '$scope', '$state', '$uibModal', 'dateUtils', 'deliveryServiceUtils','locationUtils', 'userService'];
+TableUserDeliveryServicesController.$inject = ['user', 'userDeliveryServices', 'useTenancy', '$scope', '$state', '$uibModal', 'dateUtils', 'deliveryServiceUtils','locationUtils', 'userService', 'propertiesModel'];
 module.exports = TableUserDeliveryServicesController;
diff --git a/traffic_portal/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html b/traffic_portal/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
index b16e11a..bf2b2f5 100644
--- a/traffic_portal/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
+++ b/traffic_portal/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
@@ -47,7 +47,7 @@ under the License.
                 <th>Signing Algorithm</th>
                 <th>Qstring Handling</th>
                 <th>Last Updated</th>
-                <th ng-if="useTenancy == '0'"></th>
+                <th style="text-align: right;">Actions</th>
             </tr>
             </thead>
             <tbody>
@@ -64,7 +64,10 @@ under the License.
                 <td data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
                 <td data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
                 <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$" data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
-                <td ng-if="useTenancy == '0'"><button type="button" class="btn btn-link" title="Unlink Delivery Service from User" ng-click="removeDS(ds.id)"><i class="fa fa-chain-broken"></i></button></td>
+                <td style="text-align: right;">
+                    <a ng-if="useTenancy == '0'" class="link action-link" title="Unlink Delivery Service from User" ng-click="removeDS(ds.id, $event)"><i class="fa fa-sm fa-chain-broken"></i></a>
+                    <span ng-if="showChartsButton"><a class="link action-link" title="View Charts" ng-click="openCharts(ds, $event)"><i class="fa fa-sm fa-bar-chart"></i></a></span>
+                </td>
             </tr>
             </tbody>
         </table>
diff --git a/traffic_portal/app/src/common/service/utils/DeliveryServiceUtils.js b/traffic_portal/app/src/common/service/utils/DeliveryServiceUtils.js
index f4e5e34..25816b9 100644
--- a/traffic_portal/app/src/common/service/utils/DeliveryServiceUtils.js
+++ b/traffic_portal/app/src/common/service/utils/DeliveryServiceUtils.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var DeliveryServiceUtils = function() {
+var DeliveryServiceUtils = function($window, propertiesModel) {
 
 	this.protocols = {
 		0: "HTTP",
@@ -32,7 +32,17 @@ var DeliveryServiceUtils = function() {
 		2: "DROP"
 	};
 
+	this.openCharts = function(ds, $event) {
+		if ($event) {
+			$event.stopPropagation(); // this kills the click event so it doesn't trigger anything else
+		}
+		$window.open(
+			propertiesModel.properties.deliveryServices.charts.baseUrl + ds.xmlId,
+			'_blank'
+		);
+	};
+
 };
 
-DeliveryServiceUtils.$inject = [];
+DeliveryServiceUtils.$inject = ['$window', 'propertiesModel'];
 module.exports = DeliveryServiceUtils;
diff --git a/traffic_portal/app/src/common/service/utils/ServerUtils.js b/traffic_portal/app/src/common/service/utils/ServerUtils.js
index 74d0f4c..87a7dcd 100644
--- a/traffic_portal/app/src/common/service/utils/ServerUtils.js
+++ b/traffic_portal/app/src/common/service/utils/ServerUtils.js
@@ -43,7 +43,9 @@ var ServerUtils = function($window, propertiesModel, userModel) {
 	};
 
 	this.openCharts = function(server, $event) {
-		$event.stopPropagation(); // this kills the click event so it doesn't trigger anything else
+		if ($event) {
+			$event.stopPropagation(); // this kills the click event so it doesn't trigger anything else
+		}
 		$window.open(
 			propertiesModel.properties.servers.charts.baseUrl + server.hostName,
 			'_blank'

-- 
To stop receiving notification emails like this one, please contact
dewrich@apache.org.