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

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


The following commit(s) were added to refs/heads/master by this push:
     new e576a612de [TPv1] Added a new route and logic for assigning multiple 
server capabilities to a server (#7020)
e576a612de is described below

commit e576a612deb4c9ba74aca2995cc03c4fe0931e81
Author: Rima Shah <[email protected]>
AuthorDate: Mon Aug 22 17:40:49 2022 -0600

    [TPv1] Added a new route and logic for assigning multiple server 
capabilities to a server (#7020)
    
    * Added logic for assigning multiple server capabilities in TPv1
    
    * Updated CHANGELOG.md
    
    * Updated based on review comments.
    
    * Updated CHANGELOG.md based on merge conflicts.
---
 CHANGELOG.md                                       |  6 +-
 .../app/src/common/api/ServerCapabilityService.js  | 13 +++++
 .../TableAssignServerSCsController.js              | 64 ++++++++++++++++++++++
 .../TableServerServerCapabilitiesController.js     | 33 ++++++++++-
 .../table/serverServerCapabilities/index.js        |  3 +-
 .../table.assignServerSCs.tpl.html                 | 32 +++++++++++
 .../table.serverServerCapabilities.tpl.html        |  3 +-
 traffic_portal/app/src/scripts/config.js           |  2 +-
 8 files changed, 147 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa81bc42b7..e413a436bc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,18 +5,16 @@ The format is based on [Keep a 
Changelog](http://keepachangelog.com/en/1.0.0/).
 
 ## [unreleased]
 ### Added
-- [#6033](https://github.com/apache/trafficcontrol/issues/6033) Added ability 
to assign multiple server capabilities to a server.
+- [#6033](https://github.com/apache/trafficcontrol/issues/6033) [Traffic Ops, 
Traffic Portal] Added ability to assign multiple server capabilities to a 
server.
 - [Traffic Monitor] Added logging for `ipv4Availability` and 
`ipv6Availability` in TM.
 
 ### Fixed
 - Traffic Stats: Reuse InfluxDB client handle to prevent potential connection 
leaks
+- [#7021](https://github.com/apache/trafficcontrol/issues/7021) Fixed cache 
config for Delivery Services with IP Origins
 
 ### Changed
 - Traffic Portal now obscures sensitive text in Delivery Service "Raw Remap" 
fields, private SSL keys, "Header Rewrite" rules, and ILO interface passwords 
by default.
 
-### Fixed
-- [#7021](https://github.com/apache/trafficcontrol/issues/7021) Fixed cache 
config for Delivery Services with IP Origins
-
 ## [7.0.0] - 2022-07-19
 ### Added
 - [Traffic Portal] Added Layered Profile feature to /servers/
diff --git a/traffic_portal/app/src/common/api/ServerCapabilityService.js 
b/traffic_portal/app/src/common/api/ServerCapabilityService.js
index 25913dc6dd..ca8a827f28 100644
--- a/traffic_portal/app/src/common/api/ServerCapabilityService.js
+++ b/traffic_portal/app/src/common/api/ServerCapabilityService.js
@@ -68,6 +68,19 @@ var ServerCapabilityService = function($http, ENV, 
locationUtils, messageModel)
                );
        };
 
+       this.assignSCsServer = function(serverId, serverCapabilities) {
+               return $http.put(ENV.api.unstable + 
'multiple_server_capabilities',{ serverId: serverId, serverCapabilities: 
serverCapabilities, replace: true } ).then(
+                       function(result) {
+                               messageModel.setMessages(result.data.alerts, 
false);
+                               return result;
+                       },
+                       function(err) {
+                               messageModel.setMessages(err.data.alerts, 
false);
+                               throw err;
+                       }
+               );
+       };
+
        this.updateServerCapability = function(currentName, serverCapability) {
                return $http.put(ENV.api.unstable + 'server_capabilities', 
serverCapability, {params: {"name": currentName}}).then(
                        function(result) {
diff --git 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js
 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js
new file mode 100644
index 0000000000..9992834523
--- /dev/null
+++ 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableAssignServerSCsController.js
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+
+/** @typedef { 
import('../../../../common/modules/table/agGrid/CommonGridController').CGC } 
CGC */
+
+var TableAssignServerSCsController = function(server, serverCapabilities, 
assignedSCs, $scope, $uibModalInstance) {
+
+    $scope.selectedSCs = [];
+
+    $scope.server = server;
+
+    /** @type CGC.ColumnDefinition */
+    $scope.columns = [
+        {
+            headerName: "Server Capability",
+            field: "name",
+            checkboxSelection: true,
+            headerCheckboxSelection: true,
+        }
+    ];
+
+    $scope.serverCapabilities = serverCapabilities.map(SCs => {
+        let isAssigned = assignedSCs.find(assignedSCs => 
assignedSCs.serverCapability === SCs.name);
+        if (isAssigned) {
+            SCs['selected'] = true;
+        }
+        return SCs;
+    });
+
+    $scope.submit = function() {
+        const selectedSCNames = this.selectedSCs.map(sc => sc["name"]);
+        $uibModalInstance.close(selectedSCNames);
+    };
+
+    $scope.cancel = function () {
+        $uibModalInstance.dismiss('cancel');
+    };
+
+    /** @type CGC.GridSettings */
+    $scope.gridOptions = {
+        selectRows: true,
+        selectionProperty: "selected"
+    };
+};
+
+TableAssignServerSCsController.$inject = ['server', 'serverCapabilities', 
'assignedSCs', '$scope', '$uibModalInstance'];
+module.exports = TableAssignServerSCsController;
+
diff --git 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js
 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js
index 51b991a44a..c37e69f9ac 100644
--- 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js
+++ 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/TableServerServerCapabilitiesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableServerServerCapabilitiesController = function(server, 
serverCapabilities, $scope, $state, $uibModal, locationUtils, serverUtils, 
serverService, messageModel) {
+var TableServerServerCapabilitiesController = function(server, 
serverCapabilities, $scope, $state, $uibModal, locationUtils, serverUtils, 
serverService, messageModel, serverCapabilityService) {
 
        $scope.server = server[0];
 
@@ -32,6 +32,35 @@ var TableServerServerCapabilitiesController = 
function(server, serverCapabilitie
                }
        ];
 
+       $scope.selectSCs = function () {
+               var modalInstance = $uibModal.open({
+                       templateUrl: 
'common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html',
+                       controller: 'TableAssignServerSCsController',
+                       size: 'md',
+                       resolve: {
+                               server: function() {
+                                       return server;
+                               },
+                               serverCapabilities: 
function(serverCapabilityService) {
+                                       return 
serverCapabilityService.getServerCapabilities();
+                               },
+                               assignedSCs: function() {
+                                       return serverCapabilities
+                               }
+                       }
+               });
+               modalInstance.result.then(function(selectedSCs) {
+                       serverCapabilityService.assignSCsServer(server[0].id, 
selectedSCs)
+                               .then(
+                                       function() {
+                                               $scope.refresh();
+                                       }
+                               );
+               }, function () {
+                       // do nothing
+               });
+       };
+
        $scope.addServerCapability = function() {
                const params = {
                        title: 'Add Server Capability',
@@ -116,5 +145,5 @@ var TableServerServerCapabilitiesController = 
function(server, serverCapabilitie
        $scope.isCache = serverUtils.isCache;
 };
 
-TableServerServerCapabilitiesController.$inject = ['server', 
'serverCapabilities', '$scope', '$state', '$uibModal', 'locationUtils', 
'serverUtils', 'serverService', 'messageModel'];
+TableServerServerCapabilitiesController.$inject = ['server', 
'serverCapabilities', '$scope', '$state', '$uibModal', 'locationUtils', 
'serverUtils', 'serverService', 'messageModel', 'serverCapabilityService'];
 module.exports = TableServerServerCapabilitiesController;
diff --git 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js
index 3913c51555..41ecef54e6 100644
--- 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js
+++ 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/index.js
@@ -18,4 +18,5 @@
  */
 
 module.exports = 
angular.module('trafficPortal.table.serverServerCapabilities', [])
-       .controller('TableServerServerCapabilitiesController', 
require('./TableServerServerCapabilitiesController'));
+       .controller('TableServerServerCapabilitiesController', 
require('./TableServerServerCapabilitiesController'))
+       .controller('TableAssignServerSCsController', 
require('./TableAssignServerSCsController'));
diff --git 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html
 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html
new file mode 100644
index 0000000000..cb1bbf09e7
--- /dev/null
+++ 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.assignServerSCs.tpl.html
@@ -0,0 +1,32 @@
+<!--
+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="modal-header">
+    <button type="button" class="close" ng-click="cancel()"><span 
aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+    <h3 class="modal-title">Assign Server Capabilities to 
{{::server[0].hostName}}</h3>
+</div>
+<div class="modal-body">
+    <common-grid-controller table-name="serverSCsUnassigned" 
options="gridOptions"
+                            data="serverCapabilities" columns="columns" 
selected-data="selectedSCs"></common-grid-controller>
+</div>
+<div class="modal-footer">
+    <button class="btn btn-link" ng-click="cancel()">cancel</button>
+    <button class="btn btn-primary" ng-click="submit()">Submit</button>
+</div>
+
diff --git 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html
 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html
index 484cdf55bc..ef30a77472 100644
--- 
a/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/table/serverServerCapabilities/table.serverServerCapabilities.tpl.html
@@ -25,7 +25,8 @@ under the License.
             <li class="active">Capabilities</li>
         </ol>
         <div class="pull-right">
-            <button ng-if="isCache(server)" type="button" 
name="addCapabilityBtn" class="btn btn-primary" title="Add Server Capability" 
ng-click="addServerCapability()"><i class="fa fa-plus"></i></button>
+            <button ng-if="isCache(server)" type="button" 
name="assignMultipleCapabilityBtn" class="btn btn-primary" title="Assign 
Multiple Capabilities" ng-click="selectSCs()">Assign Multiple 
Capabilities</i></button>
+            <button ng-if="isCache(server)" type="button" 
name="addCapabilityBtn" class="btn btn-primary" title="Add a Server Capability" 
ng-click="addServerCapability()"><i class="fa fa-plus"></i></button>
             <button type="button" class="btn btn-default" title="Refresh" 
ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
diff --git a/traffic_portal/app/src/scripts/config.js 
b/traffic_portal/app/src/scripts/config.js
index fd9b322fb7..a90ed819b6 100644
--- a/traffic_portal/app/src/scripts/config.js
+++ b/traffic_portal/app/src/scripts/config.js
@@ -23,4 +23,4 @@
 
 angular.module('config', [])
 
-.constant('ENV', { api: { unstable:'/api/4.0/', stable: "/api/3.1/" } });
+.constant('ENV', { api: { unstable:'/api/4.1/', stable: "/api/4.0/" } });

Reply via email to