Repository: ambari Updated Branches: refs/heads/trunk e9d39f951 -> 59fa68e77
AMBARI-8653 UI integration with the BE - install repo versions on hosts from admin tab. (ababiichuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/59fa68e7 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/59fa68e7 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/59fa68e7 Branch: refs/heads/trunk Commit: 59fa68e77e90141647538775f81dc5aff57f22ac Parents: e9d39f9 Author: aBabiichuk <ababiic...@cybervisiontech.com> Authored: Thu Dec 11 12:53:06 2014 +0200 Committer: aBabiichuk <ababiic...@cybervisiontech.com> Committed: Thu Dec 11 12:53:06 2014 +0200 ---------------------------------------------------------------------- .../data/stack_versions/stack_version_all.json | 479 +++++++++++++++++-- .../stack_versions/repo_versions_controller.js | 59 ++- .../stack_version_details_controller.js | 64 +-- .../stack_versions/stack_versions_controller.js | 39 +- ambari-web/app/mappers/stack_version_mapper.js | 2 +- ambari-web/app/models/stack_version/version.js | 4 + ambari-web/app/styles/application.less | 2 +- .../stack_versions/stack_version_details.hbs | 4 +- ambari-web/app/views/common/filter_view.js | 5 + .../admin/stack_versions/repo_version_view.js | 23 +- .../stack_version_details_view.js | 9 +- .../admin/stack_versions/stack_version_view.js | 26 +- .../repo_versions_controller_test.js | 29 +- .../stack_version_details_controller_test.js | 33 +- .../stack_versions_controller_test.js | 55 +++ 15 files changed, 669 insertions(+), 164 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/assets/data/stack_versions/stack_version_all.json ---------------------------------------------------------------------- diff --git a/ambari-web/app/assets/data/stack_versions/stack_version_all.json b/ambari-web/app/assets/data/stack_versions/stack_version_all.json index 314d909..b7ea2b0 100644 --- a/ambari-web/app/assets/data/stack_versions/stack_version_all.json +++ b/ambari-web/app/assets/data/stack_versions/stack_version_all.json @@ -1,66 +1,447 @@ { - "items" : [ + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions?fields=*,repository_versions/*,repository_versions/operatingSystems/*", + "items": [ { - "ClusterStackVersions" : { - "cluster_name" : "c1", - "id" : 1, - "stack" : "HDP", - "state" : "CURRENT", - "version" : "2.2", - "host_states" : { - "CURRENT" : [ - "dev01.hortonworks.com" + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/1", + "ClusterStackVersions": { + "cluster_name": "1", + "id": 1, + "repository_version": 1, + "stack": "HDP", + "state": "CURRENT", + "version": "2.2", + "host_states": { + "CURRENT": [ + "ab3test-4.c.pramod-thangali.internal" ], - "INSTALLED" : [ ], - "INSTALLING" : [ ], - "INSTALL_FAILED" : [ ], - "UPGRADED" : [ ], - "UPGRADE_FAILED" : [ ], - "UPGRADING" : [ ] + "INSTALLED": [], + "INSTALLING": [], + "INSTALL_FAILED": [], + "UPGRADED": [], + "UPGRADE_FAILED": [], + "UPGRADING": [] } }, - "repository_versions" : [ + "repository_versions": [ { - "RepositoryVersions" : { - "display_name" : "HDP-2.2", - "id" : 1, - "repository_version" : "2.2", - "stack_name" : "HDP", - "stack_version" : "2.2", - "upgrade_pack" : "" - } + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/1/repository_versions/1", + "RepositoryVersions": { + "display_name": "HDP-2.2", + "id": 1, + "repository_version": "2.2", + "stack_name": "HDP", + "stack_version": "2.2", + "upgrade_pack": "" + }, + "operating_systems": [] } ] }, { - "ClusterStackVersions" : { - "cluster_name" : "c1", - "id" : 2, - "stack" : "HDP", - "state" : "INSTALLED", - "version" : "2.2", - "host_states" : { - "CURRENT" : [ ], - "INSTALLED" : [ - "dev01.hortonworks.com" + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/2", + "ClusterStackVersions": { + "cluster_name": "1", + "id": 2, + "repository_version": 2, + "stack": "HDP", + "state": "INSTALLED", + "version": "2.2", + "host_states": { + "CURRENT": [], + "INSTALLED": [ + "ab3test-4.c.pramod-thangali.internal" ], - "INSTALLING" : [ ], - "INSTALL_FAILED" : [ ], - "UPGRADED" : [ ], - "UPGRADE_FAILED" : [ ], - "UPGRADING" : [ ] + "INSTALLING": [], + "INSTALL_FAILED": [], + "UPGRADED": [], + "UPGRADE_FAILED": [], + "UPGRADING": [] } }, - "repository_versions" : [ + "repository_versions": [ { - "RepositoryVersions" : { - "display_name" : "HDP-2.2.0.1-885", - "id" : 3, - "repository_version" : "2.2.0.1-885", - "stack_name" : "HDP", - "stack_version" : "2.2", - "upgrade_pack" : "upgrade-2.2" - } + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/2/repository_versions/2", + "RepositoryVersions": { + "display_name": "HDP 2.2.0", + "id": 2, + "repository_version": "2.2.0.1-885", + "stack_name": "HDP", + "stack_version": "2.2", + "upgrade_pack": "upgrade-2.2" + }, + "operating_systems": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/2/repository_versions/2/operating_systems/redhat6", + "OperatingSystems": { + "os_type": "redhat6", + "repository_version_id": 2, + "stack_name": "HDP", + "stack_version": "2.2" + }, + "repositories": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/2/repository_versions/2/operating_systems/redhat6/repositories/HDP-2.2", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-2.2", + "repository_version_id": 2, + "stack_name": "HDP", + "stack_version": "2.2" + } + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/2/repository_versions/2/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-UTILS-1.1.0.20", + "repository_version_id": 2, + "stack_name": "HDP", + "stack_version": "2.2" + } + } + ] + } + ] + } + ] + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/3", + "ClusterStackVersions": { + "cluster_name": "1", + "id": 3, + "repository_version": 3, + "stack": "HDP", + "state": "INSTALLED", + "version": "2.2", + "host_states": { + "CURRENT": [], + "INSTALLED": [ + "ab3test-4.c.pramod-thangali.internal" + ], + "INSTALLING": [], + "INSTALL_FAILED": [], + "UPGRADED": [], + "UPGRADE_FAILED": [], + "UPGRADING": [] + } + }, + "repository_versions": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/3/repository_versions/3", + "RepositoryVersions": { + "display_name": "HDP 2.2.1", + "id": 3, + "repository_version": "2.2.1.1-885", + "stack_name": "HDP", + "stack_version": "2.2", + "upgrade_pack": "upgrade-2.2" + }, + "operating_systems": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/3/repository_versions/3/operating_systems/redhat6", + "OperatingSystems": { + "os_type": "redhat6", + "repository_version_id": 3, + "stack_name": "HDP", + "stack_version": "2.2" + }, + "repositories": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/3/repository_versions/3/operating_systems/redhat6/repositories/HDP-2.2", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-2.2", + "repository_version_id": 3, + "stack_name": "HDP", + "stack_version": "2.2" + } + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/3/repository_versions/3/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-UTILS-1.1.0.20", + "repository_version_id": 3, + "stack_name": "HDP", + "stack_version": "2.2" + } + } + ] + } + ] + } + ] + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/4", + "ClusterStackVersions": { + "cluster_name": "1", + "id": 4, + "repository_version": 4, + "stack": "HDP", + "state": "INSTALLED", + "version": "2.2", + "host_states": { + "CURRENT": [], + "INSTALLED": [ + "ab3test-4.c.pramod-thangali.internal" + ], + "INSTALLING": [], + "INSTALL_FAILED": [], + "UPGRADED": [], + "UPGRADE_FAILED": [], + "UPGRADING": [] + } + }, + "repository_versions": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/4/repository_versions/4", + "RepositoryVersions": { + "display_name": "HDP 2.2.2", + "id": 4, + "repository_version": "2.2.2.1-885", + "stack_name": "HDP", + "stack_version": "2.2", + "upgrade_pack": "upgrade-2.2" + }, + "operating_systems": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/4/repository_versions/4/operating_systems/redhat6", + "OperatingSystems": { + "os_type": "redhat6", + "repository_version_id": 4, + "stack_name": "HDP", + "stack_version": "2.2" + }, + "repositories": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/4/repository_versions/4/operating_systems/redhat6/repositories/HDP-2.2", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-2.2", + "repository_version_id": 4, + "stack_name": "HDP", + "stack_version": "2.2" + } + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/4/repository_versions/4/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-UTILS-1.1.0.20", + "repository_version_id": 4, + "stack_name": "HDP", + "stack_version": "2.2" + } + } + ] + } + ] + } + ] + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/5", + "ClusterStackVersions": { + "cluster_name": "1", + "id": 5, + "repository_version": 5, + "stack": "HDP", + "state": "INSTALLED", + "version": "2.2", + "host_states": { + "CURRENT": [], + "INSTALLED": [ + "ab3test-4.c.pramod-thangali.internal" + ], + "INSTALLING": [], + "INSTALL_FAILED": [], + "UPGRADED": [], + "UPGRADE_FAILED": [], + "UPGRADING": [] + } + }, + "repository_versions": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/5/repository_versions/5", + "RepositoryVersions": { + "display_name": "HDP 2.2.3", + "id": 5, + "repository_version": "2.2.3.1-885", + "stack_name": "HDP", + "stack_version": "2.2", + "upgrade_pack": "upgrade-2.2" + }, + "operating_systems": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/5/repository_versions/5/operating_systems/redhat6", + "OperatingSystems": { + "os_type": "redhat6", + "repository_version_id": 5, + "stack_name": "HDP", + "stack_version": "2.2" + }, + "repositories": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/5/repository_versions/5/operating_systems/redhat6/repositories/HDP-2.2", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-2.2", + "repository_version_id": 5, + "stack_name": "HDP", + "stack_version": "2.2" + } + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/5/repository_versions/5/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-UTILS-1.1.0.20", + "repository_version_id": 5, + "stack_name": "HDP", + "stack_version": "2.2" + } + } + ] + } + ] + } + ] + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/6", + "ClusterStackVersions": { + "cluster_name": "1", + "id": 6, + "repository_version": 6, + "stack": "HDP", + "state": "INSTALLED", + "version": "2.2", + "host_states": { + "CURRENT": [], + "INSTALLED": [ + "ab3test-4.c.pramod-thangali.internal" + ], + "INSTALLING": [], + "INSTALL_FAILED": [], + "UPGRADED": [], + "UPGRADE_FAILED": [], + "UPGRADING": [] + } + }, + "repository_versions": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/6/repository_versions/6", + "RepositoryVersions": { + "display_name": "HDP 2.2.4", + "id": 6, + "repository_version": "2.2.4.1-885", + "stack_name": "HDP", + "stack_version": "2.2", + "upgrade_pack": "upgrade-2.2" + }, + "operating_systems": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/6/repository_versions/6/operating_systems/redhat6", + "OperatingSystems": { + "os_type": "redhat6", + "repository_version_id": 6, + "stack_name": "HDP", + "stack_version": "2.2" + }, + "repositories": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/6/repository_versions/6/operating_systems/redhat6/repositories/HDP-2.2", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-2.2", + "repository_version_id": 6, + "stack_name": "HDP", + "stack_version": "2.2" + } + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/6/repository_versions/6/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-UTILS-1.1.0.20", + "repository_version_id": 6, + "stack_name": "HDP", + "stack_version": "2.2" + } + } + ] + } + ] + } + ] + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/7", + "ClusterStackVersions": { + "cluster_name": "1", + "id": 7, + "repository_version": 7, + "stack": "HDP", + "state": "INSTALLED", + "version": "2.2", + "host_states": { + "CURRENT": [], + "INSTALLED": [ + "ab3test-4.c.pramod-thangali.internal" + ], + "INSTALLING": [], + "INSTALL_FAILED": [], + "UPGRADED": [], + "UPGRADE_FAILED": [], + "UPGRADING": [] + } + }, + "repository_versions": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/7/repository_versions/7", + "RepositoryVersions": { + "display_name": "HDP 2.2.5", + "id": 7, + "repository_version": "2.2.5.1-885", + "stack_name": "HDP", + "stack_version": "2.2", + "upgrade_pack": "upgrade-2.2" + }, + "operating_systems": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/7/repository_versions/7/operating_systems/redhat6", + "OperatingSystems": { + "os_type": "redhat6", + "repository_version_id": 7, + "stack_name": "HDP", + "stack_version": "2.2" + }, + "repositories": [ + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/7/repository_versions/7/operating_systems/redhat6/repositories/HDP-2.2", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-2.2", + "repository_version_id": 7, + "stack_name": "HDP", + "stack_version": "2.2" + } + }, + { + "href": "http://162.216.149.241:8080/api/v1/clusters/1/stack_versions/7/repository_versions/7/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories": { + "os_type": "redhat6", + "repo_id": "HDP-UTILS-1.1.0.20", + "repository_version_id": 7, + "stack_name": "HDP", + "stack_version": "2.2" + } + } + ] + } + ] } ] } http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/controllers/main/admin/stack_versions/repo_versions_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/stack_versions/repo_versions_controller.js b/ambari-web/app/controllers/main/admin/stack_versions/repo_versions_controller.js index 3204249..9b95941 100644 --- a/ambari-web/app/controllers/main/admin/stack_versions/repo_versions_controller.js +++ b/ambari-web/app/controllers/main/admin/stack_versions/repo_versions_controller.js @@ -24,14 +24,31 @@ App.RepoVersionsController = Em.ArrayController.extend({ content: function () { return App.RepositoryVersion.find().filterProperty('stackVersion', null); }.property('dataIsLoaded'), + + /** + * true if content is loaded to model + * @type {Boolean} + */ dataIsLoaded: false, + + /** + * path to the mock json + * @type {String} + */ mockUrl: '/data/stack_versions/repo_versions_all.json', + + /** + * api to get RepoVersions + * @type {String} + */ realUrl: function () { return App.get('apiPrefix') + App.get('stackVersionURL') + '/repository_versions?fields=*,operatingSystems/*,operatingSystems/repositories/*'; }.property('App.stackVersionURL'), + /** * load all data components required by repo version table * @return {*} + * @method load() */ load: function () { this.set('dataIsLoaded', false); @@ -47,12 +64,14 @@ App.RepoVersionsController = Em.ArrayController.extend({ /** * get repo versions from server and push it to model * @return {*} + * @params {Boolean} isUpdate - if true loads part of data that need to be updated + * @method loadRepoVersionsToModel() */ - loadRepoVersionsToModel: function (isUpdate) { + loadRepoVersionsToModel: function () { var dfd = $.Deferred(); var self = this; App.get('router.mainStackVersionsController').loadStackVersionsToModel().done(function () { - App.HttpClient.get(self.getUrl(isUpdate), App.repoVersionMapper, { + App.HttpClient.get(self.getUrl(), App.repoVersionMapper, { complete: function () { dfd.resolve(); } @@ -62,11 +81,23 @@ App.RepoVersionsController = Em.ArrayController.extend({ return dfd.promise(); }, - getUrl: function (isUpdate) { - return App.get('testMode') ? this.get('mockUrl') : - isUpdate ? this.get('realUpdateUrl') : this.get('realUrl'); + /** + * returns api url to get repositoryVersion + * or mock json if testmode is on + * @returns {String} + * @method getUrl + */ + getUrl: function () { + return App.get('testMode') ? this.get('mockUrl') : this.get('realUrl'); }, + /** + * sends request to install repoVersion to the cluster + * and create clusterStackVersion resourse + * @param event + * @return {$.ajax} + * @method installRepoVersion + */ installRepoVersion: function (event) { var repo = event.context; var data = { @@ -77,7 +108,7 @@ App.RepoVersionsController = Em.ArrayController.extend({ }, id: repo.get('id') }; - App.ajax.send({ + return App.ajax.send({ name: 'admin.stack_version.install.repo_version', sender: this, data: data, @@ -85,8 +116,20 @@ App.RepoVersionsController = Em.ArrayController.extend({ }); }, + /** + * success callback for <code>installRepoVersion()<code> + * saves request id to the db, and redirect user to the just + * created clusterStackVersion. + * @param data + * @param opt + * @param params + * @method installStackVersionSuccess + */ installStackVersionSuccess: function (data, opt, params) { - var stackVersion = App.StackVersion.find().findProperty('repositoryVersion.id', params.id); - App.router.transitionTo('main.admin.adminStackVersions.version', stackVersion); + App.db.set('stackUpgrade', 'id', [data.Requests.id]); + App.get('router.mainStackVersionsController').loadStackVersionsToModel().done(function() { + var stackVersion = App.StackVersion.find().findProperty('repositoryVersion.id', params.id); + App.router.transitionTo('main.admin.adminStackVersions.version', stackVersion); + }); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js b/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js index ddcec11..faf56c3 100644 --- a/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js +++ b/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js @@ -23,63 +23,39 @@ App.MainStackVersionsDetailsController = Em.Controller.extend({ content: null, + /** + * amount of all hosts installed on cluster + * @type {Number} + */ totalHostCount: function() { return App.get('allHostNames.length'); }.property('App.allHostNames.length'), - - notInstalledHostsCount: function() { - return this.get('content.state') == 'INIT' ? this.get('totalHostCount.length') : 0; - }.property('content.state', 'totalHostCount.length'), - - noInitHosts: function() { - return this.get('notInstalledHostsCount.length') == 0; - }.property('notInstalledHostsCount.length'), /** * true if stack version install is in progress - * {Boolean} + * @type {Boolean} */ installInProgress: function() { return this.get('content.state') == "INSTALLING"; }.property('content.state'), /** - * true if stack version upgrade is in progress - * {Boolean} - */ - upgradeInProgress: function() { - return this.get('content.state') == "UPGRADING"; - }.property('content.state'), - - /** * true if repo version is installed on all hosts but not upgraded - * {Boolean} + * @type {Boolean} */ installedNotUpgraded: function() { - return this.get("allInstalled") && !this.get("allUpgraded") ; - }.property("allInstalled", "allUpgraded"), - - allInstalled: function() { - return this.get('content.installedHosts.length') == this.get('totalHostCount') || - this.get('content.currentHosts.length') == this.get('totalHostCount'); - }.property('content.installedHosts.length', 'content.currentHosts.length'), + return this.get('content.state') == "INSTALLED"; + }.property('content.state'), - allUpgraded: function() { - return this.get('content.upgradedHosts.length') == this.get('totalHostCount') || - this.get('content.currentHosts.length') == this.get('totalHostCount'); - }.property('content.upgradedHosts.length', 'content.currentHosts.length'), /** * depending on state run or install repo request * or show the installation process popup - * @param event * @method installStackVersion */ - installStackVersion: function(event) { + installStackVersion: function() { if (this.get('installInProgress')) { this.showProgressPopup(); - } else if (!this.get('allInstalled')) { - this.doInstallStackVersion(event.context); } }, @@ -91,26 +67,6 @@ App.MainStackVersionsDetailsController = Em.Controller.extend({ var popupTitle = Em.I18n.t('admin.stackVersions.datails.install.hosts.popup.title').format(this.get('content.repositoryVersion.displayName')); var requestIds = App.get('testMode') ? [1] : App.db.get('stackUpgrade', 'id'); var hostProgressPopupController = App.router.get('highAvailabilityProgressPopupController'); - hostProgressPopupController.initPopup(popupTitle, requestIds, this, true); - }, - - /** - * runs request to install repo version - * @param stackVersion - * @returns {*|$.ajax} - * @method doInstallStackVersion - */ - doInstallStackVersion: function(stackVersion) { - //TODO add correct request - return null; - /*return App.ajax.send({ - name: 'admin.stack_version.install.repo_version', - data: data, - success: 'installStackVersionSuccess' - })*/ - }, - - installStackVersionSuccess: function(data) { - App.db.set('stackUpgrade', 'id', [data.id]); + hostProgressPopupController.initPopup(popupTitle, requestIds, this); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js b/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js index 3f6e713..6d294ee 100644 --- a/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js +++ b/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js @@ -25,17 +25,32 @@ App.MainStackVersionsController = Em.ArrayController.extend({ timeoutRef: null, isPolling: false, dataIsLoaded: false, + + /** + * path to the mock json + * @type {String} + */ mockUrl: '/data/stack_versions/stack_version_all.json', + + /** + * api to get ClusterStackVersions with repository_versions (use to init data load) + * @type {String} + */ realUrl: function () { return App.apiPrefix + '/clusters/' + App.get('clusterName') + '/stack_versions?fields=*,repository_versions/*,repository_versions/operatingSystems/repositories/*'; }.property('App.clusterName'), + + /** + * api to get ClusterStackVersions without repository_versions (use to update data) + * @type {String} + */ realUpdateUrl: function () { return App.apiPrefix + '/clusters/' + App.get('clusterName') + '/stack_versions?fields=ClusterStackVersions/*'; - //TODO return App.apiPrefix + '/clusters/' + App.get('clusterName') + '/stack_versions?fields=ClusterStackVersions/state,ClusterStackVersions/host_states&minimal_response=true'; }.property('App.clusterName'), /** * request latest data from server and update content + * @method doPolling */ doPolling: function () { var self = this; @@ -51,6 +66,7 @@ App.MainStackVersionsController = Em.ArrayController.extend({ /** * load all data components required by stack version table * @return {*} + * @method load */ load: function () { var dfd = $.Deferred(); @@ -65,6 +81,7 @@ App.MainStackVersionsController = Em.ArrayController.extend({ /** * get stack versions from server and push it to model * @return {*} + * @method loadStackVersionsToModel */ loadStackVersionsToModel: function (isUpdate) { var dfd = $.Deferred(); @@ -77,11 +94,25 @@ App.MainStackVersionsController = Em.ArrayController.extend({ return dfd.promise(); }, + /** + * returns api url to get clusteStackVersion wirh repositoryVersion + * or just clustrerStackVersion if only updates are requested + * or mock json if testmode is on + * @param isUpdate true if data needs to be updated + * @returns {String} + * @method getUrl + */ getUrl: function (isUpdate) { return App.get('testMode') ? this.get('mockUrl') : isUpdate ? this.get('realUpdateUrl') : this.get('realUrl'); }, + /** + * goes to the hosts page with content filtered by repo_version_name and repo_version_state + * @param version + * @param state + * @method filterHostsByStack + */ filterHostsByStack: function (version, state) { if (!version || !state) return; @@ -90,6 +121,12 @@ App.MainStackVersionsController = Em.ArrayController.extend({ App.router.transitionTo('hosts.index'); }, + /** + * shows popup with listed hosts wich has current state of hostStackVersion + * @param event + * @returns {*|void} + * @method showHosts + */ showHosts: function(event) { var self = this; var status = event.currentTarget.title.toCapital(); http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/mappers/stack_version_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/stack_version_mapper.js b/ambari-web/app/mappers/stack_version_mapper.js index c8169ba..0de41ba 100644 --- a/ambari-web/app/mappers/stack_version_mapper.js +++ b/ambari-web/app/mappers/stack_version_mapper.js @@ -46,9 +46,9 @@ App.stackVersionMapper = App.QuickDataMapper.create({ stack.repository_version_id = item.ClusterStackVersions.repository_version; if (item.repository_versions && item.repository_versions[0]) { item.repository_versions[0].RepositoryVersions.stackVersionId = item.ClusterStackVersions.id; - resultStack.push(this.parseIt(stack, this.get('modelStack'))); App.repoVersionMapper.map({"items": item.repository_versions }, true); } + resultStack.push(this.parseIt(stack, this.get('modelStack'))); }, this); } App.store.commit(); http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/models/stack_version/version.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/stack_version/version.js b/ambari-web/app/models/stack_version/version.js index b4ed9ff..6f718ea 100644 --- a/ambari-web/app/models/stack_version/version.js +++ b/ambari-web/app/models/stack_version/version.js @@ -42,6 +42,10 @@ App.StackVersion = DS.Model.extend({ noCurrentHosts: function() { return this.get('currentHosts.length') == 0; + }.property('currentHosts.length'), + + noInstallFailedHosts: function() { + return this.get('installFailedHosts.length') == 0; }.property('currentHosts.length') }); http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/styles/application.less ---------------------------------------------------------------------- diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less index 7ac2ea8..b6809bb 100644 --- a/ambari-web/app/styles/application.less +++ b/ambari-web/app/styles/application.less @@ -5031,7 +5031,7 @@ ul.inline li { td:first-child + td + td { width: 20%; word-wrap: break-word; - input.filter-input-width{ + select.filter-input-width{ width: 75%; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs b/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs index 694219b..5696a77 100644 --- a/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs +++ b/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs @@ -46,8 +46,8 @@ <div class="span3">{{t admin.stackVersions.datails.not.installed.on}}</div> <div {{bindAttr class="noInitHosts:not-active-link :span6"}}> <a href="#" title='current' class="not-installed-hosts-count" - {{action showHosts content.repositoryVersion.displayName content.notInstalledHosts target="App.router.mainStackVersionsController"}}> - {{notInstalledHostsCount}}/{{totalHostCount}} + {{action showHosts content.repositoryVersion.displayName content.noInstallFailedHosts target="App.router.mainStackVersionsController"}}> + {{content.installFailedHosts.length}}/{{totalHostCount}} </a> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/views/common/filter_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/filter_view.js b/ambari-web/app/views/common/filter_view.js index bdfea3d..e3503bc 100644 --- a/ambari-web/app/views/common/filter_view.js +++ b/ambari-web/app/views/common/filter_view.js @@ -581,6 +581,11 @@ module.exports = { return origin == compareValue; }; break; + case 'os': + return function (origin, compareValue) { + return origin.getEach('osType').contains(compareValue) + }; + break; case 'range': return function (origin, compareValue) { if (compareValue[1] && compareValue[0]) { http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/views/main/admin/stack_versions/repo_version_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/admin/stack_versions/repo_version_view.js b/ambari-web/app/views/main/admin/stack_versions/repo_version_view.js index c613a35..1031c9e 100644 --- a/ambari-web/app/views/main/admin/stack_versions/repo_version_view.js +++ b/ambari-web/app/views/main/admin/stack_versions/repo_version_view.js @@ -62,8 +62,9 @@ App.RepoVersionsView = App.TableView.extend({ }), osSort: sort.fieldView.extend({ column: 3, - name: 'operatingSystems', - displayName: Em.I18n.t('admin.stackVersions.table.header.os') + name: 'operatingSystems.length', + displayName: Em.I18n.t('admin.stackVersions.table.header.os'), + type: 'number' }), repoNameFilterView: filters.createSelectView({ @@ -96,11 +97,25 @@ App.RepoVersionsView = App.TableView.extend({ } }), - osFilterView: filters.createTextView({ + osFilterView: filters.createSelectView({ column: 3, fieldType: 'filter-input-width', + content: function () { + var names = App.OS.find().mapProperty('osType').uniq(); + return [ + { + value: '', + label: Em.I18n.t('common.all') + } + ].concat(names.map(function (name) { + return { + value: name, + label: name + } + })); + }.property('App.router.mainStackVersionsController.dataIsLoaded'), onChangeValue: function () { - this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'string'); + this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'os'); } }), http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js b/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js index eed0f6c..4cdcac5 100644 --- a/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js +++ b/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js @@ -27,7 +27,7 @@ App.MainStackVersionsDetailsView = Em.View.extend({ }.property('controller.content'), /** * text on install buttons - * {String} + * @type {String} */ stackTextStatus: function() { var self = this; @@ -39,20 +39,22 @@ App.MainStackVersionsDetailsView = Em.View.extend({ case 'INSTALLED': return Em.I18n.t('admin.stackVersions.datails.hosts.btn.nothing'); break; + //TODO remove INIT case if it would not be user case 'INIT': return Em.I18n.t('admin.stackVersions.datails.hosts.btn.install').format(self.get('totalHostCount') - self.get('content.installedHosts.length')); break; default: return self.get('content.state') && self.get('content.state').toCapital(); } - }.property('content.state', 'content.notInstalledHostStacks.length'), + }.property('content.state'), /** * class on install buttons - * {String} + * @type {String} */ statusClass: function() { switch (this.get('content.state')) { + //TODO remove INSTALL case if it would not be user case 'INSTALL': return 'btn-success'; break; @@ -70,7 +72,6 @@ App.MainStackVersionsDetailsView = Em.View.extend({ App.get('router.mainStackVersionsController').doPolling(); }, - willDestroyElement: function () { App.get('router.mainStackVersionsController').set('isPolling', false); clearTimeout(App.get('router.mainStackVersionsController.timeoutRef')); http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/app/views/main/admin/stack_versions/stack_version_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/admin/stack_versions/stack_version_view.js b/ambari-web/app/views/main/admin/stack_versions/stack_version_view.js index 1c14e37..41897fa 100644 --- a/ambari-web/app/views/main/admin/stack_versions/stack_version_view.js +++ b/ambari-web/app/views/main/admin/stack_versions/stack_version_view.js @@ -29,7 +29,7 @@ App.MainStackVersionsView = App.TableView.extend({ /** * return filtered number of all content number information displayed on the page footer bar - * @returns {String} + * @type {String} */ filteredContentInfo: function () { return this.t('tableView.filters.filteredConfigVersionInfo').format(this.get('filteredCount'), this.get('content.length')); @@ -65,8 +65,9 @@ App.MainStackVersionsView = App.TableView.extend({ }), osSort: sort.fieldView.extend({ column: 3, - name: 'repositoryVersionoperatingSystems', - displayName: Em.I18n.t('admin.stackVersions.table.header.os') + name: 'repositoryVersion.operatingSystems.length', + displayName: Em.I18n.t('admin.stackVersions.table.header.os'), + type: 'number' }), installedSort: sort.fieldView.extend({ column: 4, @@ -111,11 +112,25 @@ App.MainStackVersionsView = App.TableView.extend({ } }), - osFilterView: filters.createTextView({ + osFilterView: filters.createSelectView({ column: 3, fieldType: 'filter-input-width', + content: function () { + var names = App.OS.find().mapProperty('osType').uniq(); + return [ + { + value: '', + label: Em.I18n.t('common.all') + } + ].concat(names.map(function (name) { + return { + value: name, + label: name + } + })); + }.property('App.router.mainStackVersionsController.dataIsLoaded'), onChangeValue: function () { - this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'string'); + this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'os'); } }), @@ -141,7 +156,6 @@ App.MainStackVersionsView = App.TableView.extend({ this.get('controller').doPolling(); }, - willDestroyElement: function () { this.set('controller.isPolling', false); clearTimeout(this.get('controller.timeoutRef')); http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/test/controllers/main/admin/stack_version/repo_versions_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/admin/stack_version/repo_versions_controller_test.js b/ambari-web/test/controllers/main/admin/stack_version/repo_versions_controller_test.js index 0d979ae..90598ad 100644 --- a/ambari-web/test/controllers/main/admin/stack_version/repo_versions_controller_test.js +++ b/ambari-web/test/controllers/main/admin/stack_version/repo_versions_controller_test.js @@ -50,7 +50,7 @@ describe('App.RepoVersionsController', function () { }); describe('#load', function () { - it('', function () { + it('loads data by running loadRepoVersionsToModel', function () { sinon.stub(repoVersionsController, 'loadRepoVersionsToModel').returns({done: Em.K}); repoVersionsController.load(); expect(repoVersionsController.loadRepoVersionsToModel.calledOnce).to.be.true; @@ -58,7 +58,7 @@ describe('App.RepoVersionsController', function () { }); }); describe('#loadRepoVersionsToModel()', function () { - it('', function () { + it('loads data to model', function () { sinon.stub(App.HttpClient, 'get', Em.K); sinon.stub(repoVersionsController, 'getUrl', Em.K); sinon.stub(App.get('router.mainStackVersionsController'), 'loadStackVersionsToModel', function() { return $.Deferred().resolve()}); @@ -75,5 +75,30 @@ describe('App.RepoVersionsController', function () { }); }); + describe('#installStackVersionSuccess()', function () { + it('success callback for install stack version', function () { + var repoId = "1"; + var requestId = "2"; + var stackVersion = {repositoryVersion: {id: repoId}}; + sinon.stub(App.db, 'set', Em.K); + sinon.stub(App.get('router.mainStackVersionsController'), 'loadStackVersionsToModel', function() { return $.Deferred().resolve()}); + sinon.stub(App.router, 'transitionTo', Em.K); + sinon.stub(App.StackVersion, 'find', function() { + return [stackVersion]; + }); + + repoVersionsController.installStackVersionSuccess({Requests: {id: requestId}}, null, {id: repoId}); + expect(App.db.set.calledWith('stackUpgrade', 'id', [requestId])).to.be.true; + expect(App.get('router.mainStackVersionsController').loadStackVersionsToModel.calledOnce).to.be.true; + expect(App.StackVersion.find.calledOnce).to.be.true; + expect(App.router.transitionTo.calledWith('main.admin.adminStackVersions.version', stackVersion)).to.be.true; + + App.db.set.restore(); + App.get('router.mainStackVersionsController').loadStackVersionsToModel.restore(); + App.router.transitionTo.restore(); + App.StackVersion.find.restore(); + }); + }); + }); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js b/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js index 4fcf1dc..d449547 100644 --- a/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js +++ b/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js @@ -30,31 +30,14 @@ describe('App.MainStackVersionsDetailsController', function () { describe('#installStackVersion', function () { beforeEach(function() { sinon.stub(mainStackVersionsDetailsController, 'showProgressPopup', Em.K); - sinon.stub(mainStackVersionsDetailsController, 'doInstallStackVersion', Em.K); }); afterEach(function() { mainStackVersionsDetailsController.showProgressPopup.restore(); - mainStackVersionsDetailsController.doInstallStackVersion.restore(); }); it("shows installing proggress", function() { mainStackVersionsDetailsController.reopen({'installInProgress': true}); mainStackVersionsDetailsController.installStackVersion({}); expect(mainStackVersionsDetailsController.showProgressPopup.calledOnce).to.be.true; - expect(mainStackVersionsDetailsController.doInstallStackVersion.calledOnce).to.be.false; - }); - it("runs install stack version", function() { - mainStackVersionsDetailsController.reopen({'installInProgress': false}); - mainStackVersionsDetailsController.reopen({'allInstalled': false}); - mainStackVersionsDetailsController.installStackVersion({}); - expect(mainStackVersionsDetailsController.showProgressPopup.calledOnce).to.be.false; - expect(mainStackVersionsDetailsController.doInstallStackVersion.calledOnce).to.be.true; - }); - it("doesn't do anything", function() { - mainStackVersionsDetailsController.reopen({'installInProgress': false}); - mainStackVersionsDetailsController.reopen({'allInstalled': true}); - mainStackVersionsDetailsController.installStackVersion({}); - expect(mainStackVersionsDetailsController.showProgressPopup.calledOnce).to.be.false; - expect(mainStackVersionsDetailsController.doInstallStackVersion.calledOnce).to.be.false; }); }); @@ -72,21 +55,7 @@ describe('App.MainStackVersionsDetailsController', function () { var popupTitle = Em.I18n.t('admin.stackVersions.datails.install.hosts.popup.title').format("v1"); var requestIds =[1]; mainStackVersionsDetailsController.showProgressPopup(); - expect(App.router.get('highAvailabilityProgressPopupController').initPopup.calledWith(popupTitle, requestIds, mainStackVersionsDetailsController, true)).to.be.true; - }); - }); -/** TODO after implementing correct api - describe('#doInstallStackVersion', function () { - beforeEach(function() { - sinon.stub(App.ajax, 'send', Em.K); - }); - afterEach(function() { - App.ajax.send.restore(); - }); - it("runs initPopup", function() { - mainStackVersionsDetailsController.doInstallStackVersion(Em.Object.create({version: "1"})); - expect(App.ajax.send.calledOnce).to.be.true; + expect(App.router.get('highAvailabilityProgressPopupController').initPopup.calledWith(popupTitle, requestIds, mainStackVersionsDetailsController)).to.be.true; }); }); -*/ }); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/59fa68e7/ambari-web/test/controllers/main/admin/stack_version/stack_versions_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/admin/stack_version/stack_versions_controller_test.js b/ambari-web/test/controllers/main/admin/stack_version/stack_versions_controller_test.js new file mode 100644 index 0000000..402b3d7 --- /dev/null +++ b/ambari-web/test/controllers/main/admin/stack_version/stack_versions_controller_test.js @@ -0,0 +1,55 @@ +/** + * 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 App = require('app'); +require('controllers/main/admin/stack_versions/stack_versions_controller'); +var controller; + +describe('App.MainStackVersionsController', function () { + + beforeEach(function () { + controller = App.MainStackVersionsController.create(); + }); + + describe('#load()', function () { + it('loads data to model by running loadStackVersionsToModel', function () { + sinon.stub(controller, 'loadStackVersionsToModel').returns({done: Em.K}); + + controller.load(); + expect(controller.loadStackVersionsToModel.calledOnce).to.be.true; + + controller.loadConfigVersionsToModel.restore(); + }); + }); + + describe('#loadStackVersionsToModel()', function () { + it('loads data to model', function () { + sinon.stub(App.HttpClient, 'get', Em.K); + sinon.stub(controller, 'getUrl', Em.K); + + controller.loadConfigVersionsToModel(); + expect(App.HttpClient.get.calledOnce).to.be.true; + expect(controller.getUrl.calledWith([1])).to.be.true; + + + controller.getUrl.restore(); + App.HttpClient.get.restore(); + }); + }); +}); \ No newline at end of file