blob: 0121d5337fc6e042f6783fb16f2e21719419e587 [file] [log] [blame]
/**
* 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');
App.HostComponent = DS.Model.extend({
workStatus: DS.attr('string'),
componentName: DS.attr('string'),
haStatus: DS.attr('string'),
staleConfigs: DS.attr('boolean'),
host: DS.belongsTo('App.Host'),
service: DS.belongsTo('App.Service'),
isClient:function () {
if(['PIG', 'SQOOP', 'HCAT', 'MAPREDUCE2_CLIENT'].contains(this.get('componentName'))){
return true;
}
return Boolean(this.get('componentName').match(/_client/gi));
}.property('componentName'),
isRunning: function(){
return (this.get('workStatus') == 'STARTED' || this.get('workStatus') == 'STARTING');
}.property('workStatus'),
displayName: function () {
return App.format.role(this.get('componentName'));
}.property('componentName'),
isMaster: function () {
switch (this.get('componentName')) {
case 'NAMENODE':
case 'SECONDARY_NAMENODE':
case 'SNAMENODE':
case 'JOURNALNODE':
case 'JOBTRACKER':
case 'ZOOKEEPER_SERVER':
case 'HIVE_SERVER':
case 'HIVE_METASTORE':
case 'MYSQL_SERVER':
case 'HBASE_MASTER':
case 'NAGIOS_SERVER':
case 'GANGLIA_SERVER':
case 'OOZIE_SERVER':
case 'WEBHCAT_SERVER':
case 'HUE_SERVER':
case 'HISTORYSERVER':
case 'FLUME_SERVER':
case 'RESOURCEMANAGER':
return true;
default:
return false;
}
}.property('componentName'),
isSlave: function(){
switch (this.get('componentName')) {
case 'DATANODE':
case 'TASKTRACKER':
case 'HBASE_REGIONSERVER':
case 'GANGLIA_MONITOR':
case 'NODEMANAGER':
case 'ZKFC':
return true;
default:
return false;
}
}.property('componentName'),
/**
* Only certain components can be deleted.
* They include some from master components,
* some from slave components, and rest from
* client components.
*/
isDeletable: function() {
var canDelete = false;
switch (this.get('componentName')) {
case 'DATANODE':
case 'TASKTRACKER':
case 'ZOOKEEPER_SERVER':
case 'HBASE_REGIONSERVER':
case 'GANGLIA_MONITOR':
case 'NODEMANAGER':
canDelete = true;
break;
default:
}
if (!canDelete) {
canDelete = this.get('isClient');
}
return canDelete;
}.property('componentName', 'isClient'),
/**
* A host-component is decommissioning when it is in HDFS service's list of
* decomNodes.
*/
isDecommissioning: function () {
var decommissioning = false;
var hostName = this.get('host.hostName');
var componentName = this.get('componentName');
var hdfsSvc = App.HDFSService.find().objectAt(0);
if (componentName === 'DATANODE' && hdfsSvc) {
var decomNodes = hdfsSvc.get('decommissionDataNodes');
var decomNode = decomNodes != null ? decomNodes.findProperty("hostName", hostName) : null;
decommissioning = decomNode != null;
}
return decommissioning;
}.property('componentName', 'host.hostName', 'App.router.clusterController.isLoaded', 'App.router.updateController.isUpdated'),
/**
* User friendly host component status
*/
componentTextStatus: function () {
var value = this.get("workStatus");
switch(value){
case "INSTALLING":
return 'Installing...';
case "INSTALL_FAILED":
return 'Install Failed';
case "INSTALLED":
return 'Stopped';
case "STARTED":
return 'Started';
case "STARTING":
return 'Starting...';
case "STOPPING":
return 'Stopping...';
case "UNKNOWN":
return 'Heartbeat lost...';
case "UPGRADE_FAILED":
return 'Upgrade Failed';
}
return 'Unknown';
}.property('workStatus','isDecommissioning')
});
App.HostComponent.FIXTURES = [];
App.HostComponentStatus = {
started: "STARTED",
starting: "STARTING",
stopped: "INSTALLED",
stopping: "STOPPING",
install_failed: "INSTALL_FAILED",
installing: "INSTALLING",
upgrade_failed: "UPGRADE_FAILED",
maintenance: "MAINTENANCE",
unknown: "UNKNOWN",
getKeyName:function(value){
switch(value){
case this.started:
return 'started';
case this.starting:
return 'starting';
case this.stopped:
return 'installed';
case this.stopping:
return 'stopping';
case this.install_failed:
return 'install_failed';
case this.installing:
return 'installing';
case this.upgrade_failed:
return 'upgrade_failed';
case this.maintenance:
return 'maintenance';
case this.unknown:
return 'unknown';
}
return 'none';
}
};