You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2016/10/19 15:47:02 UTC

[2/2] ambari git commit: AMBARI-18628. Usability: Ability to run host checks post-install on the Host page (alexantonenko)

AMBARI-18628. Usability: Ability to run host checks post-install on the Host page (alexantonenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/dedcdf9a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/dedcdf9a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/dedcdf9a

Branch: refs/heads/trunk
Commit: dedcdf9aff6da5d63debf82cb713eaa9eb268618
Parents: 3d6ddc2
Author: Alex Antonenko <hi...@gmail.com>
Authored: Wed Oct 19 13:53:51 2016 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Wed Oct 19 18:46:54 2016 +0300

----------------------------------------------------------------------
 ambari-web/app/controllers/main/host/details.js |  124 +-
 .../app/controllers/wizard/step3_controller.js  | 1170 +----------------
 ambari-web/app/messages.js                      |    2 +
 ambari-web/app/mixins.js                        |    1 +
 .../main/host/details/actions/check_host.js     | 1187 ++++++++++++++++++
 .../wizard/step3/step3_host_warnings_popup.hbs  |  165 +--
 ambari-web/app/views/main/host/details.js       |    6 +
 7 files changed, 1409 insertions(+), 1246 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/dedcdf9a/ambari-web/app/controllers/main/host/details.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host/details.js b/ambari-web/app/controllers/main/host/details.js
index 2076333..848e6f8 100644
--- a/ambari-web/app/controllers/main/host/details.js
+++ b/ambari-web/app/controllers/main/host/details.js
@@ -22,7 +22,7 @@ var hostsManagement = require('utils/hosts');
 var stringUtils = require('utils/string_utils');
 require('utils/configs/add_component_config_initializer');
 
-App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDownload, App.InstallComponent, App.InstallNewVersion, {
+App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDownload, App.InstallComponent, App.InstallNewVersion, App.CheckHostMixin, {
 
   name: 'mainHostDetailsController',
 
@@ -33,6 +33,12 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow
   content: null,
 
   /**
+   * Is check host procedure finished
+   * @type {bool}
+   */
+  checkHostFinished: null,
+
+  /**
    * Does user come from hosts page
    * @type {bool}
    */
@@ -1911,6 +1917,9 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow
       case "setRackId":
         this.setRackIdForHost();
         break;
+      case "checkHost":
+        this.runHostCheckConfirmation();
+        break;
     }
   },
 
@@ -2129,6 +2138,119 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow
   },
 
   /**
+   * Run host check confirmation
+   * @method runHostCheckConfirmation
+   */
+  runHostCheckConfirmation: function () {
+    var self = this;
+    var popupInfo = Em.I18n.t('hosts.checkHost.popup').format(this.get('content.hostName'));
+
+    return App.showConfirmationPopup(function () {
+      self.runHostCheck();
+    }, popupInfo);
+  },
+
+  getDataForHostCheck: function () {
+    var hostName = this.get('content.hostName');
+    var jdk_location = App.router.get('clusterController.ambariProperties.jdk_location');
+    var RequestInfo = {
+      "action": "check_host",
+      "context": "Check host",
+      "parameters": {
+        "hosts" : hostName,
+        "check_execute_list": "last_agent_env_check,installed_packages,existing_repos,transparentHugePage",
+        "jdk_location" : jdk_location,
+        "threshold": "20"
+      }
+    };
+
+    return {
+      RequestInfo: RequestInfo,
+      resource_filters: {"hosts": hostName}
+    };
+  },
+
+  /**
+   * Callback for runHostCheckConfirmation
+   * @method runHostCheck
+   */
+  runHostCheck: function () {
+    var dataForCheckHostRequest = this.getDataForHostCheck();
+
+    this.set('stopChecking', false);
+    this.set('checkHostFinished', false);
+    this.setBootHostsProp();
+    this.showHostWarningsPopup();
+    this.requestToPerformHostCheck(dataForCheckHostRequest);
+  },
+
+  /**
+   * Shape controller's bootHosts property needed to host check
+   * @method setBootHostsProp
+   */
+  setBootHostsProp: function () {
+    var host = this.get('content');
+    var bootHosts = [];
+
+    host.name = host.get('hostName');
+    bootHosts.push(host);
+
+    this.set('bootHosts', bootHosts);
+  },
+
+  /**
+   * Open popup that contain hosts' warnings
+   * @return {App.ModalPopup}
+   * @method showHostWarningsPopup
+   */
+  showHostWarningsPopup: function () {
+    var self = this;
+
+    return App.ModalPopup.show({
+
+      header: Em.I18n.t('installer.step3.warnings.popup.header'),
+
+      secondary: Em.I18n.t('installer.step3.hostWarningsPopup.rerunChecks'),
+
+      primary: Em.I18n.t('common.close'),
+
+      autoHeight: false,
+
+      onPrimary: function () {
+        self.set('checksUpdateStatus', null);
+        this.hide();
+      },
+
+      onClose: function () {
+        self.set('checksUpdateStatus', null);
+        this.hide();
+      },
+
+      onSecondary: function () {
+        self.set('checkHostFinished', false);
+        self.rerunChecks();
+      },
+
+      didInsertElement: function () {
+        this._super();
+        this.fitHeight();
+      },
+
+      footerClass: App.WizardStep3HostWarningPopupFooter.reopen({
+        footerControllerBinding: 'App.router.mainHostDetailsController'
+      }),
+
+      bodyClass: App.WizardStep3HostWarningPopupBody.reopen({
+        bodyControllerBinding: 'App.router.mainHostDetailsController',
+        checkHostFinished: function () {
+          return this.get('bodyController.checkHostFinished');
+        }.property('bodyController.checkHostFinished'),
+      })
+    });
+  },
+
+
+  /**
    * Deletion of hosts not supported for this version
    * @method validateAndDeleteHost
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/dedcdf9a/ambari-web/app/controllers/wizard/step3_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step3_controller.js b/ambari-web/app/controllers/wizard/step3_controller.js
index 0ccf2ed..0e3acd2 100644
--- a/ambari-web/app/controllers/wizard/step3_controller.js
+++ b/ambari-web/app/controllers/wizard/step3_controller.js
@@ -20,7 +20,7 @@ var App = require('app');
 var lazyloading = require('utils/lazy_loading');
 var numberUtils = require('utils/number_utils');
 
-App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
+App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, App.CheckHostMixin, {
 
   name: 'wizardStep3Controller',
 
@@ -28,53 +28,12 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
 
   content: [],
 
-  bootHosts: [],
-
   registeredHosts: [],
 
-  /**
-   * @typedef {{
-   *  name: string,
-   *  hosts: string[],
-   *  hostsLong: string[],
-   *  hostsNames: string[],
-   *  onSingleHost: boolean
-   * }} checkWarning
-   */
-
-  /**
-   * @type {checkWarning[]}
-   */
-  hostCheckWarnings: [],
-
-  /**
-   * @type {checkWarning[]}
-   */
-  repoCategoryWarnings: [],
-
-  /**
-   * @type {checkWarning[]}
-   */
-  diskCategoryWarnings: [],
-
-  /**
-   * @type {checkWarning[]}
-   */
-  thpCategoryWarnings: [],
-
-  /**
-   * @type {checkWarning[]}
-   */
-  jdkCategoryWarnings: null,
-
   jdkRequestIndex: null,
 
   registrationStartedAt: null,
 
