From b11f57390733d1773967ebeebf3ee867124ba748 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Thu, 21 Feb 2019 16:24:08 +0800 Subject: [PATCH 1/8] feature: diff configurations among clusters. issue #1966 --- .../main/resources/static/config/diff.html | 134 ++++++++++++++++++ .../src/main/resources/static/img/diff.png | Bin 0 -> 3159 bytes .../src/main/resources/static/scripts/app.js | 2 + .../controller/config/DiffConfigController.js | 96 +++++++++++++ .../directive/namespace-panel-directive.js | 12 ++ .../component/namespace-panel-master-tab.html | 9 ++ 6 files changed, 253 insertions(+) create mode 100644 apollo-portal/src/main/resources/static/config/diff.html create mode 100644 apollo-portal/src/main/resources/static/img/diff.png create mode 100644 apollo-portal/src/main/resources/static/scripts/controller/config/DiffConfigController.js diff --git a/apollo-portal/src/main/resources/static/config/diff.html b/apollo-portal/src/main/resources/static/config/diff.html new file mode 100644 index 00000000000..22f7aebe8c3 --- /dev/null +++ b/apollo-portal/src/main/resources/static/config/diff.html @@ -0,0 +1,134 @@ + + + + + + + + + + + 比较配置 + + + + + + +
+
+
+
+
+ +
+
+ + + +
+
+
+
+
+
+ Tips: +
    +
  • 通过比较配置功能,可以查看多个环境、集群间的配置差异
  • +
+
+
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + +
Key
+
+
+
+
+
+
+ + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apollo-portal/src/main/resources/static/img/diff.png b/apollo-portal/src/main/resources/static/img/diff.png new file mode 100644 index 0000000000000000000000000000000000000000..41eccd592e8e6ac17660f9364bf491115944503a GIT binary patch literal 3159 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 BfouQ( literal 0 HcmV?d00001 diff --git a/apollo-portal/src/main/resources/static/scripts/app.js b/apollo-portal/src/main/resources/static/scripts/app.js index f8695fd083e..a7151a27a68 100644 --- a/apollo-portal/src/main/resources/static/scripts/app.js +++ b/apollo-portal/src/main/resources/static/scripts/app.js @@ -16,6 +16,8 @@ var application_module = angular.module('application', ['app.service', 'apollo.d var app_module = angular.module('create_app', ['apollo.directive', 'toastr', 'app.service', 'app.util', 'angular-loading-bar', 'valdr']); //配置同步页面 var sync_item_module = angular.module('sync_item', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar']); +// 比较页面 +var diff_item_module = angular.module('diff_item', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar']); //namespace var namespace_module = angular.module('namespace', ['app.service', 'apollo.directive', 'app.util', 'toastr', 'angular-loading-bar', 'valdr']); //server config diff --git a/apollo-portal/src/main/resources/static/scripts/controller/config/DiffConfigController.js b/apollo-portal/src/main/resources/static/scripts/controller/config/DiffConfigController.js new file mode 100644 index 00000000000..708afcb21b9 --- /dev/null +++ b/apollo-portal/src/main/resources/static/scripts/controller/config/DiffConfigController.js @@ -0,0 +1,96 @@ +diff_item_module.controller("DiffItemController", + ['$scope', '$location', '$window', 'toastr', 'AppService', 'AppUtil', 'ConfigService', + function ($scope, $location, $window, toastr, AppService, AppUtil, ConfigService) { + + var params = AppUtil.parseParams($location.$$url); + $scope.pageContext = { + appId: params.appid, + env: params.env, + clusterName: params.clusterName, + namespaceName: params.namespaceName + }; + var sourceItems = []; + + $scope.diff = diff; + $scope.syncBtnDisabled = false; + + $scope.collectSelectedClusters = collectSelectedClusters; + + $scope.syncItemNextStep = syncItemNextStep; + $scope.backToAppHomePage = backToAppHomePage; + $scope.switchSelect = switchSelect; + + $scope.showText = showText; + + $scope.itemsKeyedByKey = {}; + + $scope.syncData = { + syncToNamespaces: [], + syncItems: [] + }; + + function diff() { + $scope.syncData = parseSyncSourceData(); + if ($scope.syncData.syncToNamespaces.length < 2) { + toastr.warning("请至少选择两个集群"); + return; + } + $scope.syncData.syncToNamespaces.forEach(function (namespace) { + ConfigService.find_items(namespace.appId, + namespace.env, + namespace.clusterName, + namespace.namespaceName).then(function (result) { + result.forEach(function (item) { + var itemsKeyedByClusterName = $scope.itemsKeyedByKey[item.key] || {}; + itemsKeyedByClusterName[namespace.env + ':' + namespace.clusterName + ':' + namespace.namespaceName] = item; + $scope.itemsKeyedByKey[item.key] = itemsKeyedByClusterName; + }); + }); + }); + console.info($scope.itemsKeyedByKey) + $scope.syncItemNextStep(1); + } + + var selectedClusters = []; + + function collectSelectedClusters(data) { + selectedClusters = data; + } + + function parseSyncSourceData() { + var syncData = { + syncToNamespaces: [], + syncItems: [] + }; + var namespaceName = $scope.pageContext.namespaceName; + selectedClusters.forEach(function (cluster) { + if (cluster.checked) { + cluster.clusterName = cluster.name; + cluster.namespaceName = namespaceName; + syncData.syncToNamespaces.push(cluster); + } + }); + + return syncData; + } + + ////// flow control /////// + + $scope.syncItemStep = 1; + function syncItemNextStep(offset) { + $scope.syncItemStep += offset; + } + + function backToAppHomePage() { + $window.location.href = '/config.html?#appid=' + $scope.pageContext.appId; + } + + function switchSelect(o) { + o.checked = !o.checked; + } + + function showText(text) { + $scope.text = text; + AppUtil.showModal('#showTextModal'); + } +}]); diff --git a/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js b/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js index c5a0911b882..9b93bc4f918 100644 --- a/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js +++ b/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js @@ -51,6 +51,7 @@ function directive($window, toastr, AppUtil, EventManager, PermissionService, Na scope.loadCommitHistory = loadCommitHistory; scope.toggleTextEditStatus = toggleTextEditStatus; scope.goToSyncPage = goToSyncPage; + scope.goToDiffPage = goToDiffPage; scope.modifyByText = modifyByText; scope.syntaxCheck = syntaxCheck; scope.goToParentAppConfigPage = goToParentAppConfigPage; @@ -701,6 +702,17 @@ function directive($window, toastr, AppUtil, EventManager, PermissionService, Na + "&namespaceName=" + namespace.baseInfo.namespaceName; } + function goToDiffPage(namespace) { + if (!scope.lockCheck(namespace)) { + return false; + } + $window.location.href = + "config/diff.html?#/appid=" + scope.appId + "&env=" + + scope.env + "&clusterName=" + + scope.cluster + + "&namespaceName=" + namespace.baseInfo.namespaceName; + } + function modifyByText(namespace) { var model = { configText: namespace.editText, diff --git a/apollo-portal/src/main/resources/static/views/component/namespace-panel-master-tab.html b/apollo-portal/src/main/resources/static/views/component/namespace-panel-master-tab.html index 519ee3b2bb2..986162a3b4b 100644 --- a/apollo-portal/src/main/resources/static/views/component/namespace-panel-master-tab.html +++ b/apollo-portal/src/main/resources/static/views/component/namespace-panel-master-tab.html @@ -189,6 +189,15 @@ 同步配置 + +