parseWarnings: function()

in ambari-web/app/controllers/wizard/step3_controller.js [773:970]


  parseWarnings: function (data) {
    data = App.testMode ? data : this.filterBootHosts(data);
    var warnings = [];
    var warning;
    var hosts = [];
    data.items.sort(function (a, b) {
      if (a.Hosts.host_name > b.Hosts.host_name) {
        return 1;
      }
      if (a.Hosts.host_name < b.Hosts.host_name) {
        return -1;
      }
      return 0;
    });
    data.items.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.
        console.log("last_agent_env is missing for " + _host.Hosts.host_name + ".  Skipping _host check.");
        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 || _host.Hosts.last_agent_env.paths;

      stackFoldersAndFiles.forEach(function (path) {
        warning = warnings.filterProperty('category', 'fileFolders').findProperty('name', path.name);
        if (warning) {
          warning.hosts.push(_host.Hosts.host_name);
          warning.onSingleHost = false;
        } else {
          warning = {
            name: path.name,
            hosts: [_host.Hosts.host_name],
            category: 'fileFolders',
            onSingleHost: true
          }
          warnings.push(warning);
        }
        host.warnings.push(warning);
      }, this);

      //parse all package warnings for host
      _host.Hosts.last_agent_env.installedPackages.forEach(function (_package) {
          warning = warnings.filterProperty('category', 'packages').findProperty('name', _package.name);
          if (warning) {
            warning.hosts.push(_host.Hosts.host_name);
            warning.version = _package.version,
            warning.onSingleHost = false;
          } else {
            warning = {
              name: _package.name,
              version: _package.version,
              hosts: [_host.Hosts.host_name],
              category: 'packages',
              onSingleHost: true
            }
            warnings.push(warning);
          }
          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;

      javaProcs.forEach(function (process) {
        warning = warnings.filterProperty('category', 'processes').findProperty('pid', process.pid);
        if (warning) {
          warning.hosts.push(_host.Hosts.host_name);
          warning.onSingleHost = false;
        } else {
          warning = {
            name: (process.command.substr(0, 35) + '...'),
            hosts: [_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
          }
          warnings.push(warning);
        }
        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 = warnings.filterProperty('category', 'services').findProperty('name', service.name);
            if (warning) {
              warning.hosts.push(_host.Hosts.host_name);
              warning.onSingleHost = false;
            } else {
              warning = {
                name: service.name,
                hosts: [_host.Hosts.host_name],
                category: 'services',
                onSingleHost: true
              }
              warnings.push(warning);
            }
            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 = warnings.filterProperty('category', 'users').findProperty('name', user.userName);
          if (warning) {
            warning.hosts.push(_host.Hosts.host_name);
            warning.onSingleHost = false;
          } else {
            warning = {
              name: user.userName,
              hosts: [_host.Hosts.host_name],
              category: 'users',
              onSingleHost: true
            }
            warnings.push(warning);
          }
          host.warnings.push(warning);
        }, this);
      }

      //parse misc warnings for host

      var umask = _host.Hosts.last_agent_env.umask;
      if (umask && umask !== 18) {
        warning = warnings.filterProperty('category', 'misc').findProperty('name', umask);
        if (warning) {
          warning.hosts.push(_host.Hosts.host_name);
          warning.onSingleHost = false;
        } else {
          warning = {
            name: umask,
            hosts: [_host.Hosts.host_name],
            category: 'misc',
            onSingleHost: true
          }
          warnings.push(warning);
        }
        host.warnings.push(warning);
      }
      
      var firewallRunning = _host.Hosts.last_agent_env.iptablesIsRunning;
      if (firewallRunning!==null && firewallRunning) {
        var name = Em.I18n.t('installer.step3.hostWarningsPopup.firewall.name');
        warning = warnings.filterProperty('category', 'firewall').findProperty('name', name);
        if (warning) {
          warning.hosts.push(_host.Hosts.host_name);
          warning.onSingleHost = false;
        } else {
          warning = {
            name: name,
            hosts: [_host.Hosts.host_name],
            category: 'firewall',
            onSingleHost: true
          }
          warnings.push(warning);
        }
        host.warnings.push(warning);
      }

      hosts.push(host);
    }, this);
    warnings.forEach(function (warn) {
      if (warn.hosts.length < 11) {
        warn.hostsList = warn.hosts.join('<br>')
      } else {
        warn.hostsList = warn.hosts.slice(0,10).join('<br>') + '<br> ' + Em.I18n.t('installer.step3.hostWarningsPopup.moreHosts').format(warn.hosts.length - 10);
      }
    });
    hosts.unshift({
      name: 'All Hosts',
      warnings: warnings
    });
    this.set('warnings', warnings);
    this.set('warningsByHost', hosts);
  },