-  hostCheckResult: null,
-
-  requestId: 0,
-
   /**
    * Timeout for registration
    * Based on <code>installOptions.manualInstall</code>
@@ -146,12 +105,6 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
   hasMoreRegisteredHosts: false,
 
   /**
-   * Contain data about installed packages on hosts
-   * @type {Array}
-   */
-  hostsPackagesData: [],
-
-  /**
    * List of installed hostnames
    * @type {string[]}
    */
@@ -168,18 +121,6 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
   }.property('content.hosts'),
 
   /**
-   * All hosts warnings
-   * @type {object[]}
-   */
-  warnings: [],
-
-  /**
-   * Warnings grouped by host
-   * @type {Ember.Enumerable}
-   */
-  warningsByHost: [],
-
-  /**
    * Timeout for "warning"-requests
    * @type {number}
    */
@@ -210,18 +151,6 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
   isBackButtonDisabled: Em.computed.or('App.router.btnClickInProgress', 'isBackDisabled'),
 
   /**
-   * Progress value for "update hosts status" process
-   * @type {number}
-   */
-  checksUpdateProgress: 0,
-
-  /**
-   *
-   * @type {object}
-   */
-  checksUpdateStatus: null,
-
-  /**
    *
    * @method navigateStep
    */
@@ -774,24 +703,6 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
   },
 
   /**
-   * Show popup with regitration error-message
-   * @param {string} header
-   * @param {string} message
-   * @return {App.ModalPopup}
-   * @method registerErrPopup
-   */
-  registerErrPopup: function (header, message) {
-    return App.ModalPopup.show({
-      header: header,
-      secondary: false,
-      bodyClass: Em.View.extend({
-        template: Em.Handlebars.compile('<p>{{view.message}}</p>'),
-        message: message
-      })
-    });
-  },
-
-  /**
    * Get JDK name from server to determine if user had setup a customized JDK path when doing 'ambari-server setup'.
    * The Ambari properties are different from default ambari-server setup, property 'jdk.name' will be missing if a customized jdk path is applied.
    * @return {$.ajax}
@@ -907,23 +818,6 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
     });
   },
 
-  /**
-   * Get disk info and cpu count of booted hosts from server
-   * @return {$.ajax}
-   * @method getHostInfo
-   */
-  getHostInfo: function () {
-    this.set('isHostsWarningsLoaded', false);
-    // begin JDK check for each host
-    return App.ajax.send({
-      name: 'wizard.step3.host_info',
-      sender: this,
-      success: 'getHostInfoSuccessCallback',
-      error: 'getHostInfoErrorCallback'
-    });
-  },
-
-
   startHostcheck: function(hosts) {
     if (!hosts.everyProperty('bootStatus', 'FAILED')) {
       this.set('isWarningsLoaded', false);
@@ -934,736 +828,6 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
     }
   },
 
