Return-Path: X-Original-To: apmail-incubator-ambari-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-ambari-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 24611C96E for ; Fri, 25 Jan 2013 04:50:21 +0000 (UTC) Received: (qmail 62457 invoked by uid 500); 25 Jan 2013 04:50:21 -0000 Delivered-To: apmail-incubator-ambari-commits-archive@incubator.apache.org Received: (qmail 62399 invoked by uid 500); 25 Jan 2013 04:50:20 -0000 Mailing-List: contact ambari-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@incubator.apache.org Delivered-To: mailing list ambari-commits@incubator.apache.org Received: (qmail 62381 invoked by uid 99); 25 Jan 2013 04:50:19 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 25 Jan 2013 04:50:19 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 25 Jan 2013 04:50:17 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 292DC23888CD; Fri, 25 Jan 2013 04:49:58 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1438325 - in /incubator/ambari/trunk: ./ ambari-web/app/ ambari-web/app/assets/data/wizard/bootstrap/ ambari-web/app/controllers/wizard/ ambari-web/app/styles/ ambari-web/app/templates/wizard/ ambari-web/app/views/common/ Date: Fri, 25 Jan 2013 04:49:57 -0000 To: ambari-commits@incubator.apache.org From: yusaku@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130125044958.292DC23888CD@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: yusaku Date: Fri Jan 25 04:49:57 2013 New Revision: 1438325 URL: http://svn.apache.org/viewvc?rev=1438325&view=rev Log: AMBARI-1258. Display host check status results given by the agent as part of host registration. (yusaku) Added: incubator/ambari/trunk/ambari-web/app/assets/data/wizard/bootstrap/two_hosts_information.json incubator/ambari/trunk/ambari-web/app/templates/wizard/step3_host_warnings_popup.hbs Modified: incubator/ambari/trunk/CHANGES.txt incubator/ambari/trunk/ambari-web/app/controllers/wizard/step3_controller.js incubator/ambari/trunk/ambari-web/app/messages.js incubator/ambari/trunk/ambari-web/app/styles/application.less incubator/ambari/trunk/ambari-web/app/templates/wizard/step3.hbs incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js Modified: incubator/ambari/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1438325&r1=1438324&r2=1438325&view=diff ============================================================================== --- incubator/ambari/trunk/CHANGES.txt (original) +++ incubator/ambari/trunk/CHANGES.txt Fri Jan 25 04:49:57 2013 @@ -12,6 +12,9 @@ Trunk (unreleased changes): NEW FEATURES + AMBARI-1180. Display host check status results given by the agent as part + of host registration. (yusaku) + AMBARI-1252. Fetch Nagios alerts through Ambari Server and not directly from Nagios Server. (srimanth via yusaku) Added: incubator/ambari/trunk/ambari-web/app/assets/data/wizard/bootstrap/two_hosts_information.json URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/assets/data/wizard/bootstrap/two_hosts_information.json?rev=1438325&view=auto ============================================================================== --- incubator/ambari/trunk/ambari-web/app/assets/data/wizard/bootstrap/two_hosts_information.json (added) +++ incubator/ambari/trunk/ambari-web/app/assets/data/wizard/bootstrap/two_hosts_information.json Fri Jan 25 04:49:57 2013 @@ -0,0 +1,512 @@ +{ + "href" : "http://ec2-107-20-107-224.compute-1.amazonaws.com:8080/api/v1/hosts?fields=*", + "items" : [ + { + "href" : "http://ec2-107-20-107-224.compute-1.amazonaws.com:8080/api/v1/hosts/ip-10-190-153-220.ec2.internal", + "Hosts" : { + "host_status" : "HEALTHY", + "public_host_name" : "ec2-50-19-188-43.compute-1.amazonaws.com", + "cpu_count" : 2, + "rack_info" : "/default-rack", + "host_health_report" : "", + "os_arch" : "x86_64", + "host_name" : "ip-10-190-153-220.ec2.internal", + "disk_info" : [ + { + "available" : "3822572", + "used" : "2022188", + "percent" : "35%", + "size" : "5904748", + "type" : "ext3", + "mountpoint" : "/" + }, + { + "available" : "3932160", + "used" : "0", + "percent" : "0%", + "size" : "3932160", + "type" : "tmpfs", + "mountpoint" : "/dev/shm" + }, + { + "available" : "411234588", + "used" : "203012", + "percent" : "1%", + "size" : "433455904", + "type" : "ext3", + "mountpoint" : "/grid/0" + }, + { + "available" : "411234588", + "used" : "203012", + "percent" : "1%", + "size" : "433455904", + "type" : "ext3", + "mountpoint" : "/grid/1" + } + ], + "ip" : "10.190.153.220", + "os_type" : "redhat5", + "last_heartbeat_time" : 1358871154566, + "host_state" : "HEALTHY", + "last_agent_env" : { + "paths" : [ + { + "name" : "/etc/hadoop", + "type" : "not_exist" + }, + { + "name" : "/etc/hadoop/conf", + "type" : "not_exist" + }, + { + "name" : "/etc/hbase", + "type" : "not_exist" + }, + { + "name" : "/etc/hcatalog", + "type" : "not_exist" + }, + { + "name" : "/etc/hive", + "type" : "not_exist" + }, + { + "name" : "/etc/oozie", + "type" : "not_exist" + }, + { + "name" : "/etc/sqoop", + "type" : "not_exist" + }, + { + "name" : "/etc/ganglia", + "type" : "not_exist" + }, + { + "name" : "/etc/nagios", + "type" : "not_exist" + }, + { + "name" : "/var/run/hadoop", + "type" : "not_exist" + }, + { + "name" : "/var/run/zookeeper", + "type" : "not_exist" + }, + { + "name" : "/var/run/hbase", + "type" : "not_exist" + }, + { + "name" : "/var/run/templeton", + "type" : "not_exist" + }, + { + "name" : "/var/run/oozie", + "type" : "not_exist" + }, + { + "name" : "/var/log/hadoop", + "type" : "not_exist" + }, + { + "name" : "/var/log/zookeeper", + "type" : "not_exist" + }, + { + "name" : "/var/log/hbase", + "type" : "not_exist" + }, + { + "name" : "/var/run/templeton", + "type" : "not_exist" + }, + { + "name" : "/var/log/hive", + "type" : "not_exist" + }, + { + "name" : "/var/log/nagios", + "type" : "not_exist" + } + ], + "javaProcs" : [ ], + "rpms" : [ + { + "name" : "yum", + "installed" : true, + "version" : "yum-3.2.22-39.el5" + }, + { + "name" : "rpm", + "installed" : true, + "version" : "rpm-4.4.2.3-27.el5" + }, + { + "name" : "openssl", + "installed" : true, + "version" : "openssl-0.9.8e-22.el5\nopenssl-0.9.8e-22.el5" + }, + { + "name" : "curl", + "installed" : true, + "version" : "curl-7.15.5-15.el5\ncurl-7.15.5-15.el5" + }, + { + "name" : "wget", + "installed" : false + }, + { + "name" : "net-snmp", + "installed" : true, + "version" : "net-snmp-5.3.2.2-17.el5" + }, + { + "name" : "ntpd", + "installed" : false + }, + { + "name" : "ruby", + "installed" : true, + "version" : "ruby-1.8.5-24.el5" + }, + { + "name" : "puppet", + "installed" : false + }, + { + "name" : "nagios", + "installed" : false + }, + { + "name" : "ganglia", + "installed" : false + }, + { + "name" : "passenger", + "installed" : false + }, + { + "name" : "hadoop", + "installed" : false + }, + { + "name" : "hbase", + "installed" : false + }, + { + "name" : "oozie", + "installed" : false + }, + { + "name" : "sqoop", + "installed" : false + }, + { + "name" : "pig", + "installed" : false + }, + { + "name" : "zookeeper", + "installed" : false + }, + { + "name" : "hive", + "installed" : false + }, + { + "name" : "libconfuse", + "installed" : false + }, + { + "name" : "postgresql", + "installed" : true, + "version" : "postgresql-8.1.23-1.el5_7.3" + }, + { + "name" : "httpd", + "installed" : true, + "version" : "httpd-2.2.3-63.el5" + }, + { + "name" : "apache2", + "installed" : false + }, + { + "name" : "http-server", + "installed" : false + } + ], + "varRunHadoopPidCount" : 0, + "varLogHadoopLogCount" : 0, + "etcAlternativesConf" : [ ], + "repoInfo" : "Loaded plugins: amazon-id, fastestmirror, rhui-lb, security\nrepo id repo name status\nAMBARI.dev-1.x Ambari 1.x 6\nHDP-UTILS-1.1.0.15 Hortonworks Data Platform Utils Versi 51\nepel Extra Packages for Enterprise Linux 5 7243\nrhui-us-east-client-config-server-5 Red Hat Update Infrastructure 2.0 Cli 1\nrhui-us-east-rhel-server Red Hat Enterprise Linux Server 5 (RP 14819\nrepolist: 22120\n" + }, + "last_registration_time" : 1358871040696, + "total_mem" : 7864320 + } + }, + { + "href" : "http://ec2-107-20-107-224.compute-1.amazonaws.com:8080/api/v1/hosts/domU-12-31-39-14-04-91.compute-1.internal", + "Hosts" : { + "host_status" : "HEALTHY", + "public_host_name" : "ec2-107-20-107-224.compute-1.amazonaws.com", + "cpu_count" : 2, + "rack_info" : "/default-rack", + "host_health_report" : "", + "os_arch" : "x86_64", + "host_name" : "domU-12-31-39-14-04-91.compute-1.internal", + "disk_info" : [ + { + "available" : "3400492", + "used" : "2444268", + "percent" : "42%", + "size" : "5904748", + "type" : "ext3", + "mountpoint" : "/" + }, + { + "available" : "3932160", + "used" : "0", + "percent" : "0%", + "size" : "3932160", + "type" : "tmpfs", + "mountpoint" : "/dev/shm" + }, + { + "available" : "411234588", + "used" : "203012", + "percent" : "1%", + "size" : "433455904", + "type" : "ext3", + "mountpoint" : "/grid/0" + }, + { + "available" : "411234588", + "used" : "203012", + "percent" : "1%", + "size" : "433455904", + "type" : "ext3", + "mountpoint" : "/grid/1" + } + ], + "ip" : "10.206.7.95", + "os_type" : "redhat5", + "last_heartbeat_time" : 1358871154070, + "host_state" : "HEALTHY", + "last_agent_env" : { + "paths" : [ + { + "name" : "/etc/hadoop", + "type" : "directory" + }, + { + "name" : "/etc/hadoop/conf", + "type" : "file" + }, + { + "name" : "/etc/hbase", + "type" : "not_exist" + }, + { + "name" : "/etc/hcatalog", + "type" : "not_exist" + }, + { + "name" : "/etc/hive", + "type" : "not_exist" + }, + { + "name" : "/etc/oozie", + "type" : "not_exist" + }, + { + "name" : "/etc/sqoop", + "type" : "not_exist" + }, + { + "name" : "/etc/ganglia", + "type" : "not_exist" + }, + { + "name" : "/etc/nagios", + "type" : "not_exist" + }, + { + "name" : "/var/run/hadoop", + "type" : "not_exist" + }, + { + "name" : "/var/run/zookeeper", + "type" : "not_exist" + }, + { + "name" : "/var/run/hbase", + "type" : "not_exist" + }, + { + "name" : "/var/run/templeton", + "type" : "not_exist" + }, + { + "name" : "/var/run/oozie", + "type" : "not_exist" + }, + { + "name" : "/var/log/hadoop", + "type" : "not_exist" + }, + { + "name" : "/var/log/zookeeper", + "type" : "not_exist" + }, + { + "name" : "/var/log/hbase", + "type" : "not_exist" + }, + { + "name" : "/var/run/templeton", + "type" : "not_exist" + }, + { + "name" : "/var/log/hive", + "type" : "not_exist" + }, + { + "name" : "/var/log/nagios", + "type" : "not_exist" + } + ], + "javaProcs" : [ + { + "user" : "root", + "pid" : 2283, + "command" : "/bin/sh -c /usr/jdk64/jdk1.6.0_31/bin/java -server -XX:NewRatio=2 -XX:+UseConcMarkSweepGC -Xms512m -Xmx2048m -cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lib/ambari-server/* org.apache.ambari.server.controller.AmbariServer >/var/log/ambari-server/ambari-server.out 2>&1", + "hadoop" : true + }, + { + "user" : "root", + "pid" : 2284, + "command" : "/usr/jdk64/jdk1.6.0_31/bin/java -server -XX:NewRatio=2 -XX:+UseConcMarkSweepGC -Xms512m -Xmx2048m -cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lib/ambari-server/* org.apache.ambari.server.controller.AmbariServer", + "hadoop" : false + } + ], + "rpms" : [ + { + "name" : "yum", + "installed" : true, + "version" : "yum-3.2.22-39.el5" + }, + { + "name" : "rpm", + "installed" : true, + "version" : "rpm-4.4.2.3-27.el5" + }, + { + "name" : "openssl", + "installed" : true, + "version" : "openssl-0.9.8e-22.el5\nopenssl-0.9.8e-22.el5" + }, + { + "name" : "curl", + "installed" : true, + "version" : "curl-7.15.5-15.el5\ncurl-7.15.5-15.el5" + }, + { + "name" : "wget", + "installed" : false + }, + { + "name" : "net-snmp", + "installed" : true, + "version" : "net-snmp-5.3.2.2-17.el5" + }, + { + "name" : "ntpd", + "installed" : false + }, + { + "name" : "ruby", + "installed" : true, + "version" : "ruby-1.8.5-24.el5" + }, + { + "name" : "puppet", + "installed" : false + }, + { + "name" : "nagios", + "installed" : false + }, + { + "name" : "ganglia", + "installed" : false + }, + { + "name" : "passenger", + "installed" : false + }, + { + "name" : "hadoop", + "installed" : false + }, + { + "name" : "hbase", + "installed" : false + }, + { + "name" : "oozie", + "installed" : false + }, + { + "name" : "sqoop", + "installed" : false + }, + { + "name" : "pig", + "installed" : false + }, + { + "name" : "zookeeper", + "installed" : false + }, + { + "name" : "hive", + "installed" : false + }, + { + "name" : "libconfuse", + "installed" : false + }, + { + "name" : "postgresql", + "installed" : true, + "version" : "postgresql-8.1.23-6.el5_8" + }, + { + "name" : "httpd", + "installed" : true, + "version" : "httpd-2.2.3-63.el5" + }, + { + "name" : "apache2", + "installed" : false + }, + { + "name" : "http-server", + "installed" : false + } + ], + "varRunHadoopPidCount" : 0, + "varLogHadoopLogCount" : 0, + "etcAlternativesConf" : [ ], + "repoInfo" : "Loaded plugins: amazon-id, fastestmirror, rhui-lb, security\nrepo id repo name status\nAMBARI.dev-1.x Ambari 1.x 6\nHDP-UTILS-1.1.0.15 Hortonworks Data Platform Utils Versi 51\nepel Extra Packages for Enterprise Linux 5 7243\nrhui-us-east-client-config-server-5 Red Hat Update Infrastructure 2.0 Cli 1\nrhui-us-east-rhel-server Red Hat Enterprise Linux Server 5 (RP 14819\nrepolist: 22120\n" + }, + "last_registration_time" : 1358870784262, + "total_mem" : 7864320 + } + } + ] +} Modified: incubator/ambari/trunk/ambari-web/app/controllers/wizard/step3_controller.js URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/controllers/wizard/step3_controller.js?rev=1438325&r1=1438324&r2=1438325&view=diff ============================================================================== --- incubator/ambari/trunk/ambari-web/app/controllers/wizard/step3_controller.js (original) +++ incubator/ambari/trunk/ambari-web/app/controllers/wizard/step3_controller.js Fri Jan 25 04:49:57 2013 @@ -99,6 +99,9 @@ App.WizardStep3Controller = Em.Controlle navigateStep: function () { this.loadStep(); + if(App.testMode){ + this.getHostInfo(); + } if (this.get('content.installOptions.manualInstall') !== true) { if (!App.db.getBootStatus()) { this.startBootstrap(); @@ -109,7 +112,6 @@ App.WizardStep3Controller = Em.Controlle this.get('bootHosts').setEach('bootStatus', 'REGISTERED'); this.get('bootHosts').setEach('cpu', '2'); this.get('bootHosts').setEach('memory', '2000000'); - this.getHostInfo(); } else { this.set('registrationStartedAt', null); this.get('bootHosts').setEach('bootStatus', 'DONE'); @@ -479,7 +481,7 @@ App.WizardStep3Controller = Em.Controlle var self = this; var kbPerGb = 1024; var hosts = this.get('bootHosts'); - var url = App.testMode ? '/data/wizard/bootstrap/single_host_information.json' : App.apiPrefix + '/hosts?fields=Hosts/total_mem,Hosts/cpu_count,Hosts/disk_info'; + var url = App.testMode ? '/data/wizard/bootstrap/two_hosts_information.json' : App.apiPrefix + '/hosts?fields=Hosts/total_mem,Hosts/cpu_count,Hosts/disk_info,Hosts/last_agent_env'; var method = 'GET'; $.ajax({ type: 'GET', @@ -488,6 +490,7 @@ App.WizardStep3Controller = Em.Controlle timeout: App.timeout, success: function (data) { var jsonData = (App.testMode) ? data : jQuery.parseJSON(data); + self.parseWarnings(jsonData); hosts.forEach(function (_host) { var host = (App.testMode) ? jsonData.items[0] : jsonData.items.findProperty('Hosts.host_name', _host.name); if (App.skipBootstrap) { @@ -586,6 +589,308 @@ App.WizardStep3Controller = Em.Controlle }) }); }, + /** + * check warnings from server and put it in parsing + */ + rerunChecks: function(){ + var self = this; + var url = App.testMode ? '/data/wizard/bootstrap/two_hosts_information.json' : App.apiPrefix + '/hosts?fields=Hosts/last_agent_env'; + var currentProgress = 0; + var interval = setInterval(function(){ + self.set('checksUpdateProgress', Math.ceil((++currentProgress/60)*100)) + }, 1000); + setTimeout(function(){ + clearInterval(interval); + $.ajax({ + type: 'GET', + url: url, + contentType: 'application/json', + timeout: App.timeout, + success: function (data) { + var jsonData = (App.testMode) ? data : jQuery.parseJSON(data); + self.set('checksUpdateProgress', 100); + self.set('checksUpdateStatus', 'SUCCESS'); + self.parseWarnings(jsonData); + }, + error: function () { + self.set('checksUpdateProgress', 100); + self.set('checksUpdateStatus', 'FAILED'); + console.log('INFO: Getting host information(last_agent_env) from the server failed'); + }, + statusCode: require('data/statusCodes') + }) + }, this.get('warningsTimeInterval')); + + }, + warnings: [], + warningsTimeInterval: 60000, + /** + * check are hosts have any warnings + */ + isHostHaveWarnings: function(){ + var isWarning = false; + this.get('warnings').forEach(function(warning){ + if(!isWarning && (warning.directoriesFiles.someProperty('isWarn', true) || + warning.packages.someProperty('isWarn', true) || + warning.processes.someProperty('isWarn', true))){ + isWarning = true; + } + }, this); + return isWarning; + }.property('warnings'), + isWarningsBoxVisible: function(){ + return (App.testMode) ? true : !this.get('isSubmitDisabled'); + }.property('isSubmitDisabled'), + checksUpdateProgress:0, + checksUpdateStatus: null, + /** + * parse warnings data for each host and total + * @param data + */ + parseWarnings: function(data){ + var warnings = []; + var totalWarnings = { + hostName: 'All Hosts', + directoriesFiles: [], + packages: [], + processes: [] + } + //alphabetical sorting + var sortingFunc = function(a, b){ + var a1= a.name, b1= b.name; + if(a1== b1) return 0; + return a1> b1? 1: -1; + } + data.items.forEach(function(host){ + var warningsByHost = { + hostName: host.Hosts.host_name, + directoriesFiles: [], + packages: [], + processes: [] + }; + + //render all directories and files for each host + host.Hosts.last_agent_env.paths.forEach(function(path){ + var parsedPath = { + name: path.name, + isWarn: (path.type == 'not_exist') ? false : true, + message: (path.type == 'not_exist') ? 'OK' : 'WARN: already exists on host' + } + warningsByHost.directoriesFiles.push(parsedPath); + // parsing total warnings + if(!totalWarnings.directoriesFiles.someProperty('name', parsedPath.name)){ + totalWarnings.directoriesFiles.push({ + name:parsedPath.name, + isWarn: parsedPath.isWarn, + message: (parsedPath.isWarn) ? 'WARN: already exists on 1 host': 'OK', + warnCount: (parsedPath.isWarn) ? 1 : 0 + }) + } else if(parsedPath.isWarn){ + totalWarnings.directoriesFiles.forEach(function(item, index){ + if(item.name == parsedPath.name){ + totalWarnings.directoriesFiles[index].isWarn = true; + totalWarnings.directoriesFiles[index].warnCount++; + totalWarnings.directoriesFiles[index].message = 'WARN: already exists on '+ totalWarnings.directoriesFiles[index].warnCount +' hosts'; + } + }); + } + }, this); + + //render all packages for each host + host.Hosts.last_agent_env.rpms.forEach(function(_package){ + var parsedPackage = { + name: _package.name, + isWarn: _package.installed, + message: (_package.installed) ? 'WARN: already installed on host' : 'OK' + } + warningsByHost.packages.push(parsedPackage); + // parsing total warnings + if(!totalWarnings.packages.someProperty('name', parsedPackage.name)){ + totalWarnings.packages.push({ + name:parsedPackage.name, + isWarn: parsedPackage.isWarn, + message: (parsedPackage.isWarn) ? 'WARN: already exists on 1 host': 'OK', + warnCount: (parsedPackage.isWarn) ? 1 : 0 + }) + } else if(parsedPackage.isWarn){ + totalWarnings.packages.forEach(function(item, index){ + if(item.name == parsedPackage.name){ + totalWarnings.packages[index].isWarn = true; + totalWarnings.packages[index].warnCount++; + totalWarnings.packages[index].message = 'WARN: already exists on '+ totalWarnings.packages[index].warnCount +' hosts'; + } + }); + } + }, this); + + // render all process for each host + host.Hosts.last_agent_env.javaProcs.forEach(function(process){ + var parsedProcess = { + user: process.user, + isWarn: process.hadoop, + pid: process.pid, + command: process.command, + shortCommand: (process.command.substr(0, 15)+'...'), + message: (process.hadoop) ? 'WARN: running on host' : 'OK' + } + warningsByHost.processes.push(parsedProcess); + // parsing total warnings + if(!totalWarnings.processes.someProperty('pid', parsedProcess.name)){ + totalWarnings.processes.push({ + user: process.user, + pid: process.pid, + command: process.command, + shortCommand: (process.command.substr(0, 15)+'...'), + isWarn: parsedProcess.isWarn, + message: (parsedProcess.isWarn) ? 'WARN: running on 1 host': 'OK', + warnCount: (parsedProcess.isWarn) ? 1 : 0 + }) + } else if(parsedProcess.isWarn){ + totalWarnings.processes.forEach(function(item, index){ + if(item.pid == parsedProcess.pid){ + totalWarnings.processes[index].isWarn = true; + totalWarnings.processes[index].warnCount++; + totalWarnings.processes[index].message = 'WARN: running on '+ totalWarnings.processes[index].warnCount +' hosts'; + } + }); + } + }, this); + warningsByHost.directoriesFiles.sort(sortingFunc); + warningsByHost.packages.sort(sortingFunc); + warnings.push(warningsByHost); + }, this); + + totalWarnings.directoriesFiles.sort(sortingFunc); + totalWarnings.packages.sort(sortingFunc); + warnings.unshift(totalWarnings); + this.set('warnings', warnings); + }, + /** + * open popup that contain hosts' warnings + * @param event + */ + hostWarningsPopup: function(event){ + var self = this; + App.ModalPopup.show({ + + header: Em.I18n.t('installer.step3.warnings.popup.header'), + secondary: 'Rerun Checks', + primary: 'Close', + onPrimary: function () { + self.set('checksUpdateStatus', null); + this.hide(); + }, + onClose: function(){ + self.set('checksUpdateStatus', null); + this.hide(); + }, + onSecondary: function() { + self.rerunChecks(); + }, + + footerClass: Ember.View.extend({ + template: Ember.Handlebars.compile([ + '
', + '{{#if view.isUpdateInProgress}}', + '
', + '
', + '{{else}}', + '{{/if}}
', + '{{#if view.parentView.secondary}}{{/if}}', + '{{#if view.parentView.primary}}{{/if}}' + ].join('')), + classNames: ['modal-footer', 'host-checks-update'], + progressWidth: function(){ + return 'width:'+App.router.get('wizardStep3Controller.checksUpdateProgress')+'%'; + }.property('App.router.wizardStep3Controller.checksUpdateProgress'), + isUpdateInProgress: function(){ + if((App.router.get('wizardStep3Controller.checksUpdateProgress') > 0) && + (App.router.get('wizardStep3Controller.checksUpdateProgress') < 100)){ + return true; + } + }.property('App.router.wizardStep3Controller.checksUpdateProgress'), + updateStatusClass:function(){ + var status = App.router.get('wizardStep3Controller.checksUpdateStatus'); + if(status === 'SUCCESS'){ + return 'text-success'; + } else if(status === 'FAILED'){ + return 'text-error'; + } else { + return null; + } + }.property('App.router.wizardStep3Controller.checksUpdateStatus'), + updateStatus:function(){ + var status = App.router.get('wizardStep3Controller.checksUpdateStatus'); + if(status === 'SUCCESS'){ + return Em.I18n.t('installer.step3.warnings.updateChecks.success'); + } else if(status === 'FAILED'){ + return Em.I18n.t('installer.step3.warnings.updateChecks.failed'); + } else { + return null; + } + }.property('App.router.wizardStep3Controller.checksUpdateStatus') + }), + + bodyClass: Ember.View.extend({ + templateName: require('templates/wizard/step3_host_warnings_popup'), + warnings: function(){ + return App.router.get('wizardStep3Controller.warnings'); + }.property('App.router.wizardStep3Controller.warnings'), + categories: function(){ + var categories = this.get('warnings').getEach('hostName'); + return categories; + }.property('warnings'), + category: 'All Hosts', + content: function(){ + return this.get('warnings').findProperty('hostName', this.get('category')); + }.property('category', 'warnings'), + /** + * generate detailed content to show it in new window + */ + contentInDetails: function(){ + var content = this.get('content'); + var newContent = ''; + if(content.hostName == 'All Hosts'){ + newContent += '

Warnings across all hosts

'; + } else { + newContent += '

Warnings on ' + content.hostName + '

'; + } + newContent += '
DIRECTORIES AND FILES
'; + content.directoriesFiles.filterProperty('isWarn', true).forEach(function(path){ + newContent += path.name + ' ' + }); + if(content.directoriesFiles.filterProperty('isWarn', true).length == 0){ + newContent += 'No warnings'; + } + newContent += '

PACKAGES
'; + content.packages.filterProperty('isWarn', true).forEach(function(_package){ + newContent += _package.name + ' ' + }); + if(content.packages.filterProperty('isWarn', true).length == 0){ + newContent += 'No warnings'; + } + newContent += '

PROCESSES
'; + content.processes.filterProperty('isWarn', true).forEach(function(process, index){ + newContent += '(' + content.hostName + ',' + process.pid + ',' + process.user + ')'; + newContent += (index != (content.processes.filterProperty('isWarn', true).length-1)) ? ',' : ''; + }) + if(content.processes.filterProperty('isWarn', true).length == 0){ + newContent += 'No warnings'; + } + return newContent; + }.property('content'), + /** + * open new browser tab with detailed content + */ + openWarningsInDialog: function(){ + var newWindow = window.open('', this.get('category')+' warnings'); + var newDocument = newWindow.document; + newDocument.write(this.get('contentInDetails')); + newWindow.focus(); + } + }) + }) + }, // TODO: dummy button. Remove this after the hook up with actual REST API. mockBtn: function () { Modified: incubator/ambari/trunk/ambari-web/app/messages.js URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/messages.js?rev=1438325&r1=1438324&r2=1438325&view=diff ============================================================================== --- incubator/ambari/trunk/ambari-web/app/messages.js (original) +++ incubator/ambari/trunk/ambari-web/app/messages.js Fri Jan 25 04:49:57 2013 @@ -122,6 +122,12 @@ Em.I18n.translations = { 'installer.step3.hostInformation.popup.header':'Error in retrieving host Information', 'installer.step3.hostInformation.popup.body' : 'All bootstrapped hosts registered but unable to retrieve cpu and memory related information', 'installer.step3.hosts.noHosts':'No hosts to display', + 'installer.step3.warnings.popup.header':'Host Checks', + 'installer.step3.warnings.description':'Some warnings were encountered while performing checks against the above hosts.', + 'installer.step3.warnings.linkText':'Click here to see the warnings.', + 'installer.step3.warnings.noWarnings':'All host checks were successful.', + 'installer.step3.warnings.updateChecks.success':'Host Checks successfully updated', + 'installer.step3.warnings.updateChecks.failed':'Host Checks update failed', 'installer.step4.header':'Choose Services', 'installer.step4.body':'Choose which services you want to install on your cluster.', Modified: incubator/ambari/trunk/ambari-web/app/styles/application.less URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/styles/application.less?rev=1438325&r1=1438324&r2=1438325&view=diff ============================================================================== --- incubator/ambari/trunk/ambari-web/app/styles/application.less (original) +++ incubator/ambari/trunk/ambari-web/app/styles/application.less Fri Jan 25 04:49:57 2013 @@ -1414,6 +1414,38 @@ a:focus { } } +#host-warnings { + .warnings-list{ + table { + margin-bottom: 0; + margin-top: 5px; + td { + width: 50%; + i { + font-size:16px; + margin: 2px; + } + } + } + .category-title { + padding: 3px; + text-align: left; + background-color: rgb(196, 193, 193); + } + } +} +.host-checks-update { + button { + margin-left: 5px; + } + .update-progress { + width: 230px; + .progress { + margin-bottom: 0; + } + } +} + #host-details { margin-top: 27px; Modified: incubator/ambari/trunk/ambari-web/app/templates/wizard/step3.hbs URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/wizard/step3.hbs?rev=1438325&r1=1438324&r2=1438325&view=diff ============================================================================== --- incubator/ambari/trunk/ambari-web/app/templates/wizard/step3.hbs (original) +++ incubator/ambari/trunk/ambari-web/app/templates/wizard/step3.hbs Fri Jan 25 04:49:57 2013 @@ -124,6 +124,18 @@
+ {{#if isWarningsBoxVisible}} + {{#if isHostHaveWarnings}} +
+ {{t installer.step3.warnings.description}}
+ {{t installer.step3.warnings.linkText}} +
+ {{else}} +
+ {{t installer.step3.warnings.noWarnings}} +
+ {{/if}} + {{/if}}
← Back Next → Added: incubator/ambari/trunk/ambari-web/app/templates/wizard/step3_host_warnings_popup.hbs URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/wizard/step3_host_warnings_popup.hbs?rev=1438325&view=auto ============================================================================== --- incubator/ambari/trunk/ambari-web/app/templates/wizard/step3_host_warnings_popup.hbs (added) +++ incubator/ambari/trunk/ambari-web/app/templates/wizard/step3_host_warnings_popup.hbs Fri Jan 25 04:49:57 2013 @@ -0,0 +1,112 @@ +{{! +* 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. +}} + + +
+
+
+ {{view Ember.Select + contentBinding="view.categories" + selectionBinding="view.category" + }} +
+ +
+
+
+ + + + + + + + {{#each path in view.content.directoriesFiles}} + + + + + {{/each}} + +
DIRECTORIES & FILES
{{path.name}} + + {{#if path.isWarn}} + + {{else}} + + {{/if}} + {{path.message}} + +
+ + + + + + + + {{#each package in view.content.packages}} + + + + + {{/each}} + +
PACKAGES
{{package.name}} + + {{#if package.isWarn}} + + {{else}} + + {{/if}} + {{package.message}} + +
+ + + + + + + + {{#if view.content.processes.length}} + {{#each process in view.content.processes}} + + + + + {{/each}} + {{else}} + + {{/if}} + +
PROCESSES
{{process.shortCommand}}} + + {{#if process.isWarn}} + + {{else}} + + {{/if}} + {{process.message}} + +
No processes to display
+
+
+
Modified: incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js?rev=1438325&r1=1438324&r2=1438325&view=diff ============================================================================== --- incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js (original) +++ incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js Fri Jan 25 04:49:57 2013 @@ -34,11 +34,15 @@ App.ModalPopup = Ember.View.extend({ '{{else}}{{#if encodeBody}}{{body}}{{else}}{{{body}}}{{/if}}{{/if}}', '
', '{{#if showFooter}}', + '{{#if footerClass}}{{view footerClass}}', + '{{else}}', '', '{{/if}}', + '{{/if}}', + '' ].join('\n')),