-  getHostNameResolution: function () {
-    if (App.get('testMode')) {
-      this.getHostCheckSuccess();
-    } else {
-      var data = this.getDataForCheckRequest("host_resolution_check", true);
-      data ? this.requestToPerformHostCheck(data) : this.stopHostCheck();
-    }
-  },
-
-  getGeneralHostCheck: function () {
-    if (App.get('testMode')) {
-      this.getHostInfo();
-    } else {
-      var data = this.getDataForCheckRequest("last_agent_env_check,installed_packages,existing_repos,transparentHugePage", false);
-      data ? this.requestToPerformHostCheck(data) : this.stopHostCheck();
-    }
-  },
-
-  /**
-   * set all fields from which depends running host check to true value
-   * which force finish checking;
-   */
-  stopHostCheck: function() {
-    this.set('stopChecking', true);
-    this.set('isJDKWarningsLoaded', true);
-    this.set('isHostsWarningsLoaded', true);
-  },
-
-  getHostCheckSuccess: function(response) {
-    if (!App.get('testMode')) {
-      this.set("requestId", response.Requests.id);
-    }
-    this.getHostCheckTasks();
-  },
-
-  /**
-   * generates data for reuest to perform check
-   * @param {string} checkExecuteList - for now supported:
-   *  <code>"last_agent_env_check"<code>
-   *  <code>"host_resolution_check"<code>
-   * @param {boolean} addHostsParameter - define whether add hosts parameter to RequestInfo
-   * @return {object|null}
-   * @method getDataForCheckRequest
-   */
-  getDataForCheckRequest: function (checkExecuteList, addHostsParameter) {
-    var newHosts = this.get('bootHosts').filterProperty('bootStatus', 'REGISTERED').getEach('name');
-    var hosts = this.get('isAddHostWizard') ? [].concat.apply([], App.MasterComponent.find().mapProperty('hostNames')).concat(newHosts).uniq() : newHosts;
-    hosts = hosts.join(',');
-    if (hosts.length == 0) return null;
-    var jdk_location = App.router.get('clusterController.ambariProperties.jdk_location');
-    var RequestInfo = {
-      "action": "check_host",
-      "context": "Check host",
-      "parameters": {
-        "check_execute_list": checkExecuteList,
-        "jdk_location" : jdk_location,
-        "threshold": "20"
-      }
-    };
-    if (addHostsParameter) {
-      RequestInfo.parameters.hosts = hosts;
-    }
-    var resource_filters = {
-      "hosts": hosts
-    };
-    return {
-      RequestInfo: RequestInfo,
-      resource_filters: resource_filters
-    }
-  },
-
-  /**
-   * send request to ceate tasks for performing hosts checks
-   * @params {object} data
-   *    {
-   *       RequestInfo: {
-   *           "action": {string},
-   *           "context": {string},
-   *           "parameters": {
-   *             "check_execute_list": {string},
-   *             "jdk_location" : {string},
-   *             "threshold": {string}
-   *             "hosts": {string|undefined}
-   *       },
-   *       resource_filters: {
-   *         "hosts": {string}
-   *       }
-   *    }
-   * @returns {$.ajax}
-   * @method requestToPerformHostCheck
-   */
-  requestToPerformHostCheck: function(data) {
-    return App.ajax.send({
-      name: 'preinstalled.checks',
-      sender: this,
-      data: {
-        RequestInfo: data.RequestInfo,
-        resource_filters: data.resource_filters
-      },
-      success: "getHostCheckSuccess",
-      error: "getHostCheckError"
-    })
-  },
-
-  /**
-   * send ajax request to get all tasks
-   * @method getHostCheckTasks
-   */
-  getHostCheckTasks: function () {
-    var self = this;
-    var requestId = this.get("requestId");
-    var checker = setTimeout(function () {
-      if (self.get('stopChecking') == true) {
-        clearTimeout(checker);
-      } else {
-        App.ajax.send({
-          name: 'preinstalled.checks.tasks',
-          sender: self,
-          data: {
-            requestId: requestId
-          },
-          success: 'getHostCheckTasksSuccess',
-          error: 'getHostCheckTasksError'
-        });
-      }
-    }, 1000);
-  },
-
-  /**
-   * add warnings to host warning popup if needed
-   * @param data {Object} - json
-   * @method getHostCheckTasksSuccess
-   */
-  getHostCheckTasksSuccess: function (data) {
-    if (!data) {
-      return;
-    }
-    if (["FAILED", "COMPLETED", "TIMEDOUT"].contains(data.Requests.request_status)) {
-      if (data.Requests.inputs.indexOf("last_agent_env_check") != -1) {
-        this.set('stopChecking', true);
-        this.set('hostsPackagesData', data.tasks.map(function (task) {
-          var installed_packages = Em.get(task, 'Tasks.structured_out.installed_packages');
-          return {
-            hostName: Em.get(task, 'Tasks.host_name'),
-            transparentHugePage: Em.get(task, 'Tasks.structured_out.transparentHugePage.message'),
-            installedPackages: installed_packages ? installed_packages : []
-          };
-        }));
-
-        this.set("hostCheckResult", data); //store the data so that it can be used later on in the getHostInfo handling logic.
-        /**
-         * Still need to get host info for checks that the host check does not perform currently
-         * Such as the OS type check and the disk space check
-         * */
-        this.getHostInfo();
-      } else if (data.Requests.inputs.indexOf("host_resolution_check") != -1) {
-        this.parseHostNameResolution(data);
-        this.getGeneralHostCheck();
-       }
-    } else {
-      this.getHostCheckTasks();
-    }
-  },
-
-  parseHostCheckWarnings: function (data) {
-    data = App.get('testMode') ? data : this.filterHostsData(data);
-    var warnings = [];
-    var warning;
-    var hosts = [];
-    var warningCategories = {
-      fileFoldersWarnings: {},
-      packagesWarnings: {},
-      processesWarnings: {},
-      servicesWarnings: {},
-      usersWarnings: {},
-      alternativeWarnings: {}
-    };
-
-    var hostsPackagesData = this.get('hostsPackagesData');
-    data.tasks.sortPropertyLight('Tasks.host_name').forEach(function (_task) {
-      var hostName = _task.Tasks.host_name;
-      var host = {
-        name: hostName,
-        warnings: []
-      };
-
-      if (!_task.Tasks.structured_out || !_task.Tasks.structured_out.last_agent_env_check) {
-        return;
-      }
-
-      var lastAgentEnvCheck = _task.Tasks.structured_out.last_agent_env_check;
-
-      //parse all directories and files warnings for host
-      var stackFoldersAndFiles = lastAgentEnvCheck.stackFoldersAndFiles || [];
-      stackFoldersAndFiles.forEach(function (path) {
-        warning = warningCategories.fileFoldersWarnings[path.name];
-        if (warning) {
-          warning.hosts.push(hostName);
-          warning.hostsLong.push(hostName);
-          warning.onSingleHost = false;
-        } else {
-          warningCategories.fileFoldersWarnings[path.name] = warning = {
-            name: path.name,
-            hosts: [hostName],
-            hostsLong: [hostName],
-            category: 'fileFolders',
-            onSingleHost: true
-          };
-        }
-        host.warnings.push(warning);
-      }, this);
-
-      //parse all package warnings for host
-      var _hostPackagesData = hostsPackagesData.findProperty('hostName', hostName);
-
-      if (_hostPackagesData) {
-        _hostPackagesData.installedPackages.forEach(function (_package) {
-          warning = warningCategories.packagesWarnings[_package.name];
-          if (warning) {
-            warning.hosts.push(hostName);
-            warning.hostsLong.push(hostName);
-            warning.version = _package.version;
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.packagesWarnings[_package.name] = warning = {
-              name: _package.name,
-              version: _package.version,
-              hosts: [hostName],
-              hostsLong: [hostName],
-              category: 'packages',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      //parse all process warnings for host
-      var hostHealth = lastAgentEnvCheck.hostHealth;
-
-      var liveServices = null;
-      var javaProcs = null;
-
-      if(hostHealth) {
-        if(hostHealth.activeJavaProcs)
-          javaProcs = hostHealth.activeJavaProcs;
-        if(hostHealth.liveServices)
-          liveServices = hostHealth.liveServices;
-      }
-
-      if (javaProcs) {
-        javaProcs.forEach(function (process) {
-          warning = warningCategories.processesWarnings[process.pid];
-          if (warning) {
-            warning.hosts.push(hostName);
-            warning.hostsLong.push(hostName);
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.processesWarnings[process.pid] = warning = {
-              name: (process.command.substr(0, 35) + '...'),
-              hosts: [hostName],
-              hostsLong: [hostName],
-              category: 'processes',
-              user: process.user,
-              pid: process.pid,
-              command: '<table><tr><td style="word-break: break-all;">' +
-                ((process.command.length < 500) ? process.command : process.command.substr(0, 230) + '...' +
-                  '<p style="text-align: center">................</p>' +
-                  '...' + process.command.substr(-230)) + '</td></tr></table>',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      //parse all service warnings for host
-      if (liveServices) {
-        liveServices.forEach(function (service) {
-          if (service.status === 'Unhealthy') {
-            warning = warningCategories.servicesWarnings[service.name];
-            if (warning) {
-              warning.hosts.push(hostName);
-              warning.hostsLong.push(hostName);
-              warning.onSingleHost = false;
-            } else {
-              warningCategories.servicesWarnings[service.name] = warning = {
-                name: service.name,
-                hosts: [hostName],
-                hostsLong: [hostName],
-                category: 'services',
-                onSingleHost: true
-              };
-            }
-            host.warnings.push(warning);
-          }
-        }, this);
-      }
-      //parse all user warnings for host
-      var existingUsers = lastAgentEnvCheck.existingUsers;
-      if (existingUsers) {
-        existingUsers.forEach(function (user) {
-          warning = warningCategories.usersWarnings[user.name];
-          if (warning) {
-            warning.hosts.push(hostName);
-            warning.hostsLong.push(hostName);
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.usersWarnings[user.name] = warning = {
-              name: user.name,
-              hosts: [hostName],
-              hostsLong: [hostName],
-              category: 'users',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      //parse misc warnings for host
-      var umask = lastAgentEnvCheck.umask;
-      if (umask && umask > 23) {
-        warning = warnings.filterProperty('category', 'misc').findProperty('name', umask);
-        if (warning) {
-          warning.hosts.push(hostName);
-          warning.hostsLong.push(hostName);
-          warning.onSingleHost = false;
-        } else {
-          warning = {
-            name: umask,
-            hosts: [hostName],
-            hostsLong: [hostName],
-            category: 'misc',
-            onSingleHost: true
-          };
-          warnings.push(warning);
-        }
-        host.warnings.push(warning);
-      }
-
-      var firewallRunning = lastAgentEnvCheck.firewallRunning;
-      if (firewallRunning !== null && firewallRunning) {
-        var name = lastAgentEnvCheck.firewallName + " Running";
-        warning = warnings.filterProperty('category', 'firewall').findProperty('name', name);
-        if (warning) {
-          warning.hosts.push(hostName);
-          warning.hostsLong.push(hostName);
-          warning.onSingleHost = false;
-        } else {
-          warning = {
-            name: name,
-            hosts: [hostName],
-            hostsLong: [hostName],
-            category: 'firewall',
-            onSingleHost: true
-          };
-          warnings.push(warning);
-        }
-        host.warnings.push(warning);
-      }
-
-      if (lastAgentEnvCheck.alternatives) {
-        lastAgentEnvCheck.alternatives.forEach(function (alternative) {
-          warning = warningCategories.alternativeWarnings[alternative.name];
-          if (warning) {
-            warning.hosts.push(hostName);
-            warning.hostsLong.push(hostName);
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.alternativeWarnings[alternative.name] = warning = {
-              name: alternative.name,
-              target: alternative.target,
-              hosts: [hostName],
-              hostsLong: [hostName],
-              category: 'alternatives',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      if (lastAgentEnvCheck.reverseLookup === false) {
-        var name = Em.I18n.t('installer.step3.hostWarningsPopup.reverseLookup.name');
-        warning = warnings.filterProperty('category', 'reverseLookup').findProperty('name', name);
-        if (warning) {
-          warning.hosts.push(hostName);
-          warning.hostsLong.push(hostName);
-          warning.onSingleHost = false;
-        } else {
-          warning = {
-            name: name,
-            hosts: [hostName],
-            hostsLong: [hostName],
-            category: 'reverseLookup',
-            onSingleHost: true
-          };
-          warnings.push(warning);
-        }
-        host.warnings.push(warning);
-      }
-      hosts.push(host);
-    }, this);
-
-    for (var categoryId in warningCategories) {
-      var category = warningCategories[categoryId];
-      for (var warningId in category) {
-        warnings.push(category[warningId]);
-      }
-    }
-
-    hosts.unshift({
-      name: 'All Hosts',
-      warnings: warnings
-    });
-    this.set('warnings', warnings);
-    this.set('warningsByHost', hosts);
-  },
-
-  /**
-   * Filter data for warnings parse
-   * is data from host in bootStrap
-   * @param {object} data
-   * @return {Object}
-   * @method filterBootHosts
-   */
-  filterHostsData: function (data) {
-    var bootHostNames = {};
-    this.get('bootHosts').forEach(function (bootHost) {
-      bootHostNames[bootHost.get('name')] = true;
-    });
-    var filteredData = {
-      href: data.href,
-      tasks: []
-    };
-    data.tasks.forEach(function (_task) {
-      if (bootHostNames[_task.Tasks.host_name]) {
-        filteredData.tasks.push(_task);
-      }
-    });
-    return filteredData;
-  },
-
-  /**
-   * parse warnings for host names resolution only
-   * @param {object} data
-   * @method parseHostNameResolution
-   */
-  parseHostNameResolution: function (data) {
-    if (!data) {
-      return;
-    }
-    data.tasks.forEach(function (task) {
-      var name = Em.I18n.t('installer.step3.hostWarningsPopup.resolution.validation.error');
-      var hostInfo = this.get("hostCheckWarnings").findProperty('name', name);
-      if (["FAILED", "COMPLETED", "TIMEDOUT"].contains(task.Tasks.status)) {
-        if (task.Tasks.status === "COMPLETED" && !!Em.get(task, "Tasks.structured_out.host_resolution_check.failed_count")) {
-          var targetHostName = Em.get(task, "Tasks.host_name");
-          var relatedHostNames = Em.get(task, "Tasks.structured_out.host_resolution_check.failures")
-            ? Em.get(task, "Tasks.structured_out.host_resolution_check.failures").mapProperty('host') : [];
-          var contextMessage = Em.I18n.t('installer.step3.hostWarningsPopup.resolution.validation.context').format(targetHostName, relatedHostNames.length + ' ' + Em.I18n.t('installer.step3.hostWarningsPopup.host' + (relatedHostNames.length == 1 ? '' : 's')));
-          var contextMessageLong = Em.I18n.t('installer.step3.hostWarningsPopup.resolution.validation.context').format(targetHostName, relatedHostNames.join(', '));
-          if (!hostInfo) {
-            hostInfo = {
-              name: name,
-              hosts: [contextMessage],
-              hostsLong: [contextMessageLong],
-              hostsNames: [targetHostName],
-              onSingleHost: true
-            };
-            this.get("hostCheckWarnings").push(hostInfo);
-          } else {
-            if (!hostInfo.hostsNames.contains(targetHostName)) {
-              hostInfo.hosts.push(contextMessage);
-              hostInfo.hostsLong.push(contextMessageLong);
-              hostInfo.hostsNames.push(targetHostName);
-              hostInfo.onSingleHost = false;
-            }
-          }
-        }
-      }
-    }, this);
-  },
-
-  getHostCheckError: function() {
-    this.getHostInfo();
-  },
-
-  stopChecking: false,
-
-  /**
-   * @method getHostCheckTasksError
-   */
-  getHostCheckTasksError: function() {
-    this.set('stopChecking', true);
-  },
-
-  /**
-   * Success-callback for hosts info request
-   * @param {object} jsonData
-   * @method getHostInfoSuccessCallback
-   */
-  getHostInfoSuccessCallback: function (jsonData) {
-    var hosts = this.get('bootHosts'),
-      self = this,
-      repoWarnings = [], hostsRepoNames = [], hostsContext = [],
-      diskWarnings = [], hostsDiskContext = [], hostsDiskNames = [],
-      thpWarnings = [], thpContext = [], thpHostsNames = [];
-
-    // parse host checks warning
-    var hostCheckResult = this.get("hostCheckResult");
-    if(hostCheckResult){
-      this.parseHostCheckWarnings(hostCheckResult);
-      this.set("hostCheckResult", null);
-    } else {
-      this.parseWarnings(jsonData);
-    }
-    this.set('isHostsWarningsLoaded', true);
-    hosts.forEach(function (_host) {
-      var host = (App.get('testMode')) ? jsonData.items[0] : jsonData.items.findProperty('Hosts.host_name', _host.name);
-      if (App.get('skipBootstrap')) {
-        self._setHostDataWithSkipBootstrap(_host);
-      }
-      else {
-        if (host) {
-          self._setHostDataFromLoadedHostInfo(_host, host);
-          var host_name = Em.get(host, 'Hosts.host_name');
-
-          var context = self.checkHostOSType(host.Hosts.os_family, host_name);
-          if (context) {
-            hostsContext.push(context);
-            hostsRepoNames.push(host_name);
-          }
-          var diskContext = self.checkHostDiskSpace(host_name, host.Hosts.disk_info);
-          if (diskContext) {
-            hostsDiskContext.push(diskContext);
-            hostsDiskNames.push(host_name);
-          }
-          // "Transparent Huge Pages" check
-          var _hostPackagesData = self.get('hostsPackagesData').findProperty('hostName', host.Hosts.host_name);
-          if (_hostPackagesData) {
-            var transparentHugePage = _hostPackagesData.transparentHugePage;
-            context = self.checkTHP(host_name, transparentHugePage);
-          } else {
-            context = self.checkTHP(host_name, Em.get(host, 'Hosts.last_agent_env.transparentHugePage'));
-          }
-          if (context) {
-            thpContext.push(context);
-            thpHostsNames.push(host_name);
-          }
-        }
-      }
-    });
-    if (hostsContext.length > 0) { // repository warning exist
-      repoWarnings.push({
-        name: Em.I18n.t('installer.step3.hostWarningsPopup.repositories.name'),
-        hosts: hostsContext,
-        hostsLong: hostsContext,
-        hostsNames: hostsRepoNames,
-        category: 'repositories',
-        onSingleHost: false
-      });
-    }
-    if (hostsDiskContext.length > 0) { // disk space warning exist
-      diskWarnings.push({
-        name: Em.I18n.t('installer.step3.hostWarningsPopup.disk.name'),
-        hosts: hostsDiskContext,
-        hostsLong: hostsDiskContext,
-        hostsNames: hostsDiskNames,
-        category: 'disk',
-        onSingleHost: false
-      });
-    }
-    if (thpContext.length > 0) { // THP warning existed
-      thpWarnings.push({
-        name: Em.I18n.t('installer.step3.hostWarningsPopup.thp.name'),
-        hosts: thpContext,
-        hostsLong: thpContext,
-        hostsNames: thpHostsNames,
-        category: 'thp',
-        onSingleHost: false
-      });
-    }
-
-    this.set('repoCategoryWarnings', repoWarnings);
-    this.set('diskCategoryWarnings', diskWarnings);
-    this.set('thpCategoryWarnings', thpWarnings);
-    this.stopRegistration();
-  },
-
-  /**
-   * Set metrics to host object
-   * Used when <code>App.skipBootstrap</code> is true
-   * @param {Ember.Object} host
-   * @returns {object}
-   * @private
-   * @methos _setHostDataWithSkipBootstrap
-   */
-  _setHostDataWithSkipBootstrap: function(host) {
-    host.set('cpu', 2);
-    host.set('memory', ((parseInt(2000000))).toFixed(2));
-    host.set('disk_info', [
-      {"mountpoint": "/", "type": "ext4"},
-      {"mountpoint": "/grid/0", "type": "ext4"},
-      {"mountpoint": "/grid/1", "type": "ext4"},
-      {"mountpoint": "/grid/2", "type": "ext4"}
-    ]);
-    return host;
-  },
-
-  /**
-   * Set loaded metrics to host object
-   * @param {object} host
-   * @param {object} hostInfo
-   * @returns {object}
-   * @method _setHostDataFromLoadedHostInfo
-   * @private
-   */
-  _setHostDataFromLoadedHostInfo: function(host, hostInfo) {
-    host.set('cpu', Em.get(hostInfo, 'Hosts.cpu_count'));
-    host.set('memory', ((parseInt(Em.get(hostInfo, 'Hosts.total_mem')))).toFixed(2));
-    host.set('disk_info', Em.get(hostInfo, 'Hosts.disk_info').filter(function (h) {
-      return h.mountpoint != "/boot"
-    }));
-    host.set('os_type', Em.get(hostInfo, 'Hosts.os_type'));
-    host.set('os_family', Em.get(hostInfo, 'Hosts.os_family'));
-    host.set('os_arch', Em.get(hostInfo, 'Hosts.os_arch'));
-    host.set('ip', Em.get(hostInfo, 'Hosts.ip'));
-    return host;
-  },
-
-  /**
-   * Error-callback for hosts info request
-   * @method getHostInfoErrorCallback
-   */
-  getHostInfoErrorCallback: function () {
-    this.set('isHostsWarningsLoaded', true);
-    this.registerErrPopup(Em.I18n.t('installer.step3.hostInformation.popup.header'), Em.I18n.t('installer.step3.hostInformation.popup.body'));
-  },
-
-  /**
-   * Enable or disable submit/retry buttons according to hosts boot statuses
-   * @method stopRegistration
-   */
-  stopRegistration: function () {
-    this.set('isSubmitDisabled', !this.get('bootHosts').someProperty('bootStatus', 'REGISTERED'));
-  },
-
-  /**
-   * Check if the 'Transparent Huge Pages' enabled.
-   * @param {string} transparentHugePage
-   * @param {string} hostName
-   * @return {string} error-message or empty string
-   * @method checkTHP
-   */
-  checkTHP: function (hostName, transparentHugePage) {
-    if (transparentHugePage == "always") {
-      return Em.I18n.t('installer.step3.hostWarningsPopup.thp.context').format(hostName);
-    } else {
-      return '';
-    }
-  },
-
-  /**
-   * Check if the customized os group contains the registered host os type. If not the repo on that host is invalid.
-   * @param {string} osType
-   * @param {string} hostName
-   * @return {string} error-message or empty string
-   * @method checkHostOSType
-   */
-  checkHostOSType: function (osFamily, hostName) {
-    if (this.get('content.stacks')) {
-      var selectedStack = this.get('content.stacks').findProperty('isSelected', true);
-      var selectedOS = [];
-      var isValid = false;
-      if (selectedStack && selectedStack.get('operatingSystems')) {
-        selectedStack.get('operatingSystems').filterProperty('isSelected', true).forEach(function (os) {
-          selectedOS.pushObject(os.get('osType'));
-          if (os.get('osType') === osFamily) {
-            isValid = true;
-          }
-        });
-      }
-      if (isValid) {
-        return '';
-      } else {
-        return Em.I18n.t('installer.step3.hostWarningsPopup.repositories.context').format(hostName, osFamily, selectedOS.uniq());
-      }
-    } else {
-      return '';
-    }
-  },
-
-  /**
-   * Check if current host has enough free disk usage.
-   * @param {string} hostName
-   * @param {object} diskInfo
-   * @return {string} error-message or empty string
-   * @method checkHostDiskSpace
-   */
-  checkHostDiskSpace: function (hostName, diskInfo) {
-    var minFreeRootSpace = App.minDiskSpace * 1024 * 1024; //in kilobyte
-    var minFreeUsrLibSpace = App.minDiskSpaceUsrLib * 1024 * 1024; //in kilobyte
-    var warningString = '';
-
-    diskInfo.forEach(function (info) {
-      switch (info.mountpoint) {
-        case '/':
-          warningString = info.available < minFreeRootSpace ?
-            Em.I18n.t('installer.step3.hostWarningsPopup.disk.context2').format(App.minDiskSpace + 'GB', info.mountpoint) + ' ' + warningString :
-            warningString;
-          break;
-        case '/usr':
-        case '/usr/lib':
-          warningString = info.available < minFreeUsrLibSpace ?
-            Em.I18n.t('installer.step3.hostWarningsPopup.disk.context2').format(App.minDiskSpaceUsrLib + 'GB', info.mountpoint) + ' ' + warningString :
-            warningString;
-          break;
-        default:
-          break;
-      }
-    });
-    if (warningString) {
-      return Em.I18n.t('installer.step3.hostWarningsPopup.disk.context1').format(hostName) + ' ' + warningString;
-    } else {
-      return '';
-    }
-  },
-
   _submitProceed: function () {
     this.set('confirmedHosts', this.get('bootHosts'));
     App.get('router').send('next');
@@ -1707,331 +871,6 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
     });
   },
 
-  /**
-   * Check warnings from server and put it in parsing
-   * @method rerunChecks
-   */
-  rerunChecks: function () {
-    var self = this;
-    var currentProgress = 0;
-    this.getHostNameResolution();
-    this.set('stopChecking', false);
-    this.getGeneralHostCheck();
-    this.checkHostJDK();
-    var interval = setInterval(function () {
-      currentProgress += 100000 / self.get('warningsTimeInterval');
-      if (currentProgress < 100) {
-        self.set('checksUpdateProgress', currentProgress);
-      } else {
-        clearInterval(interval);
-        App.ajax.send({
-          name: 'wizard.step3.rerun_checks',
-          sender: self,
-          success: 'rerunChecksSuccessCallback',
-          error: 'rerunChecksErrorCallback'
-        });
-      }
-    }, 1000);
-  },
-
-  /**
-   * Success-callback for rerun request
-   * @param {object} data
-   * @method rerunChecksSuccessCallback
-   */
-  rerunChecksSuccessCallback: function (data) {
-    this.set('checksUpdateProgress', 100);
-    this.set('checksUpdateStatus', 'SUCCESS');
-    this.parseWarnings(data);
-  },
-
-  /**
-   * Error-callback for rerun request
-   * @method rerunChecksErrorCallback
-   */
-  rerunChecksErrorCallback: function () {
-    this.set('checksUpdateProgress', 100);
-    this.set('checksUpdateStatus', 'FAILED');
-  },
-
-  /**
-   * Filter data for warnings parse
-   * is data from host in bootStrap
-   * @param {object} data
-   * @return {Object}
-   * @method filterBootHosts
-   */
-  filterBootHosts: function (data) {
-    var bootHostNames = {};
-    this.get('bootHosts').forEach(function (bootHost) {
-      bootHostNames[bootHost.get('name')] = true;
-    });
-    var filteredData = {
-      href: data.href,
-      items: []
-    };
-    data.items.forEach(function (host) {
-      if (bootHostNames[host.Hosts.host_name]) {
-        filteredData.items.push(host);
-      }
-    });
-    return filteredData;
-  },
-
-  /**
-   * Parse warnings data for each host and total
-   * @param {object} data
-   * @method parseWarnings
-   */
-  parseWarnings: function (data) {
-    data = App.get('testMode') ? data : this.filterBootHosts(data);
-    var warnings = [];
-    var warning;
-    var hosts = [];
-    var warningCategories = {
-      fileFoldersWarnings: {},
-      packagesWarnings: {},
-      processesWarnings: {},
-      servicesWarnings: {},
-      usersWarnings: {},
-      alternativeWarnings: {}
-    };
-    var hostsPackagesData = this.get('hostsPackagesData');
-
-    data.items.sortPropertyLight('Hosts.host_name').forEach(function (_host) {
-      var host = {
-        name: _host.Hosts.host_name,
-        warnings: []
-      };
-      if (!_host.Hosts.last_agent_env) {
-        // in some unusual circumstances when last_agent_env is not available from the _host,
-        // skip the _host and proceed to process the rest of the hosts.
-        return;
-      }
-
-      //parse all directories and files warnings for host
-
-      //todo: to be removed after check in new API
-      var stackFoldersAndFiles = _host.Hosts.last_agent_env.stackFoldersAndFiles || [];
-      stackFoldersAndFiles.forEach(function (path) {
-        warning = warningCategories.fileFoldersWarnings[path.name];
-        if (warning) {
-          warning.hosts.push(_host.Hosts.host_name);
-          warning.hostsLong.push(_host.Hosts.host_name);
-          warning.onSingleHost = false;
-        } else {
-          warningCategories.fileFoldersWarnings[path.name] = warning = {
-            name: path.name,
-            hosts: [_host.Hosts.host_name],
-            hostsLong: [_host.Hosts.host_name],
-            category: 'fileFolders',
-            onSingleHost: true
-          };
-        }
-        host.warnings.push(warning);
-      }, this);
-
-      //parse all package warnings for host
-      var _hostPackagesData = hostsPackagesData.findProperty('hostName', _host.Hosts.host_name);
-
-      if (_hostPackagesData) {
-        _hostPackagesData.installedPackages.forEach(function (_package) {
-          warning = warningCategories.packagesWarnings[_package.name];
-          if (warning) {
-            warning.hosts.push(_host.Hosts.host_name);
-            warning.hostsLong.push(_host.Hosts.host_name);
-            warning.version = _package.version;
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.packagesWarnings[_package.name] = warning = {
-              name: _package.name,
-              version: _package.version,
-              hosts: [_host.Hosts.host_name],
-              hostsLong: [_host.Hosts.host_name],
-              category: 'packages',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      //parse all process warnings for host
-
-      //todo: to be removed after check in new API
-      var javaProcs = _host.Hosts.last_agent_env.hostHealth ? _host.Hosts.last_agent_env.hostHealth.activeJavaProcs : _host.Hosts.last_agent_env.javaProcs;
-      if (javaProcs) {
-        javaProcs.forEach(function (process) {
-          warning = warningCategories.processesWarnings[process.pid];
-          if (warning) {
-            warning.hosts.push(_host.Hosts.host_name);
-            warning.hostsLong.push(_host.Hosts.host_name);
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.processesWarnings[process.pid] = warning = {
-              name: (process.command.substr(0, 35) + '...'),
-              hosts: [_host.Hosts.host_name],
-              hostsLong: [_host.Hosts.host_name],
-              category: 'processes',
-              user: process.user,
-              pid: process.pid,
-              command: '<table><tr><td style="word-break: break-all;">' +
-                ((process.command.length < 500) ? process.command : process.command.substr(0, 230) + '...' +
-                  '<p style="text-align: center">................</p>' +
-                  '...' + process.command.substr(-230)) + '</td></tr></table>',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      //parse all service warnings for host
-
-      //todo: to be removed after check in new API
-      if (_host.Hosts.last_agent_env.hostHealth && _host.Hosts.last_agent_env.hostHealth.liveServices) {
-        _host.Hosts.last_agent_env.hostHealth.liveServices.forEach(function (service) {
-          if (service.status === 'Unhealthy') {
-            warning = warningCategories.servicesWarnings[service.name];
-            if (warning) {
-              warning.hosts.push(_host.Hosts.host_name);
-              warning.hostsLong.push(_host.Hosts.host_name);
-              warning.onSingleHost = false;
-            } else {
-              warningCategories.servicesWarnings[service.name] = warning = {
-                name: service.name,
-                hosts: [_host.Hosts.host_name],
-                hostsLong: [_host.Hosts.host_name],
-                category: 'services',
-                onSingleHost: true
-              };
-            }
-            host.warnings.push(warning);
-          }
-        }, this);
-      }
-      //parse all user warnings for host
-
-      //todo: to be removed after check in new API
-      if (_host.Hosts.last_agent_env.existingUsers) {
-        _host.Hosts.last_agent_env.existingUsers.forEach(function (user) {
-          warning = warningCategories.usersWarnings[user.name];
-          if (warning) {
-            warning.hosts.push(_host.Hosts.host_name);
-            warning.hostsLong.push(_host.Hosts.host_name);
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.usersWarnings[user.name] = warning = {
-              name: user.name,
-              hosts: [_host.Hosts.host_name],
-              hostsLong: [_host.Hosts.host_name],
-              category: 'users',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      //parse misc warnings for host
-      var umask = _host.Hosts.last_agent_env.umask;
-      if (umask && umask > 23) {
-        warning = warnings.filterProperty('category', 'misc').findProperty('name', umask);
-        if (warning) {
-          warning.hosts.push(_host.Hosts.host_name);
-          warning.hostsLong.push(_host.Hosts.host_name);
-          warning.onSingleHost = false;
-        } else {
-          warning = {
-            name: umask,
-            hosts: [_host.Hosts.host_name],
-            hostsLong: [_host.Hosts.host_name],
-            category: 'misc',
-            onSingleHost: true
-          };
-          warnings.push(warning);
-        }
-        host.warnings.push(warning);
-      }
-
-      var firewallRunning = _host.Hosts.last_agent_env.firewallRunning;
-      if (firewallRunning !== null && firewallRunning) {
-        var name = _host.Hosts.last_agent_env.firewallName + " Running";
-        warning = warnings.filterProperty('category', 'firewall').findProperty('name', name);
-        if (warning) {
-          warning.hosts.push(_host.Hosts.host_name);
-          warning.hostsLong.push(_host.Hosts.host_name);
-          warning.onSingleHost = false;
-        } else {
-          warning = {
-            name: name,
-            hosts: [_host.Hosts.host_name],
-            hostsLong: [_host.Hosts.host_name],
-            category: 'firewall',
-            onSingleHost: true
-          };
-          warnings.push(warning);
-        }
-        host.warnings.push(warning);
-      }
-
-      if (_host.Hosts.last_agent_env.alternatives) {
-        _host.Hosts.last_agent_env.alternatives.forEach(function (alternative) {
-          warning = warningCategories.alternativeWarnings[alternative.name];
-          if (warning) {
-            warning.hosts.push(_host.Hosts.host_name);
-            warning.hostsLong.push(_host.Hosts.host_name);
-            warning.onSingleHost = false;
-          } else {
-            warningCategories.alternativeWarnings[alternative.name] = warning = {
-              name: alternative.name,
-              target: alternative.target,
-              hosts: [_host.Hosts.host_name],
-              hostsLong: [_host.Hosts.host_name],
-              category: 'alternatives',
-              onSingleHost: true
-            };
-          }
-          host.warnings.push(warning);
-        }, this);
-      }
-
-      if (_host.Hosts.last_agent_env.reverseLookup === false) {
-        var name = Em.I18n.t('installer.step3.hostWarningsPopup.reverseLookup.name');
-        warning = warnings.filterProperty('category', 'reverseLookup').findProperty('name', name);
-        if (warning) {
-          warning.hosts.push(_host.Hosts.host_name);
-          warning.hostsLong.push(_host.Hosts.host_name);
-          warning.onSingleHost = false;
-        } else {
-          warning = {
-            name: name,
-            hosts: [_host.Hosts.host_name],
-            hostsLong: [_host.Hosts.host_name],
-            category: 'reverseLookup',
-            onSingleHost: true
-          };
-          warnings.push(warning);
-        }
-        host.warnings.push(warning);
-      }
-      hosts.push(host);
-    }, this);
-
-    for (var categoryId in warningCategories) {
-      var category = warningCategories[categoryId];
-      for (var warningId in category) {
-        warnings.push(category[warningId]);
-      }
-    }
-
-    hosts.unshift({
-      name: 'All Hosts',
-      warnings: warnings
-    });
-    this.set('warnings', warnings);
-    this.set('warningsByHost', hosts);
-  },
 
   /**
    * Open popup that contain hosts' warnings
@@ -2071,7 +910,9 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
 
       footerClass: App.WizardStep3HostWarningPopupFooter,
 
-      bodyClass: App.WizardStep3HostWarningPopupBody
+      bodyClass: App.WizardStep3HostWarningPopupBody.reopen({
+        checkHostFinished: true
+      })
     });
   },
 
@@ -2088,7 +929,8 @@ App.WizardStep3Controller = Em.Controller.extend(App.ReloadPopupMixin, {
       bodyClass: Em.View.extend({
         templateName: require('templates/wizard/step3/step3_registered_hosts_popup'),
         message: Em.I18n.t('installer.step3.registeredHostsPopup'),
-        registeredHosts: self.get('registeredHosts')
+        registeredHosts: self.get('registeredHosts'),
+        checkHostsFinished: true
       })
     })
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/dedcdf9a/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 6da179a..a3c5e58 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -2538,6 +2538,7 @@ Em.I18n.translations = {
   'hosts.host.details.setRackId':'Set Rack',
   'host.host.details.installClients': 'Install clients',
   'host.host.details.reinstallClients': 'Reinstall clients',
+  'host.host.details.checkHost': 'Check host',
 
   'host.host.componentFilter.master':'Master Components',
   'host.host.componentFilter.slave':'Slave Components',
@@ -2630,6 +2631,7 @@ Em.I18n.translations = {
   'hosts.add.exit.header':'Exit',
   'hosts.add.exit.body':'Do you really want to exit Add Host Wizard?',
   'hosts.assignRack':'Assign Rack',
+  'hosts.checkHost.popup':'Are you sure you want to <b>Check host</b> for {0}?',
   'hosts.passiveMode.popup':'Are you sure you want to <b>Turn {0} Maintenance Mode</b> for {1}?',
   'hosts.passiveMode.popup.version.mismatch': '{0} has components from a stack which is not current. Before bringing this host out of maintenance mode, it is recommended that you upgrade its components to {1}',
   'hosts.passiveMode.popup.version.mismatch.multiple': 'Some hosts have components from a stack which is not current. Before bringing these hosts out of maintenance mode, it is recommended that you upgrade their components to {0}',

http://git-wip-us.apache.org/repos/asf/ambari/blob/dedcdf9a/ambari-web/app/mixins.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins.js b/ambari-web/app/mixins.js
index b27751b..ee232db 100644
--- a/ambari-web/app/mixins.js
+++ b/ambari-web/app/mixins.js
@@ -34,6 +34,7 @@ require('mixins/main/dashboard/widgets/single_numeric_threshold');
 require('mixins/main/host/details/host_components/decommissionable');
 require('mixins/main/host/details/host_components/install_component');
 require('mixins/main/host/details/actions/install_new_version');
+require('mixins/main/host/details/actions/check_host');
 require('mixins/main/host/details/support_client_configs_download');
 require('mixins/main/service/groups_mapping');
 require('mixins/main/service/themes_mapping');